diff --git a/package-lock.json b/package-lock.json index a5dd9bac21..627c89de4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4608,6 +4608,31 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -4644,6 +4669,36 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -4664,6 +4719,15 @@ "hoist-non-react-statics": "^3.3.0" } }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/http-proxy": { "version": "1.17.15", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", @@ -4794,6 +4858,15 @@ "@types/unist": "*" } }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -4876,6 +4949,24 @@ "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", "license": "MIT" }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/react": { "version": "16.14.61", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.61.tgz", @@ -4924,6 +5015,33 @@ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", "license": "MIT" }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -7780,9 +7898,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "license": "MIT", "engines": { @@ -10303,9 +10421,9 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10314,7 +10432,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -25503,24 +25621,11 @@ "version": "0.0.0-0", "license": "MIT", "devDependencies": { - "chalk": "^5.3.0", "compression": "^1.7.4", "express": "^4.19.2", - "http-proxy-middleware": "^2.0.6", "serve-handler": "^6.1.5" } }, - "packages/test/dev-server/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "packages/test/fluent-bundle": { "version": "0.0.0-0", "license": "MIT", diff --git a/packages/bundle/package.json b/packages/bundle/package.json index 2322b9b220..07251f3398 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -56,9 +56,7 @@ "precommit:eslint": "../../node_modules/.bin/eslint --report-unused-disable-directives --max-warnings 0", "precommit:typecheck": "tsc --project ./src --emitDeclarationOnly false --esModuleInterop true --noEmit --pretty false", "preversion": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json", - "start": "concurrently --kill-others --prefix-colors \"auto\" \"npm:start:*\"", - "start:devserver": "node ./scripts/devServer.mjs", - "start:tsup": "npm run build:tsup -- --watch" + "start": "npm run build:tsup -- --watch" }, "localDependencies": { "botframework-directlinespeech-sdk": "production", diff --git a/packages/bundle/scripts/.eslintrc.yml b/packages/bundle/scripts/.eslintrc.yml deleted file mode 100644 index 3dabb1405f..0000000000 --- a/packages/bundle/scripts/.eslintrc.yml +++ /dev/null @@ -1,8 +0,0 @@ -# More relaxed rules for CLI tooling. - -env: - node: true - -rules: - no-console: off - no-magic-numbers: off diff --git a/packages/bundle/scripts/devServer.mjs b/packages/bundle/scripts/devServer.mjs deleted file mode 100644 index 5922a6d962..0000000000 --- a/packages/bundle/scripts/devServer.mjs +++ /dev/null @@ -1,52 +0,0 @@ -import { context } from 'esbuild'; -import { resolve } from 'path'; -import { fileURLToPath } from 'url'; - -const resolveFromProjectRoot = resolve.bind(undefined, fileURLToPath(import.meta.url), '../../'); - -// This is a plugin for resolving "react" from "isomorphic-react". -// With normal NPM package, we will resolving the actual "react" package. -// "isomorphic-react" exports React from environment (`window.React/ReactDOM`), if exists. -// Otherwise, it fallback to actual "react" package. -// This is to prevent having 2 versions of React running for the same component. -const isomorphicReactResolvePlugin = { - name: 'isomorphic-react', - setup(build) { - build.onResolve({ filter: /^react$/u }, () => ({ - path: resolveFromProjectRoot('../../node_modules/isomorphic-react/dist/react.js') - })); - - build.onResolve({ filter: /^react-dom$/u }, () => ({ - path: resolveFromProjectRoot('../../node_modules/isomorphic-react-dom/dist/react-dom.js') - })); - } -}; - -const BUILD_OPTIONS = { - bundle: true, - // Currently, we are only serving webchat-es5.js for development and testing purpose. - // Saving some CPUs by not building other bundles. - entryPoints: { - webchat: resolveFromProjectRoot('./dist/webchat.js'), - 'webchat-es5': resolveFromProjectRoot('./dist/webchat-es5.js'), - 'webchat-minimal': resolveFromProjectRoot('./dist/webchat-minimal.js') - }, - logLevel: 'info', - // Generate stats.json. - metafile: true, - // Minified file is smaller and load faster from GitHub Codespaces. - minify: true, - outdir: resolveFromProjectRoot('./dist/dev'), - plugins: [isomorphicReactResolvePlugin], - sourcemap: true -}; - -(async function () { - const buildContext = await context(BUILD_OPTIONS); - - // We are both hosting the development server and writing to file output. - // The file output is for Docker containers. - const [, { host, port }] = await Promise.all([buildContext.watch(), buildContext.serve()]); - - console.log(`[serve] listening to http://${host}:${port}/.`); -})(); diff --git a/packages/test/dev-server/package.json b/packages/test/dev-server/package.json index beff253742..1a3e13e1d7 100644 --- a/packages/test/dev-server/package.json +++ b/packages/test/dev-server/package.json @@ -23,11 +23,8 @@ ] }, "devDependencies": { - "chalk": "^5.3.0", "compression": "^1.7.4", "express": "^4.19.2", - "http-proxy-middleware": "^2.0.6", "serve-handler": "^6.1.5" - }, - "dependencies": {} + } } diff --git a/packages/test/dev-server/src/index.js b/packages/test/dev-server/src/index.js index 653255be9c..8fd31ed497 100644 --- a/packages/test/dev-server/src/index.js +++ b/packages/test/dev-server/src/index.js @@ -1,13 +1,11 @@ -import chalk from 'chalk'; import compression from 'compression'; import express from 'express'; import { readFile } from 'fs/promises'; -import { createProxyMiddleware } from 'http-proxy-middleware'; import { resolve } from 'path'; import serve from 'serve-handler'; import { fileURLToPath } from 'url'; -const { ESBUILD_TARGET = 'http://127.0.0.1:8000/', PORT = 5001 } = process.env; +const { PORT = 5001 } = process.env; const resolveFromProjectRoot = resolve.bind(undefined, fileURLToPath(import.meta.url), '../../'); const resolveFromRepositoryRoot = resolveFromProjectRoot.bind(undefined, '../../../'); @@ -64,72 +62,32 @@ const resolveFromRepositoryRoot = resolveFromProjectRoot.bind(undefined, '../../ app.use( '/__dist__/fluent-bundle.development.js', express.static( - resolve( - fileURLToPath(import.meta.url), - '../../../../test/fluent-bundle/dist/fluent-bundle.development.js' - ) + resolve(fileURLToPath(import.meta.url), '../../../../test/fluent-bundle/dist/fluent-bundle.development.js') ) ); app.use( '/__dist__/fluent-bundle.development.js.map', express.static( - resolve( - fileURLToPath(import.meta.url), - '../../../../test/fluent-bundle/dist/fluent-bundle.development.js.map' - ) + resolve(fileURLToPath(import.meta.url), '../../../../test/fluent-bundle/dist/fluent-bundle.development.js.map') ) ); app.use( '/__dist__/fluent-bundle.production.min.js', express.static( - resolve( - fileURLToPath(import.meta.url), - '../../../../test/fluent-bundle/dist/fluent-bundle.production.min.js' - ) + resolve(fileURLToPath(import.meta.url), '../../../../test/fluent-bundle/dist/fluent-bundle.production.min.js') ) ); app.use( '/__dist__/fluent-bundle.production.min.js.map', express.static( - resolve( - fileURLToPath(import.meta.url), - '../../../../test/fluent-bundle/dist/fluent-bundle.production.min.js.map' - ) + resolve(fileURLToPath(import.meta.url), '../../../../test/fluent-bundle/dist/fluent-bundle.production.min.js.map') ) ); - // /__dist__/ will be serve from ESBuild development server. - app.use( - '/__dist__/', - createProxyMiddleware({ - changeOrigin: true, - logLevel: 'warn', - pathRewrite: { '^\\/__dist__\\/': '/' }, - onProxyReq(_proxyReq, _req, res) { - res.setHeader('x-request-time', new Date().toISOString()); - }, - onProxyRes(_, req, res) { - const duration = Date.now() - new Date(res.getHeader('x-request-time')); - const durationString = `(${duration} ms)`; - - console.log( - `${req.url} ${ - duration < 1000 - ? chalk.greenBright(durationString) - : duration < 2000 - ? chalk.yellowBright(durationString) - : chalk.redBright(durationString) - }` - ); - - res.removeHeader('x-request-time'); - }, - target: ESBUILD_TARGET - }) - ); + app.use('/__dist__/webchat*', express.static(resolve(fileURLToPath(import.meta.url), '../../../bundle/dist'))); // Other requests will be served by `serve-handler` based on `/serve-test.json`. app.use((req, res) => serve(req, res, { ...serveConfigJSON, public: resolveFromRepositoryRoot() }));