From fbd800808764398f2409ddbd531408eb06de429a Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 8 Apr 2021 22:10:29 +0200 Subject: [PATCH] add automatic paths to build tsconfig --- package.json | 1 + .../structureLifecycle/index.browser.ts | 70 +------------------ packages/testing-browser/src/Resize.ts | 70 +++++++++++++++++++ packages/testing-browser/tsconfig.json | 5 +- rollup.config.base.js | 23 +++++- 5 files changed, 98 insertions(+), 71 deletions(-) create mode 100644 packages/testing-browser/src/Resize.ts diff --git a/package.json b/package.json index 578aefc..e14e12f 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "eslint-plugin-react-hooks": "^4.0.8", "expect-playwright": "^0.3.1", "express": "^4.17.1", + "glob": "^7.1.6", "jest": "^26.6.0", "jest-dev-server": "^4.4.0", "jest-playwright-preset": "^1.4.5", diff --git a/packages/overlayscrollbars/tests/browser/lifecycles/structureLifecycle/index.browser.ts b/packages/overlayscrollbars/tests/browser/lifecycles/structureLifecycle/index.browser.ts index bfc8862..9475ec7 100644 --- a/packages/overlayscrollbars/tests/browser/lifecycles/structureLifecycle/index.browser.ts +++ b/packages/overlayscrollbars/tests/browser/lifecycles/structureLifecycle/index.browser.ts @@ -1,78 +1,10 @@ import 'styles/overlayscrollbars.scss'; import './index.scss'; -import { createDiv, appendChildren, parent, style, on, off, addClass, WH, XY, clientSize } from 'support'; +import { resize } from '@/testing-browser/Resize'; import { OverlayScrollbars } from 'overlayscrollbars'; const targetElm = document.querySelector('#target') as HTMLElement; window.os = OverlayScrollbars({ target: targetElm, content: false }); -export const resize = (element: HTMLElement) => { - const strMouseTouchDownEvent = 'mousedown touchstart'; - const strMouseTouchUpEvent = 'mouseup touchend'; - const strMouseTouchMoveEvent = 'mousemove touchmove'; - const strSelectStartEvent = 'selectstart'; - const dragStartSize: WH = { w: 0, h: 0 }; - const dragStartPosition: XY = { x: 0, y: 0 }; - const resizeBtn = createDiv('resizeBtn'); - appendChildren(element, resizeBtn); - addClass(element, 'resizer'); - - let dragResizeBtn: HTMLElement | undefined; - let dragResizer: HTMLElement | undefined; - - const onSelectStart = (event: Event) => { - event.preventDefault(); - return false; - }; - - const resizerResize = (event: MouseEvent | TouchEvent) => { - const isTouchEvent = (event as TouchEvent).touches !== undefined; - const mouseOffsetHolder = isTouchEvent ? (event as TouchEvent).touches[0] : (event as MouseEvent); - - const sizeStyle = { - width: dragStartSize.w + mouseOffsetHolder.pageX - dragStartPosition.x, - height: dragStartSize.h + mouseOffsetHolder.pageY - dragStartPosition.y, - }; - - style(dragResizer, sizeStyle); - event.stopPropagation(); - }; - - const resizerResized = () => { - off(document, strSelectStartEvent, onSelectStart); - off(document, strMouseTouchMoveEvent, resizerResize); - off(document, strMouseTouchUpEvent, resizerResized); - - dragResizer = undefined; - dragResizeBtn = undefined; - }; - - on(resizeBtn, strMouseTouchDownEvent, (event: MouseEvent | TouchEvent) => { - const { currentTarget } = event; - const correctButton = (event as MouseEvent).buttons === 1 || event.which === 1; - const isTouchEvent = (event as TouchEvent).touches !== undefined; - const mouseOffsetHolder = isTouchEvent ? (event as TouchEvent).touches[0] : (event as MouseEvent); - - if (correctButton || isTouchEvent) { - dragStartPosition.x = mouseOffsetHolder.pageX; - dragStartPosition.y = mouseOffsetHolder.pageY; - - dragResizeBtn = currentTarget as HTMLElement; - dragResizer = parent(currentTarget as HTMLElement) as HTMLElement; - - const cSize = clientSize(element); - dragStartSize.w = cSize.w; - dragStartSize.h = cSize.h; - - on(document, strSelectStartEvent, onSelectStart); - on(document, strMouseTouchMoveEvent, resizerResize); - on(document, strMouseTouchUpEvent, resizerResized); - - event.preventDefault(); - event.stopPropagation(); - } - }); -}; - resize(document.querySelector('#resize')!); resize(document.querySelector('#target')!); diff --git a/packages/testing-browser/src/Resize.ts b/packages/testing-browser/src/Resize.ts new file mode 100644 index 0000000..c261e1e --- /dev/null +++ b/packages/testing-browser/src/Resize.ts @@ -0,0 +1,70 @@ +// @ts-ignore +import { createDiv, appendChildren, parent, style, on, off, addClass, WH, XY, clientSize } from '@/overlayscrollbars/support'; + +export const resize = (element: HTMLElement) => { + const strMouseTouchDownEvent = 'mousedown touchstart'; + const strMouseTouchUpEvent = 'mouseup touchend'; + const strMouseTouchMoveEvent = 'mousemove touchmove'; + const strSelectStartEvent = 'selectstart'; + const dragStartSize: WH = { w: 0, h: 0 }; + const dragStartPosition: XY = { x: 0, y: 0 }; + const resizeBtn = createDiv('resizeBtn'); + appendChildren(element, resizeBtn); + addClass(element, 'resizer'); + + let dragResizeBtn: HTMLElement | undefined; + let dragResizer: HTMLElement | undefined; + + const onSelectStart = (event: Event) => { + event.preventDefault(); + return false; + }; + + const resizerResize = (event: MouseEvent | TouchEvent) => { + const isTouchEvent = (event as TouchEvent).touches !== undefined; + const mouseOffsetHolder = isTouchEvent ? (event as TouchEvent).touches[0] : (event as MouseEvent); + + const sizeStyle = { + width: dragStartSize.w + mouseOffsetHolder.pageX - dragStartPosition.x, + height: dragStartSize.h + mouseOffsetHolder.pageY - dragStartPosition.y, + }; + + style(dragResizer, sizeStyle); + event.stopPropagation(); + }; + + const resizerResized = () => { + off(document, strSelectStartEvent, onSelectStart); + off(document, strMouseTouchMoveEvent, resizerResize); + off(document, strMouseTouchUpEvent, resizerResized); + + dragResizer = undefined; + dragResizeBtn = undefined; + }; + + on(resizeBtn, strMouseTouchDownEvent, (event: MouseEvent | TouchEvent) => { + const { currentTarget } = event; + const correctButton = (event as MouseEvent).buttons === 1 || event.which === 1; + const isTouchEvent = (event as TouchEvent).touches !== undefined; + const mouseOffsetHolder = isTouchEvent ? (event as TouchEvent).touches[0] : (event as MouseEvent); + + if (correctButton || isTouchEvent) { + dragStartPosition.x = mouseOffsetHolder.pageX; + dragStartPosition.y = mouseOffsetHolder.pageY; + + dragResizeBtn = currentTarget as HTMLElement; + dragResizer = parent(currentTarget as HTMLElement) as HTMLElement; + + const cSize = clientSize(element); + dragStartSize.w = cSize.w; + dragStartSize.h = cSize.h; + + on(document, strSelectStartEvent, onSelectStart); + on(document, strMouseTouchMoveEvent, resizerResize); + on(document, strMouseTouchUpEvent, resizerResized); + + event.preventDefault(); + event.stopPropagation(); + } + }); +}; diff --git a/packages/testing-browser/tsconfig.json b/packages/testing-browser/tsconfig.json index 27c2657..a524df7 100644 --- a/packages/testing-browser/tsconfig.json +++ b/packages/testing-browser/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": "./src/" + "baseUrl": "./src/", + "paths": { + "@/overlayscrollbars*": ["../../overlayscrollbars/src*"] + } } } diff --git a/rollup.config.base.js b/rollup.config.base.js index 7b3e457..9dd88e8 100644 --- a/rollup.config.base.js +++ b/rollup.config.base.js @@ -9,6 +9,7 @@ const del = require('del'); const fs = require('fs'); const path = require('path'); const chalk = require('chalk'); +const glob = require('glob'); const resolve = require('./resolve.config.json'); const isTestEnv = process.env.NODE_ENV === 'test'; @@ -124,6 +125,7 @@ const resolveConfig = (config, userConfig) => { }; const rollupConfig = (config = {}, { project = process.cwd(), overwrite = {}, silent, fast } = {}) => { + const repoPackageJson = require(path.resolve(__dirname, 'package.json')); const projectPath = resolvePath(__dirname, project); const relativeBackPath = path.relative(projectPath, __dirname); const projectName = path.basename(project); @@ -189,6 +191,21 @@ const rollupConfig = (config = {}, { project = process.cwd(), overwrite = {}, si }); const genConfig = ({ esm, typeDeclaration }) => { + const { exclude, compilerOptions } = require(tsconfigJSONPath); + const { paths } = compilerOptions || {}; + const finalPaths = paths || {}; + const workspacesPaths = repoPackageJson.workspaces + .map((pattern) => glob.sync(pattern, { cwd: __dirname })) + .reduce((arr, paths) => { + arr.push(...paths); + return arr; + }, []) + .reduce((obj, resolvedPath) => { + const absolutePath = path.resolve(__dirname, resolvedPath); + obj[`@/${path.basename(absolutePath)}*`] = [`${normalizePath(path.resolve(absolutePath, rollupConfigDefaults.src))}*`]; + return obj; + }, {}); + const pipelineMap = { typescript: isTypeScriptProject ? rollupTypescript({ @@ -202,8 +219,12 @@ const rollupConfig = (config = {}, { project = process.cwd(), overwrite = {}, si sourceMap: sourcemap, declaration: typeDeclaration && types !== null, declarationDir: typesPath, + paths: { + ...finalPaths, + ...workspacesPaths, + }, }, - exclude: (require(tsconfigJSONPath).exclude || []).concat(testsPath), + exclude: (exclude || []).concat(testsPath), }, include: ['*.ts+(|x)', '**/*.ts+(|x)'].map(prependBackPath), exclude: ['*.d.ts', '**/*.d.ts'].map(prependBackPath),