diff --git a/.gitignore b/.gitignore index 83ef9a4a2..3b10ae016 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ node_modules test-results/ playwright-report/ playwright/.cache/ +lerna-debug.log \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d68817c28..c83da7056 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@carbon/react": "^1.56.0", "@carbon/styles": "^1.56.0", "@playwright/test": "^1.43.1", + "@preact/preset-vite": "^2.8.2", "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-commonjs": "^25.0.7", @@ -2120,6 +2121,10 @@ "resolved": "packages/form-js-viewer-core", "link": true }, + "node_modules/@bpmn-io/form-js-viewer-render": { + "resolved": "packages/form-js-viewer-render", + "link": true + }, "node_modules/@bpmn-io/form-json-schema": { "resolved": "packages/form-json-schema", "link": true @@ -4517,6 +4522,115 @@ "node": ">=16" } }, + "node_modules/@preact/preset-vite": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz", + "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@prefresh/vite": "^2.4.1", + "@rollup/pluginutils": "^4.1.1", + "babel-plugin-transform-hook-names": "^1.0.2", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "magic-string": "0.30.5", + "node-html-parser": "^6.1.10", + "resolve": "^1.22.8", + "source-map": "^0.7.4", + "stack-trace": "^1.0.0-pre2" + }, + "peerDependencies": { + "@babel/core": "7.x", + "vite": "2.x || 3.x || 4.x || 5.x" + } + }, + "node_modules/@preact/preset-vite/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@preact/preset-vite/node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@preact/preset-vite/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@prefresh/babel-plugin": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.1.tgz", + "integrity": "sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==", + "dev": true + }, + "node_modules/@prefresh/core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", + "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", + "dev": true, + "peerDependencies": { + "preact": "^10.0.0" + } + }, + "node_modules/@prefresh/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", + "dev": true + }, + "node_modules/@prefresh/vite": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.5.tgz", + "integrity": "sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "0.5.1", + "@prefresh/core": "^1.5.1", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "peerDependencies": { + "preact": "^10.4.0", + "vite": ">=2.0.0" + } + }, + "node_modules/@prefresh/vite/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/@puppeteer/browsers": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", @@ -6977,6 +7091,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-transform-hook-names": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", + "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.12.10" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "dev": true, @@ -13349,6 +13472,12 @@ "node": ">=0.10.0" } }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "node_modules/lang-feel": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lang-feel/-/lang-feel-2.0.0.tgz", @@ -15275,6 +15404,16 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dev": true, + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, "node_modules/node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", @@ -19471,6 +19610,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/stack-trace": { + "version": "1.0.0-pre2", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", + "dev": true, + "engines": { + "node": ">=16" + } + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -21837,6 +21985,11 @@ "version": "1.8.6", "license": "SEE LICENSE IN LICENSE" }, + "packages/form-js-viewer-render": { + "name": "@bpmn-io/form-js-viewer-render", + "version": "1.8.6", + "license": "SEE LICENSE IN LICENSE" + }, "packages/form-js-viewer/node_modules/big.js": { "version": "6.2.1", "license": "MIT", @@ -23386,6 +23539,9 @@ "@bpmn-io/form-js-viewer-core": { "version": "file:packages/form-js-viewer-core" }, + "@bpmn-io/form-js-viewer-render": { + "version": "file:packages/form-js-viewer-render" + }, "@bpmn-io/form-json-schema": { "version": "file:packages/form-json-schema" }, @@ -25066,6 +25222,97 @@ "playwright": "1.43.1" } }, + "@preact/preset-vite": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz", + "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@prefresh/vite": "^2.4.1", + "@rollup/pluginutils": "^4.1.1", + "babel-plugin-transform-hook-names": "^1.0.2", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "magic-string": "0.30.5", + "node-html-parser": "^6.1.10", + "resolve": "^1.22.8", + "source-map": "^0.7.4", + "stack-trace": "^1.0.0-pre2" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@prefresh/babel-plugin": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.1.tgz", + "integrity": "sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==", + "dev": true + }, + "@prefresh/core": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", + "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", + "dev": true, + "requires": {} + }, + "@prefresh/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", + "dev": true + }, + "@prefresh/vite": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.5.tgz", + "integrity": "sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==", + "dev": true, + "requires": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "0.5.1", + "@prefresh/core": "^1.5.1", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + } + } + }, "@puppeteer/browsers": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", @@ -26806,6 +27053,13 @@ "@babel/helper-define-polyfill-provider": "^0.4.0" } }, + "babel-plugin-transform-hook-names": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", + "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", + "dev": true, + "requires": {} + }, "balanced-match": { "version": "1.0.0", "dev": true @@ -31199,6 +31453,12 @@ "version": "6.0.3", "dev": true }, + "kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "lang-feel": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lang-feel/-/lang-feel-2.0.0.tgz", @@ -32571,6 +32831,16 @@ } } }, + "node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dev": true, + "requires": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, "node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", @@ -35594,6 +35864,12 @@ "minipass": "^3.1.1" } }, + "stack-trace": { + "version": "1.0.0-pre2", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", + "dev": true + }, "stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", diff --git a/package.json b/package.json index f2c9140be..5a870b944 100644 --- a/package.json +++ b/package.json @@ -129,6 +129,7 @@ "typescript": "^5.4.5", "vite": "^5.2.10", "vitest": "^1.5.3", + "@preact/preset-vite": "^2.8.2", "webpack": "^5.91.0" } } diff --git a/packages/form-js-viewer-core/package.json b/packages/form-js-viewer-core/package.json index f7c74d18e..5529a89ab 100644 --- a/packages/form-js-viewer-core/package.json +++ b/packages/form-js-viewer-core/package.json @@ -1,7 +1,7 @@ { "name": "@bpmn-io/form-js-viewer-core", "version": "1.8.6", - "description": "View forms - powered by bpmn.io", + "description": "Manage form state - powered by bpmn.io", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/form-js-viewer-render/RenderPlayground.jsx b/packages/form-js-viewer-render/RenderPlayground.jsx new file mode 100644 index 000000000..4e97dd3f0 --- /dev/null +++ b/packages/form-js-viewer-render/RenderPlayground.jsx @@ -0,0 +1,8 @@ +import { foo } from './src/index.js'; +import { Fragment } from 'preact'; + +const RenderPlayground = () => { + return {foo()}; +}; + +export { RenderPlayground }; diff --git a/packages/form-js-viewer-render/index.html b/packages/form-js-viewer-render/index.html new file mode 100644 index 000000000..6378f055f --- /dev/null +++ b/packages/form-js-viewer-render/index.html @@ -0,0 +1,18 @@ + + + + + + + + @bpmn-io/form-js-viewer-render + + + + + + diff --git a/packages/form-js-viewer-render/jsconfig.json b/packages/form-js-viewer-render/jsconfig.json new file mode 100644 index 000000000..55d5e3f2b --- /dev/null +++ b/packages/form-js-viewer-render/jsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "declaration": true, + "useUnknownInCatchVariables": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/form-js-viewer-render/package.json b/packages/form-js-viewer-render/package.json new file mode 100644 index 000000000..242c72044 --- /dev/null +++ b/packages/form-js-viewer-render/package.json @@ -0,0 +1,35 @@ +{ + "name": "@bpmn-io/form-js-viewer-render", + "version": "1.8.6", + "description": "Render form state - powered by bpmn.io", + "type": "module", + "publishConfig": { + "access": "public" + }, + "main": "dist/index.cjs", + "module": "dist/index.js", + "types": "dist/types/index.d.ts", + "scripts": { + "all": "run-s test build", + "build": "run-p bundle generate-types", + "bundle": "vite build", + "dev": "vite", + "generate-types": "tsc --allowJs --skipLibCheck --declaration --emitDeclarationOnly --outDir dist/types src/index.js && copyfiles --flat src/*.d.ts dist/types", + "test": "vitest", + "prepublishOnly": "npm run build" + }, + "license": "SEE LICENSE IN LICENSE", + "repository": { + "type": "git", + "url": "git+https://github.com/bpmn-io/form-js.git", + "directory": "packages/form-js-viewer-render" + }, + "author": { + "name": "bpmn.io contributors", + "url": "https://github.com/bpmn-io" + }, + "sideEffects": false, + "files": [ + "dist" + ] +} diff --git a/packages/form-js-viewer-render/src/index.js b/packages/form-js-viewer-render/src/index.js new file mode 100644 index 000000000..b3f624ff3 --- /dev/null +++ b/packages/form-js-viewer-render/src/index.js @@ -0,0 +1,5 @@ +function foo() { + return 'foo'; +} + +export { foo }; diff --git a/packages/form-js-viewer-render/src/jsconfig.json b/packages/form-js-viewer-render/src/jsconfig.json new file mode 100644 index 000000000..168492a4c --- /dev/null +++ b/packages/form-js-viewer-render/src/jsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../jsconfig.json", + "compilerOptions": { + "lib": ["ES2020", "DOM", "DOM.Iterable"] + } +} diff --git a/packages/form-js-viewer-render/test/.eslintrc b/packages/form-js-viewer-render/test/.eslintrc new file mode 100644 index 000000000..46ddfd457 --- /dev/null +++ b/packages/form-js-viewer-render/test/.eslintrc @@ -0,0 +1,9 @@ +{ + "extends": [ + "plugin:vitest-globals/recommended", + "plugin:prettier/recommended" + ], + "env": { + "vitest-globals/env": true + } +} diff --git a/packages/form-js-viewer-render/test/index.spec.js b/packages/form-js-viewer-render/test/index.spec.js new file mode 100644 index 000000000..24f150551 --- /dev/null +++ b/packages/form-js-viewer-render/test/index.spec.js @@ -0,0 +1,5 @@ +import { foo } from '@/index.js'; + +it('should pass a test', () => { + expect(foo()).toBe('foo'); +}); diff --git a/packages/form-js-viewer-render/test/jsconfig.json b/packages/form-js-viewer-render/test/jsconfig.json new file mode 100644 index 000000000..41402e905 --- /dev/null +++ b/packages/form-js-viewer-render/test/jsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../jsconfig.json", + "compilerOptions": { + "lib": ["ES2020"], + "types": ["@types/node", "vitest/globals"], + "esModuleInterop": true, + "declaration": false, + "resolveJsonModule": true + }, + "include": ["**/*.spec.js"] +} diff --git a/packages/form-js-viewer-render/vite.config.js b/packages/form-js-viewer-render/vite.config.js new file mode 100644 index 000000000..35f7197c3 --- /dev/null +++ b/packages/form-js-viewer-render/vite.config.js @@ -0,0 +1,23 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; +import preact from '@preact/preset-vite'; + +export default defineConfig({ + plugins: [preact()], + build: { + lib: { + entry: resolve(__dirname, 'src/index.js'), + fileName: 'index', + formats: ['es', 'cjs'], + }, + }, + resolve: { + alias: { + '@': resolve(__dirname, 'src'), + }, + }, + test: { + globals: true, + files: ['test/**/*.spec.js'], + }, +});