diff --git a/tools/scripts-config-react-webpack/config/inject.js b/tools/scripts-config-react-webpack/config/inject.js deleted file mode 100644 index a90a2bea503..00000000000 --- a/tools/scripts-config-react-webpack/config/inject.js +++ /dev/null @@ -1,16 +0,0 @@ -const babel = require('@babel/core'); -const fs = require('fs'); -const path = require('path'); -const defaultOptions = require('@talend/scripts-config-babel/.babelrc.json'); -const { minify } = require('terser'); - -// terser.minify is an async function, we use deasync to make it used as synced function within webpack -const getMinified = async () => { - const src = fs.readFileSync(path.join(__dirname, '../src/inject.js'), 'utf-8'); - const lib = babel.transformSync(src, defaultOptions).code; - return (await minify(lib)).code; -}; - -module.exports = { - getMinified, -}; diff --git a/tools/scripts-config-react-webpack/config/webpack.config.js b/tools/scripts-config-react-webpack/config/webpack.config.js index 2c4662e9671..65233e42ce8 100644 --- a/tools/scripts-config-react-webpack/config/webpack.config.js +++ b/tools/scripts-config-react-webpack/config/webpack.config.js @@ -15,10 +15,8 @@ const { DuplicatesPlugin } = require('inspectpack/plugin'); const SentryWebpackPlugin = require('@sentry/webpack-plugin'); const ReactCMFWebpackPlugin = require('@talend/react-cmf-webpack-plugin'); -const cdn = require('@talend/scripts-config-cdn'); const utils = require('@talend/scripts-utils'); const LICENSE_BANNER = require('./licence'); -const inject = require('./inject'); const icons = require('./icons'); const AppLoader = require('./loader'); const { @@ -30,19 +28,11 @@ const { getFileNameForExtension, } = require('./webpack.config.common'); -const INITIATOR_URL = process.env.INITIATOR_URL || '@@INITIATOR_URL@@'; -const cdnMode = !!process.env.INITIATOR_URL; - const DEFAULT_INDEX_TEMPLATE_PATH = 'src/app/index.html'; const BASE_TEMPLATE_PATH = path.join(__dirname, 'index.tpl.html'); -const TALEND_LIB_PREFIX = '@talend/'; - const BASENAME = process.env.BASENAME || '/'; -// set @talend packages in module-to-cdn -cdn.configureTalendModules(); - // Check if Typescript is setup const useTypescript = utils.fs.tsConfig(); @@ -59,91 +49,14 @@ function getGitRevision() { return revision; } -function getTalendVersions() { - const talendLibraries = {}; - const packagelockPath = path.join(process.cwd(), 'package-lock.json'); - const yarnlockPath = path.join(process.cwd(), 'yarn.lock'); - // eslint-disable-next-line - const packageJson = require(path.join(process.cwd(), 'package.json')); - - const talendDependencies = Object.keys(packageJson.dependencies).filter(dependency => - dependency.includes(TALEND_LIB_PREFIX), - ); - - if (fs.existsSync(yarnlockPath)) { - const data = fs.readFileSync(yarnlockPath, 'utf-8'); - const lock = yarnlock.parse(data); - - Object.keys(lock.object) - .filter(k => k.startsWith(TALEND_LIB_PREFIX)) - .reduce((acc, key) => { - // @talend/react-components@5.1.2 - const name = `${TALEND_LIB_PREFIX}${key.split('/')[1].split('@')[0]}`; - if (talendDependencies.includes(name)) { - const info = lock.object[key]; - acc[name] = info.version; - } - return acc; - }, talendLibraries); - } else if (fs.existsSync(packagelockPath)) { - // eslint-disable-next-line - const packageLock = require(packagelockPath); - - Object.keys(packageLock.packages || packageLock.dependencies) - .filter(k => k.includes(TALEND_LIB_PREFIX)) - .reduce((acc, key) => { - const name = `${TALEND_LIB_PREFIX}${key.split(TALEND_LIB_PREFIX)[1]}`; - if (talendDependencies.includes(name)) { - acc[name] = (packageLock.packages || packageLock.dependencies)[key].version; - } - return acc; - }, talendLibraries); - } +// eslint-disable-next-line import/no-dynamic-require +const packageJson = require(path.join(process.cwd(), 'package.json')); - let revision = process.env.GIT_COMMIT; - if (!revision) { - try { - revision = childProcess.execSync('git rev-parse HEAD').toString().trim(); - } catch (e) { - // eslint-disable-next-line no-console - console.info('Failed to get git revision'); - } - } - - return { - version: packageJson.version, - talendLibraries: Object.entries(talendLibraries).map(([name, version]) => ({ name, version })), - revision, - }; -} - -function getVersions() { - const talendLibraries = cdn - .getModulesFromLockFile() - .filter(Boolean) - .map(info => ({ version: info.version, name: info.name })); - // eslint-disable-next-line - const packageJson = require(path.join(process.cwd(), 'package.json')); - - return { - version: packageJson.version, - talendLibraries, - revision: getGitRevision(), - }; -} - -const VERSIONS = getVersions(); // meta for html webpack plugin -const meta = VERSIONS.talendLibraries.reduce( - (acc, lib) => { - acc[lib.name] = lib.version; - return acc; - }, - { - 'app-version': VERSIONS.version, - 'app-revision': VERSIONS.revision, - }, -); +const meta = { + 'app-version': packageJson.version, + 'app-revision': getGitRevision(), +}; function renderMeta() { return Object.keys(meta) @@ -151,7 +64,7 @@ function renderMeta() { .join('\n'); } -function getCopyConfig(env, userCopyConfig = [], noDynamicCdn) { +function getCopyConfig(env, userCopyConfig = []) { const config = [...userCopyConfig]; const assetsOverridden = config.some(nextAsset => typeof nextAsset === 'object' ? nextAsset.from === 'src/assets' : nextAsset === 'src/assets', @@ -159,13 +72,10 @@ function getCopyConfig(env, userCopyConfig = [], noDynamicCdn) { if (!assetsOverridden && fs.existsSync(path.join(process.cwd(), 'src/assets'))) { config.push({ from: 'src/assets' }); } - if (!cdnMode && !noDynamicCdn) { - cdn.getCopyConfig().forEach(c => config.push(c)); - } return config; } -async function getIndexTemplate(env, mode, indexTemplatePath, useInitiator = true) { +async function getIndexTemplate(env, mode, indexTemplatePath) { const headPath = path.join(process.cwd(), '.talend', 'head.html'); const headExists = await utils.fs.isFile(headPath); @@ -175,33 +85,10 @@ async function getIndexTemplate(env, mode, indexTemplatePath, useInitiator = tru console.log('custom head.html found'); customHead = await fs.promises.readFile(headPath); } - /* - * The following header is used to inject. - * Some UMD are not built correctly for browser. - * For example react-is index.js includes a test on process.env.NODE_ENV to require the min version or not. - * Let's bypass this issue by setting a process.env.NODE_ENV - */ - let headScript = ''; - if (useInitiator) { - // meta are not injected if inject is false - headScript = `${renderMeta()} - `; - } const header = `${customHead} - ${headScript} + `; // fs.exists is deprecated const templateExists = await utils.fs.isFile(indexTemplatePath); @@ -234,7 +121,6 @@ module.exports = ({ getUserConfig, mode }) => { const userSassData = getUserConfig('sass', {}); const userCopyConfig = getUserConfig('copy', []); const cmf = getUserConfig('cmf'); - const dcwpConfig = getUserConfig('dynamic-cdn-webpack-plugin'); const sentryConfig = getUserConfig('sentry', {}); const { theme } = userSassData; @@ -248,12 +134,7 @@ module.exports = ({ getUserConfig, mode }) => { meta['app-id'] = userHtmlConfig.appId || theme; - const indexTemplate = await getIndexTemplate( - env, - mode, - indexTemplatePath, - dcwpConfig !== false, - ); + const indexTemplate = await getIndexTemplate(env, mode, indexTemplatePath); const isEnvDevelopment = mode === 'development'; const isEnvProduction = mode === 'production'; @@ -319,7 +200,6 @@ module.exports = ({ getUserConfig, mode }) => { isEnvDevelopment && !!env.analyze && new DuplicatesPlugin(), new webpack.DefinePlugin({ BUILD_TIMESTAMP: Date.now(), - TALEND_APP_INFO: JSON.stringify(getTalendVersions()), 'process.env.ICON_BUNDLE': JSON.stringify(process.env.ICON_BUNDLE), 'process.env.FORM_MOZ': JSON.stringify(process.env.FORM_MOZ), 'process.env.DISABLE_JS_ERROR_NOTIFICATION': JSON.stringify( @@ -343,9 +223,9 @@ module.exports = ({ getUserConfig, mode }) => { // see https://docs.sentry.io/platforms/node/guides/aws-lambda/sourcemaps/uploading/webpack/ org: sentryConfig.org || process.env.SENTRY_ORG || 'talend-0u', project: sentryConfig.project || process.env.SENTRY_PROJECT, - release: `${meta['app-id']}@${VERSIONS.version}`, + release: `${meta['app-id']}@${packageJson.version}`, include: sentryConfig.include || ['dist/'], - ignore: sentryConfig.ignore || ['cdn/'], + ignore: sentryConfig.ignore, }), new HtmlWebpackPlugin({ filename: './index.html', @@ -353,13 +233,11 @@ module.exports = ({ getUserConfig, mode }) => { appLoaderStyle: AppLoader.getLoaderStyle(appLoaderIcon), ...userHtmlConfig, b64favicon, - inject: dcwpConfig === false, template: indexTemplate, meta: { ...meta, ...(userHtmlConfig.meta || {}) }, }), - cdn.getWebpackPlugin(env, dcwpConfig), new CopyWebpackPlugin({ - patterns: getCopyConfig(env, userCopyConfig, dcwpConfig === false), + patterns: getCopyConfig(env, userCopyConfig), }), new webpack.BannerPlugin({ banner: LICENSE_BANNER, entryOnly: true }), cmf && new ReactCMFWebpackPlugin({ watch: isEnvDevelopment }), diff --git a/tools/scripts-config-react-webpack/config/webpack.config.umd.js b/tools/scripts-config-react-webpack/config/webpack.config.umd.js index 44884597e29..309376d14d3 100644 --- a/tools/scripts-config-react-webpack/config/webpack.config.umd.js +++ b/tools/scripts-config-react-webpack/config/webpack.config.umd.js @@ -5,8 +5,6 @@ const CopyWebpackPlugin = require('copy-webpack-plugin'); const { DuplicatesPlugin } = require('inspectpack/plugin'); const CircularDependencyPlugin = require('circular-dependency-plugin'); -const cdn = require('@talend/scripts-config-cdn'); - const utils = require('@talend/scripts-utils'); const { @@ -17,10 +15,7 @@ const { getAssetsRules, } = require('./webpack.config.common'); -cdn.configureTalendModules(); - module.exports = options => { - const dcwpConfig = options.getUserConfig('dynamic-cdn-webpack-plugin'); const cssModulesEnabled = options.getUserConfig(['css', 'modules'], true); const userCopyConfig = options.getUserConfig('copy', []); const useTypescript = utils.fs.tsConfig(); @@ -87,7 +82,6 @@ module.exports = options => { filename: isEnvProd ? `${name}.min.css` : `${name}.css`, chunkFilename: isEnvProd ? `${name}.min.css` : `${name}.css`, }), - cdn.getWebpackPlugin(env, dcwpConfig), userCopyConfig.length > 0 && new CopyWebpackPlugin({ patterns: userCopyConfig }), ].filter(Boolean), }; diff --git a/tools/scripts-config-react-webpack/src/inject.js b/tools/scripts-config-react-webpack/src/inject.js deleted file mode 100644 index 4e459b76c0e..00000000000 --- a/tools/scripts-config-react-webpack/src/inject.js +++ /dev/null @@ -1,66 +0,0 @@ -// eslint-disable-next-line func-names -(function () { - const jsFiles = window.jsFiles || []; - const cssFiles = window.cssFiles || []; - - function talendAddScripts(jsMetas, prepareUrl) { - jsMetas.forEach(function onUrl(jsMeta) { - const metaIsUrl = typeof jsMeta === 'string'; - let finalUrl = metaIsUrl ? jsMeta : jsMeta.path; - const integrity = metaIsUrl ? undefined : jsMeta.integrity; - if (prepareUrl) { - finalUrl = prepareUrl(finalUrl); - } - const script = document.createElement('script'); - script.setAttribute('src', finalUrl); - script.setAttribute('type', 'text/javascript'); - if (integrity) { - script.setAttribute('integrity', integrity); - script.setAttribute('crossorigin', 'anonymous'); - } - script.async = false; - document.body.appendChild(script); - }); - } - - function talendAddStyles(cssMetas, prepareUrl) { - const title = document.getElementsByTagName('TITLE')[0]; - cssMetas.forEach(function onUrl(cssMeta) { - const metaIsUrl = typeof cssMeta === 'string'; - let finalUrl = metaIsUrl ? cssMeta : cssMeta.path; - const integrity = metaIsUrl ? undefined : cssMeta.integrity; - if (prepareUrl) { - finalUrl = prepareUrl(finalUrl); - } - const style = document.createElement('link'); - style.setAttribute('rel', 'stylesheet'); - style.setAttribute('media', 'print'); - style.setAttribute('onload', 'this.media="all"'); - if (integrity) { - style.setAttribute('integrity', integrity); - style.setAttribute('crossorigin', 'anonymous'); - } - style.setAttribute('href', finalUrl); - document.head.insertBefore(style, title); - }); - } - - window.talendAddStyles = talendAddStyles; - window.talendAddScripts = talendAddScripts; - - document.addEventListener('DOMContentLoaded', function onDocumentReady() { - if (!window.TALEND_INITIATOR_URL.startsWith('@@')) { - talendAddScripts([window.TALEND_INITIATOR_URL]); - } else { - // on prem - // if a base tag is present, it defines the base path where the app is hosted - // in this case, we make the url relative to ensure the right path resolution - const base = document.querySelector('base'); - const prepareUrl = url => (base ? url.slice(1) : url); - - talendAddStyles(cssFiles, prepareUrl); - talendAddScripts(jsFiles, prepareUrl); - } - }); - window.Talend.CDN_URL = '/cdn'; -})();