diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 82405505..67d4a0c6 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -22,6 +22,24 @@ module.exports = getESLintConfig({ node: true }, + overrides: [ + { + // may use aliases/dev dependencies + files: [ + '**/test/**/*.js', + '**/test/**/*.ts' + ], + globals: { + process: true + }, + rules: { + 'import/no-unresolved': 0, + 'import/no-extraneous-dependencies': 0, + 'no-process-env': 0 + } + } + ], + ignorePatterns: ['modules/gatsby-theme-ocular'] } }); diff --git a/.gitignore b/.gitignore index be2b0b82..9ad6fb33 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ website-test/* modules/dev-tools/.alias.json coverage/ .nyc_output/ +tsconfig.tsbuildinfo diff --git a/.ocularrc.js b/.ocularrc.js index ed5ce030..9799a6f5 100644 --- a/.ocularrc.js +++ b/.ocularrc.js @@ -4,7 +4,7 @@ import {resolve} from 'path'; /** @type {OcularConfig} */ let ocularConfig = { typescript: { - check: true + project: 'tsconfig.json' }, babel: false, diff --git a/modules/dev-tools/package.json b/modules/dev-tools/package.json index 3c8d2da4..b3219495 100644 --- a/modules/dev-tools/package.json +++ b/modules/dev-tools/package.json @@ -15,14 +15,26 @@ "src", "scripts", "templates", - "ts-plugins", + "dist", "CHANGELOG.md" ], "exports": { - ".": "./src/index.js", - "./configuration": "./src/configuration/index.cjs", - "./ts-transform-version-inline": "./ts-plugins/ts-transform-version-inline/index.cjs", - "./ts-transform-append-extension": "./ts-plugins/ts-transform-append-extension/index.cjs" + ".": { + "require": "./dist/index.cjs", + "import": "./src/index.js" + }, + "./configuration": { + "require": "./dist/configuration/index.cjs", + "import": "./src/configuration/index.js" + }, + "./ts-transform-version-inline": { + "require": "./dist/ts-plugins/ts-transform-version-inline/index.cjs", + "import": "./dist/ts-plugins/ts-transform-version-inline/index.js" + }, + "./ts-transform-append-extension": { + "require": "./dist/ts-plugins/ts-transform-append-extension/index.cjs", + "import": "./dist/ts-plugins/ts-transform-append-extension/index.js" + } }, "types": "./src/index.d.ts", "main": "./src/index.js", @@ -40,7 +52,7 @@ "scripts": { "bootstrap": "yarn install-fast && ocular-bootstrap", "clean": "echo No build needed", - "build": "tsc && find ./ts-plugins -depth -name \"*.js\" -exec sh -c 'f=\"{}\"; mv -- \"$f\" \"${f%.js}.cjs\"' \\;", + "build": "(cd ../.. && ocular-build)", "lint": "npm run lint-yarn", "lint-yarn": "!(grep -q unpm.u yarn.lock) || (echo 'Please rebuild yarn file using public npmrc' && false)", "publish-prod": "npm run build && npm run test && npm run test dist && npm publish", diff --git a/modules/dev-tools/scripts/bootstrap.js b/modules/dev-tools/scripts/bootstrap.js index 7684322b..2a2e243a 100755 --- a/modules/dev-tools/scripts/bootstrap.js +++ b/modules/dev-tools/scripts/bootstrap.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/build.js b/modules/dev-tools/scripts/build.js index 01d3d9f9..230d3737 100755 --- a/modules/dev-tools/scripts/build.js +++ b/modules/dev-tools/scripts/build.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/build.sh b/modules/dev-tools/scripts/build.sh index 57542f85..572a654f 100755 --- a/modules/dev-tools/scripts/build.sh +++ b/modules/dev-tools/scripts/build.sh @@ -3,11 +3,11 @@ set -e DEV_TOOLS_DIR=$(dirname $0)/.. -CONFIG=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".babel.configPath"` -MODULES=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".modules" | sed -E "s/,/ /g"` -EXTENSIONS=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".babel.extensions"` -TS_PROJECT=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".typescript.project"` -IS_ESM=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".esm"` +CONFIG=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".babel.configPath"` +MODULES=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".modules" | sed -E "s/,/ /g"` +EXTENSIONS=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".babel.extensions"` +TS_PROJECT=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".typescript.project"` +IS_ESM=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".esm"` check_target() { if [[ ! "$1" =~ ^es5|esm ]]; then @@ -28,7 +28,7 @@ build_src() { build_module_esm() { build_src dist esm-strict - node $DEV_TOOLS_DIR/src/build-cjs.js + ts-node $DEV_TOOLS_DIR/src/build-cjs.js } build_module() { diff --git a/modules/dev-tools/scripts/bundle.js b/modules/dev-tools/scripts/bundle.js index 12cd495c..f84a9c89 100755 --- a/modules/dev-tools/scripts/bundle.js +++ b/modules/dev-tools/scripts/bundle.js @@ -1,7 +1,7 @@ #!/usr/bin/env node import esbuild from 'esbuild'; -import {getBundleConfig} from '../src/configuration/get-esbuild-config.js'; +import {getBundleConfig} from '../dist/configuration/get-esbuild-config.js'; // Parse command line arguments let entryPoint; diff --git a/modules/dev-tools/scripts/clean.js b/modules/dev-tools/scripts/clean.js index 57053f26..f9020a3d 100755 --- a/modules/dev-tools/scripts/clean.js +++ b/modules/dev-tools/scripts/clean.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/lint.js b/modules/dev-tools/scripts/lint.js index b1bc6d83..78eaa0dd 100755 --- a/modules/dev-tools/scripts/lint.js +++ b/modules/dev-tools/scripts/lint.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/lint.sh b/modules/dev-tools/scripts/lint.sh index 07c5cb16..dc6691d7 100755 --- a/modules/dev-tools/scripts/lint.sh +++ b/modules/dev-tools/scripts/lint.sh @@ -9,12 +9,12 @@ MODE=$1 DEV_TOOLS_DIR=$(dirname $0)/.. -DIRECTORIES=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".lint.paths"` +DIRECTORIES=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".lint.paths"` if [[ $DIRECTORIES == *","* ]]; then DIRECTORIES={$DIRECTORIES} fi -EXTENSIONS=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".lint.extensions"` +EXTENSIONS=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".lint.extensions"` if [[ $EXTENSIONS == *","* ]]; then EXTENSIONS={$EXTENSIONS} fi diff --git a/modules/dev-tools/scripts/metrics.js b/modules/dev-tools/scripts/metrics.js index f870f2a5..44d5484d 100755 --- a/modules/dev-tools/scripts/metrics.js +++ b/modules/dev-tools/scripts/metrics.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/metrics.sh b/modules/dev-tools/scripts/metrics.sh index 5e508618..0d4c70f1 100755 --- a/modules/dev-tools/scripts/metrics.sh +++ b/modules/dev-tools/scripts/metrics.sh @@ -10,7 +10,7 @@ WORKING_DIR=`pwd` TMP_DIR=$WORKING_DIR/tmp # Get size metric entry point -ENTRY_POINTS=`node $DEV_TOOLS_DIR/src/helpers/get-config.js ".entry.size"` +ENTRY_POINTS=`ts-node $DEV_TOOLS_DIR/src/helpers/get-config.js ".entry.size"` IFS=',' read -a ENTRY_POINTS_ARR <<< "$ENTRY_POINTS" IFS=' ' diff --git a/modules/dev-tools/scripts/publish.js b/modules/dev-tools/scripts/publish.js index a935dd04..b6298aa0 100755 --- a/modules/dev-tools/scripts/publish.js +++ b/modules/dev-tools/scripts/publish.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/shell.js b/modules/dev-tools/scripts/shell.js new file mode 100644 index 00000000..7071711d --- /dev/null +++ b/modules/dev-tools/scripts/shell.js @@ -0,0 +1,11 @@ +import {execSync} from 'child_process'; + +export function execShellCommand(command, args = []) { + try { + execSync(`${command} ${args.join(' ')}`, { + stdio: 'inherit' + }); + } catch (err) { + process.exit(err.status); + } +} diff --git a/modules/dev-tools/scripts/test.js b/modules/dev-tools/scripts/test.js index 3536e93c..2abce842 100755 --- a/modules/dev-tools/scripts/test.js +++ b/modules/dev-tools/scripts/test.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import {execShellCommand} from '../src/utils/shell.js'; +import {execShellCommand} from './shell.js'; import {join} from 'path'; const scriptDir = new URL(import.meta.url).pathname; diff --git a/modules/dev-tools/scripts/test.sh b/modules/dev-tools/scripts/test.sh index 3977be03..6ee4633b 100755 --- a/modules/dev-tools/scripts/test.sh +++ b/modules/dev-tools/scripts/test.sh @@ -16,7 +16,7 @@ usage() { } run_test_script() { - (set -x; NODE_ENV=test node $TEST_SCRIPT $1) + (set -x; NODE_ENV=test ts-node $TEST_SCRIPT $1) } run_full_test() { @@ -48,7 +48,7 @@ case $MODE in "node-debug") echo "Open chrome://inspect/#devices to attach debugger." - (set -x; node --inspect-brk $TEST_SCRIPT node) + (set -x; ts-node --inspect-brk $TEST_SCRIPT node) ;; "dist") @@ -57,7 +57,6 @@ case $MODE in "cover") run_test_script cover - # (set -x; npx c8 node $TEST_SCRIPT cover) (set -x; npx c8 report --reporter=lcov) ;; diff --git a/modules/dev-tools/src/build-cjs.js b/modules/dev-tools/src/build-cjs.js index 4842a421..86a395cc 100644 --- a/modules/dev-tools/src/build-cjs.js +++ b/modules/dev-tools/src/build-cjs.js @@ -4,14 +4,13 @@ import {getCJSEntryPoints} from './helpers/get-cjs-entry-points.js'; import {getCJSExportConfig} from './configuration/get-esbuild-config.js'; async function main() { - for (const fileName of getCJSEntryPoints()) { - const inputPath = `./dist/${fileName}.js`; + for (const entry of getCJSEntryPoints()) { try { - await fs.stat(inputPath); + await fs.stat(entry.inputFile); const esbuildConfig = await getCJSExportConfig({ - input: inputPath, - output: `dist/${fileName}.cjs` + input: entry.inputFile, + output: entry.outputFile }); const result = await esbuild.build(esbuildConfig); if (result.errors.length > 0) { @@ -19,7 +18,7 @@ async function main() { } } catch { // File does not exist - console.error(`\x1b[33mCannot find file ${inputPath}\x1b[0m`); + console.error(`\x1b[33mCannot find file ${entry.inputFile}\x1b[0m`); } } } diff --git a/modules/dev-tools/src/configuration/eslint-config-uber-es2015/eslintrc.cjs b/modules/dev-tools/src/configuration/eslint-config-uber-es2015/eslintrc.json similarity index 77% rename from modules/dev-tools/src/configuration/eslint-config-uber-es2015/eslintrc.cjs rename to modules/dev-tools/src/configuration/eslint-config-uber-es2015/eslintrc.json index f9267335..f76ada02 100644 --- a/modules/dev-tools/src/configuration/eslint-config-uber-es2015/eslintrc.cjs +++ b/modules/dev-tools/src/configuration/eslint-config-uber-es2015/eslintrc.json @@ -17,22 +17,21 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - -module.exports = { - extends: [ - './best-practices.json', - './ecmascript-6.json', - './miscellaneous.json', - './stylistic-issues.json', - '../eslint-config-uber-es5/eslintrc.cjs' +{ + "extends": [ + "./best-practices.json", + "./ecmascript-6.json", + "./miscellaneous.json", + "./stylistic-issues.json", + "../eslint-config-uber-es5/eslintrc.json" ], - env: { - es6: true + "env": { + "es6": true }, - parserOptions: { - sourceType: 'module', - ecmaFeatures: { - experimentalObjectRestSpread: true + "parserOptions": { + "sourceType": "module", + "ecmaFeatures": { + "experimentalObjectRestSpread": true } } -}; +} diff --git a/modules/dev-tools/src/configuration/eslint-config-uber-es5/errors.cjs b/modules/dev-tools/src/configuration/eslint-config-uber-es5/errors.json similarity index 74% rename from modules/dev-tools/src/configuration/eslint-config-uber-es5/errors.cjs rename to modules/dev-tools/src/configuration/eslint-config-uber-es5/errors.json index ee98ab3d..7ee7a81c 100644 --- a/modules/dev-tools/src/configuration/eslint-config-uber-es5/errors.cjs +++ b/modules/dev-tools/src/configuration/eslint-config-uber-es5/errors.json @@ -20,96 +20,96 @@ // These rules relate to possible syntax or logic errors // Categorized as "errors" here: http://eslint.org/docs/rules/ -module.exports = { - rules: { +{ + "rules": { /** * Possible Errors Section from http://eslint.org/docs/rules/: */ // http://eslint.org/docs/rules/no-cond-assign - 'no-cond-assign': 2, + "no-cond-assign": 2, // http://eslint.org/docs/rules/no-constant-condition - 'no-constant-condition': 2, + "no-constant-condition": 2, // http://eslint.org/docs/rules/no-console // highly agreed upon - 'no-console': 2, + "no-console": 2, // http://eslint.org/docs/rules/no-control-regex - 'no-control-regex': 2, + "no-control-regex": 2, // http://eslint.org/docs/rules/no-debugger // highly agreed upon - 'no-debugger': 2, + "no-debugger": 2, // http://eslint.org/docs/rules/no-dupe-args - 'no-dupe-args': 2, + "no-dupe-args": 2, // http://eslint.org/docs/rules/no-dupe-keys - 'no-dupe-keys': 2, + "no-dupe-keys": 2, // http://eslint.org/docs/rules/no-duplicate-case - 'no-duplicate-case': 2, + "no-duplicate-case": 2, // http://eslint.org/docs/rules/no-empty-character-class - 'no-empty-character-class': 2, + "no-empty-character-class": 2, // http://eslint.org/docs/rules/no-empty // highly agreed upon - 'no-empty': 2, + "no-empty": 2, // http://eslint.org/docs/rules/no-ex-assign // abnormal behavior in ie 6-8 - 'no-ex-assign': 2, + "no-ex-assign": 2, // http://eslint.org/docs/rules/no-extra-boolean-cast // highly agreed upon - 'no-extra-boolean-cast': 2, + "no-extra-boolean-cast": 2, // http://eslint.org/docs/rules/no-extra-parens - 'no-extra-parens': [2, 'functions'], + "no-extra-parens": [2, "functions"], // http://eslint.org/docs/rules/no-extra-semi // highly agreed upon - 'no-extra-semi': 2, + "no-extra-semi": 2, // http://eslint.org/docs/rules/no-func-assign - 'no-func-assign': 2, + "no-func-assign": 2, // http://eslint.org/docs/rules/no-inner-declarations - 'no-inner-declarations': [2, 'functions'], + "no-inner-declarations": [2, "functions"], - 'no-invalid-regexp': 2, + "no-invalid-regexp": 2, - 'no-irregular-whitespace': 2, + "no-irregular-whitespace": 2, - 'no-obj-calls': 2, + "no-obj-calls": 2, // http://eslint.org/docs/rules/no-prototype-builtins - 'no-prototype-builtins': 0, + "no-prototype-builtins": 0, - 'no-regex-spaces': 2, + "no-regex-spaces": 2, - 'no-sparse-arrays': 2, + "no-sparse-arrays": 2, // http://eslint.org/docs/rules/no-template-curly-in-string - 'no-template-curly-in-string': 2, + "no-template-curly-in-string": 2, - 'no-unexpected-multiline': 2, + "no-unexpected-multiline": 2, - 'no-unreachable': 2, + "no-unreachable": 2, // http://eslint.org/docs/rules/no-unsafe-finally - 'no-unsafe-finally': 2, + "no-unsafe-finally": 2, // http://eslint.org/docs/rules/no-unsafe-negation - 'no-unsafe-negation': 2, + "no-unsafe-negation": 2, - 'use-isnan': 2, + "use-isnan": 2, - 'valid-jsdoc': 0, + "valid-jsdoc": 0, - 'valid-typeof': 2 + "valid-typeof": 2 } -}; +} diff --git a/modules/dev-tools/src/configuration/eslint-config-uber-es5/eslintrc.cjs b/modules/dev-tools/src/configuration/eslint-config-uber-es5/eslintrc.json similarity index 69% rename from modules/dev-tools/src/configuration/eslint-config-uber-es5/eslintrc.cjs rename to modules/dev-tools/src/configuration/eslint-config-uber-es5/eslintrc.json index da8a9e1f..e972a51f 100644 --- a/modules/dev-tools/src/configuration/eslint-config-uber-es5/eslintrc.cjs +++ b/modules/dev-tools/src/configuration/eslint-config-uber-es5/eslintrc.json @@ -18,30 +18,29 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -'use strict'; -module.exports = { - extends: [ - './best-practices.json', - './errors.cjs', - './miscellaneous.json', - './node-js-and-common-js.json', - './strict-mode.json', - './stylistic-issues.json', - './variables.json' +{ + "extends": [ + "./best-practices.json", + "./errors.json", + "./miscellaneous.json", + "./node-js-and-common-js.json", + "./strict-mode.json", + "./stylistic-issues.json", + "./variables.json" ], - parser: 'espree', // TODO: remove? - env: { - browser: false, - node: false, - amd: false, - mocha: false, - jasmine: false, - es6: false + "parser": "espree", // TODO: remove? + "env": { + "browser": false, + "node": false, + "amd": false, + "mocha": false, + "jasmine": false, + "es6": false }, - globals: { - __dirname: false, - __filename: false, - require: false, - module: false + "globals": { + "__dirname": false, + "__filename": false, + "require": false, + "module": false } -}; +} diff --git a/modules/dev-tools/src/configuration/eslint-config-uber-jsx/eslintrc.cjs b/modules/dev-tools/src/configuration/eslint-config-uber-jsx/eslintrc.json similarity index 79% rename from modules/dev-tools/src/configuration/eslint-config-uber-jsx/eslintrc.cjs rename to modules/dev-tools/src/configuration/eslint-config-uber-jsx/eslintrc.json index eed75d9a..2e5e0ae7 100644 --- a/modules/dev-tools/src/configuration/eslint-config-uber-jsx/eslintrc.cjs +++ b/modules/dev-tools/src/configuration/eslint-config-uber-jsx/eslintrc.json @@ -18,18 +18,18 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -module.exports = { - extends: [ - '../eslint-config-uber-es2015/eslintrc.cjs', - './best-practices.json', - './miscellaneous.json', - './stylistic-issues.json' +{ + "extends": [ + "../eslint-config-uber-es2015/eslintrc.json", + "./best-practices.json", + "./miscellaneous.json", + "./stylistic-issues.json" ], - parserOptions: { - ecmaFeatures: { - jsx: true, - experimentalObjectRestSpread: true + "parserOptions": { + "ecmaFeatures": { + "jsx": true, + "experimentalObjectRestSpread": true } }, - plugins: ['react'] -}; + "plugins": ["react"] +} diff --git a/modules/dev-tools/src/configuration/get-babel-config.cjs b/modules/dev-tools/src/configuration/get-babel-config.js similarity index 94% rename from modules/dev-tools/src/configuration/get-babel-config.cjs rename to modules/dev-tools/src/configuration/get-babel-config.js index d9bb49ff..ffc6f102 100644 --- a/modules/dev-tools/src/configuration/get-babel-config.cjs +++ b/modules/dev-tools/src/configuration/get-babel-config.js @@ -1,6 +1,6 @@ /** @typedef {import('./get-babel-config')} types */ -const deepMerge = require('deepmerge'); -const {inspect} = require('util'); +import deepMerge from 'deepmerge'; +import {inspect} from 'util'; // The following targets are designed to support the most commonly used evergreen browsers. // As of Feb 2021 they all support async function, async iterator, and spread operator. @@ -80,7 +80,7 @@ const ENV_CONFIG = { ], plugins: [ ...COMMON_PLUGINS, - "babel-plugin-add-import-extension", + 'babel-plugin-add-import-extension', // TODO - we likely do not need runtime transforms for the esm setting ['@babel/transform-runtime', {useESModules: true}] ] @@ -108,7 +108,7 @@ const ENV_CONFIG = { ENV_CONFIG.development = ENV_CONFIG.es5; /** @type {types['getBabelConfig']} */ -module.exports.getBabelConfig = function getBabelConfig(options = {}) { +export function getBabelConfig(options = {}) { return (api) => { if (api.cache) { api.cache.using(() => process.env.BABEL_ENV); @@ -121,7 +121,7 @@ module.exports.getBabelConfig = function getBabelConfig(options = {}) { if (options.react) { config = deepMerge(config, { presets: ['@babel/preset-react'] - }) + }); } if (options.overrides) { config = deepMerge(config, options.overrides); @@ -133,4 +133,4 @@ module.exports.getBabelConfig = function getBabelConfig(options = {}) { return config; }; -}; +} diff --git a/modules/dev-tools/src/configuration/get-eslint-config.cjs b/modules/dev-tools/src/configuration/get-eslint-config.js similarity index 92% rename from modules/dev-tools/src/configuration/get-eslint-config.cjs rename to modules/dev-tools/src/configuration/get-eslint-config.js index f73cbb36..2a76b4fa 100644 --- a/modules/dev-tools/src/configuration/get-eslint-config.cjs +++ b/modules/dev-tools/src/configuration/get-eslint-config.js @@ -1,10 +1,11 @@ -const typescriptConfigs = require('@typescript-eslint/eslint-plugin').configs; -const deepMerge = require('deepmerge'); -const {getValidPath} = require('../utils/utils.cjs'); -const {inspect} = require('util'); -const {resolve} = require('path'); +import eslint from '@typescript-eslint/eslint-plugin'; +import deepMerge from 'deepmerge'; +import {getValidPath, packageDir} from '../utils/utils'; +import {inspect} from 'util'; +import {resolve} from 'path'; -const localRules = (path) => resolve(__dirname, path); +const typescriptConfigs = eslint.configs; +const localRules = (path) => resolve(packageDir, '../src/configuration', path); const DEFAULT_OPTIONS = { react: false @@ -12,7 +13,7 @@ const DEFAULT_OPTIONS = { const DEFAULT_CONFIG = { extends: [ - localRules('./eslint-config-uber-es2015/eslintrc.cjs'), + localRules('./eslint-config-uber-es2015/eslintrc.json'), 'prettier', 'prettier/react', 'plugin:import/errors' @@ -73,7 +74,6 @@ const DEFAULT_CONFIG = { }, plugins: ['@typescript-eslint'], rules: { - ...typescriptConfigs['eslint-recommended'].rules, ...typescriptConfigs.recommended.rules, ...typescriptConfigs['recommended-requiring-type-checking'].rules, @@ -99,8 +99,6 @@ const DEFAULT_CONFIG = { // typescript rules - - // Some of JS rules don't always work correctly in TS and // hence need to be reimported as TS rules 'no-redeclare': 'off', @@ -162,7 +160,7 @@ const DEFAULT_CONFIG = { function getReactConfig(options) { return { extends: [ - localRules('./eslint-config-uber-jsx/eslintrc.cjs'), + localRules('./eslint-config-uber-jsx/eslintrc.json'), 'prettier', 'prettier/react', 'plugin:import/errors' @@ -176,7 +174,7 @@ function getReactConfig(options) { }; } -module.exports.getESLintConfig = function getESLintConfig(options = {}) { +export function getESLintConfig(options = {}) { options = {...DEFAULT_OPTIONS, ...options}; let config = {...DEFAULT_CONFIG}; @@ -192,4 +190,4 @@ module.exports.getESLintConfig = function getESLintConfig(options = {}) { } return config; -}; +} diff --git a/modules/dev-tools/src/configuration/get-prettier-config.cjs b/modules/dev-tools/src/configuration/get-prettier-config.js similarity index 78% rename from modules/dev-tools/src/configuration/get-prettier-config.cjs rename to modules/dev-tools/src/configuration/get-prettier-config.js index 9a7d7ef4..672cf974 100644 --- a/modules/dev-tools/src/configuration/get-prettier-config.cjs +++ b/modules/dev-tools/src/configuration/get-prettier-config.js @@ -1,5 +1,5 @@ /** @typedef {import('./get-prettier-config')} types */ -const deepMerge = require('deepmerge'); +import deepMerge from 'deepmerge'; const DEFAULT_CONFIG = { printWidth: 100, @@ -10,7 +10,7 @@ const DEFAULT_CONFIG = { }; /** @type {types['getPrettierConfig']} */ -module.exports.getPrettierConfig = function getPrettierConfig(options = {}) { +export function getPrettierConfig(options = {}) { let config = {...DEFAULT_CONFIG}; if (options.overrides) { config = deepMerge(config, options.overrides); @@ -20,4 +20,4 @@ module.exports.getPrettierConfig = function getPrettierConfig(options = {}) { console.log(config); } return config; -}; +} diff --git a/modules/dev-tools/src/configuration/index.cjs b/modules/dev-tools/src/configuration/index.cjs deleted file mode 100644 index 724b55b4..00000000 --- a/modules/dev-tools/src/configuration/index.cjs +++ /dev/null @@ -1,11 +0,0 @@ -// JS Tool Configurations -const {getBabelConfig} = require('./get-babel-config.cjs'); -const {getESLintConfig} = require('./get-eslint-config.cjs'); -const {getPrettierConfig} = require('./get-prettier-config.cjs'); - -module.exports = { - // JS Tool Configurations - getBabelConfig, - getESLintConfig, - getPrettierConfig -}; diff --git a/modules/dev-tools/src/configuration/index.js b/modules/dev-tools/src/configuration/index.js new file mode 100644 index 00000000..ec9d4f26 --- /dev/null +++ b/modules/dev-tools/src/configuration/index.js @@ -0,0 +1,4 @@ +// JS Tool Configurations +export {getBabelConfig} from './get-babel-config'; +export {getESLintConfig} from './get-eslint-config'; +export {getPrettierConfig} from './get-prettier-config'; diff --git a/modules/dev-tools/src/helpers/esm-loader.js b/modules/dev-tools/src/helpers/esm-loader.js index 1fef72bf..9dae2607 100644 --- a/modules/dev-tools/src/helpers/esm-loader.js +++ b/modules/dev-tools/src/helpers/esm-loader.js @@ -7,11 +7,11 @@ import path from 'path'; import fs from 'fs'; import {pathToFileURL} from 'url'; import {resolve as resolveTs, getFormat, transformSource, load} from 'ts-node/esm'; -import {getValidPath} from '../utils/utils.js'; +import {getValidPath, packageDir} from '../utils/utils.js'; export {getFormat, transformSource, load}; // Load alias from file -const pathJSON = fs.readFileSync(path.resolve(cwd(), '../../.alias.json'), 'utf-8'); +const pathJSON = fs.readFileSync(path.resolve(packageDir, '../.alias.json'), 'utf-8'); const paths = JSON.parse(pathJSON); const matchPath = createMatchPath(paths); @@ -76,8 +76,3 @@ function createMatchPath(aliases) { return null; }; } - -function cwd() { - const scriptPath = new URL(import.meta.url).pathname; - return path.resolve(scriptPath, '..'); -} diff --git a/modules/dev-tools/src/helpers/get-cjs-entry-points.js b/modules/dev-tools/src/helpers/get-cjs-entry-points.js index c27eab4c..7c4e2624 100644 --- a/modules/dev-tools/src/helpers/get-cjs-entry-points.js +++ b/modules/dev-tools/src/helpers/get-cjs-entry-points.js @@ -1,5 +1,4 @@ import fs from 'fs'; -import {basename} from 'path'; export function getCJSEntryPoints() { const packageInfo = JSON.parse(fs.readFileSync('package.json', 'utf-8')); @@ -7,10 +6,24 @@ export function getCJSEntryPoints() { if (packageInfo.exports) { const result = []; for (const key in packageInfo.exports) { - const cjsEntry = packageInfo.exports[key].require; - if (cjsEntry) { - const fileName = basename(cjsEntry.default || cjsEntry, '.cjs'); - result.push(fileName); + const entry = packageInfo.exports[key]; + let outputFile; + if (typeof entry === 'string') { + outputFile = entry; + } else if (entry.require) { + outputFile = entry.require; + } else if (entry.default) { + outputFile = entry.default; + } + if (outputFile && outputFile.endsWith('.cjs')) { + let inputFile; + + if (entry.import) { + inputFile = entry.import; + } else { + inputFile = outputFile.replace('.cjs', '.js'); + } + result.push({inputFile, outputFile}); } } return result; diff --git a/modules/dev-tools/src/helpers/get-config.js b/modules/dev-tools/src/helpers/get-config.js index 576ee81b..dbfbd68b 100644 --- a/modules/dev-tools/src/helpers/get-config.js +++ b/modules/dev-tools/src/helpers/get-config.js @@ -4,7 +4,7 @@ Example: $ node get-config.js ".babel.configPath" */ -import {getOcularConfig} from '../helpers/get-ocular-config.js'; +import {getOcularConfig} from './get-ocular-config.js'; let ocularConfig; try { diff --git a/modules/dev-tools/src/helpers/get-ocular-config.js b/modules/dev-tools/src/helpers/get-ocular-config.js index 37998388..dccf22fe 100644 --- a/modules/dev-tools/src/helpers/get-ocular-config.js +++ b/modules/dev-tools/src/helpers/get-ocular-config.js @@ -3,11 +3,11 @@ import fs from 'fs'; import {resolve} from 'path'; import getAliases, {getModuleInfo} from './aliases.js'; -import {shallowMerge, getValidPath} from '../utils/utils.js'; +import {shallowMerge, getValidPath, packageDir} from '../utils/utils.js'; export async function getOcularConfig(options = {}) { const packageRoot = options.root || process.env.PWD; - const ocularRoot = resolve(cwd(), '../..'); + const ocularRoot = resolve(packageDir, '..'); const IS_MONOREPO = fs.existsSync(resolve(packageRoot, './modules')); @@ -65,7 +65,7 @@ export async function getOcularConfig(options = {}) { configPath: getValidPath( resolve(packageRoot, './vite.config.js'), resolve(packageRoot, './vite.config.cjs'), - resolve(ocularRoot, 'src/configuration/vite.config.js') + resolve(ocularRoot, 'dist/configuration/vite.config.js') ) } }; @@ -125,8 +125,3 @@ async function getUserConfig(packageRoot, options) { return userConfig; } - -function cwd() { - const scriptPath = new URL(import.meta.url).pathname; - return resolve(scriptPath, '..'); -} diff --git a/modules/dev-tools/ts-plugins/ts-transform-append-extension/index.ts b/modules/dev-tools/src/ts-plugins/ts-transform-append-extension/index.ts similarity index 100% rename from modules/dev-tools/ts-plugins/ts-transform-append-extension/index.ts rename to modules/dev-tools/src/ts-plugins/ts-transform-append-extension/index.ts diff --git a/modules/dev-tools/ts-plugins/ts-transform-version-inline/index.ts b/modules/dev-tools/src/ts-plugins/ts-transform-version-inline/index.ts similarity index 100% rename from modules/dev-tools/ts-plugins/ts-transform-version-inline/index.ts rename to modules/dev-tools/src/ts-plugins/ts-transform-version-inline/index.ts diff --git a/modules/dev-tools/src/utils/utils.cjs b/modules/dev-tools/src/utils/utils.cjs deleted file mode 100644 index 1323cea1..00000000 --- a/modules/dev-tools/src/utils/utils.cjs +++ /dev/null @@ -1,14 +0,0 @@ -const fs = require('fs'); - -function getValidPath(...resolveOrder) { - for (const path of resolveOrder) { - if (fs.existsSync(path)) { - return path; - } - } - return null; -} - -module.exports = { - getValidPath -}; diff --git a/modules/dev-tools/src/utils/utils.js b/modules/dev-tools/src/utils/utils.js index 15e3c356..655a7c8b 100644 --- a/modules/dev-tools/src/utils/utils.js +++ b/modules/dev-tools/src/utils/utils.js @@ -1,4 +1,16 @@ import fs from 'fs'; +import {resolve, dirname} from 'path'; +import {fileURLToPath} from 'node:url'; + +export const packageDir = (function () { + let dir; + try { + dir = __dirname; + } catch (e) { + dir = dirname(fileURLToPath(import.meta.url)); + } + return resolve(dir, '..'); +})(); export function shallowMerge(base, override) { for (const key in override) { diff --git a/modules/dev-tools/test/browser.js b/modules/dev-tools/test/browser.js deleted file mode 100644 index ec45fb65..00000000 --- a/modules/dev-tools/test/browser.js +++ /dev/null @@ -1 +0,0 @@ -import './lib/utils.spec'; diff --git a/modules/dev-tools/test/index.js b/modules/dev-tools/test/index.js index 8b5d352c..f6b175d2 100644 --- a/modules/dev-tools/test/index.js +++ b/modules/dev-tools/test/index.js @@ -1,3 +1,2 @@ import './lib/utils.spec'; -// import './lib/configuration.spec'; -// TODO - issues after upgrade +import './lib/configuration.spec'; diff --git a/modules/dev-tools/test/lib/configuration.spec.js b/modules/dev-tools/test/lib/configuration.spec.js index efd070d2..014dc8d6 100644 --- a/modules/dev-tools/test/lib/configuration.spec.js +++ b/modules/dev-tools/test/lib/configuration.spec.js @@ -1,9 +1,5 @@ import test from 'tape-promise/tape'; -import { - getBabelConfig, - getESLintConfig, - getPrettierConfig -} from '../../src/configuration/index.cjs'; +import {getBabelConfig, getESLintConfig, getPrettierConfig} from 'ocular-dev-tools/configuration'; test('dev-tools#getConfig', (t) => { const mockBabelApi = {cache: {using: () => {}}, env: (env) => env}; diff --git a/modules/dev-tools/test/lib/utils.spec.js b/modules/dev-tools/test/lib/utils.spec.js index 2b1274c0..9ca480a5 100644 --- a/modules/dev-tools/test/lib/utils.spec.js +++ b/modules/dev-tools/test/lib/utils.spec.js @@ -1,5 +1,5 @@ import test from 'tape-promise/tape'; -import {shallowMerge} from '../../src/utils/utils.js'; +import {shallowMerge} from 'ocular-dev-tools/utils/utils.js'; test('dev-tools#utils', (t) => { t.equals(typeof shallowMerge, 'function'); diff --git a/modules/dev-tools/test/node.js b/modules/dev-tools/test/node.js deleted file mode 100644 index 72e6c846..00000000 --- a/modules/dev-tools/test/node.js +++ /dev/null @@ -1 +0,0 @@ -// These pull in babel plugins that only work in Node.js diff --git a/modules/dev-tools/ts-plugins/.gitignore b/modules/dev-tools/ts-plugins/.gitignore deleted file mode 100644 index cf16a28b..00000000 --- a/modules/dev-tools/ts-plugins/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.cjs \ No newline at end of file diff --git a/modules/dev-tools/ts-plugins/.npmignore b/modules/dev-tools/ts-plugins/.npmignore deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/dev-tools/tsconfig.json b/modules/dev-tools/tsconfig.json index 698470f0..e52cc160 100644 --- a/modules/dev-tools/tsconfig.json +++ b/modules/dev-tools/tsconfig.json @@ -1,18 +1,20 @@ { "compilerOptions": { "target": "esnext", - "module": "commonjs", - "allowJs": false, + "module": "esnext", + "allowJs": true, "checkJs": false, "moduleResolution": "node", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "baseUrl": ".", + "rootDir": "src", + "outDir": "dist", + "composite": true, "skipLibCheck": true, "strict": true }, "include":[ - "src/**/*", - "ts-plugins/**/*" + "src/**/*" ] } diff --git a/tsconfig.json b/tsconfig.json index cf942a22..080a5d01 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,12 +13,14 @@ "noEmit": true, "resolveJsonModule": true, "baseUrl": ".", - "paths": { - } + "skipLibCheck": true }, "exclude":[ "test", "templates", "node_modules" + ], + "references": [ + {"path": "modules/dev-tools"} ] }