diff --git a/frontend/scripts/check-build.mjs b/frontend/scripts/check-build.mjs index 81cc72df..0b4155d6 100644 --- a/frontend/scripts/check-build.mjs +++ b/frontend/scripts/check-build.mjs @@ -27,3 +27,13 @@ assert.ok( ); assert.ok(!/]*\bsrc=)[^>]*>/i.test(html), 'inline script found'); assets.forEach(asset => assert.ok(existsSync(dist + asset.slice(1)), asset)); + +const dashboard = assets + .filter(asset => asset.endsWith('.js')) + .map(asset => readFileSync(dist + asset.slice(1), 'utf8')) + .join('\n'); +assert.doesNotMatch( + dashboard, + /=\(?function\(\)\{return this\}\)?\(\);try\{([A-Za-z_$][\w$]*)=\1\|\|new Function\("return this"\)\(\)/, + 'dashboard contains a CSP-blocked UMD global shim' +); diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 3ece02ce..6f287e2f 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -44,6 +44,10 @@ const resolveAliases = { survey: path.resolve(__dirname, './app/javascript/survey'), widget: path.resolve(__dirname, './app/javascript/widget'), assets: path.resolve(__dirname, './app/javascript/dashboard/assets'), + vuedraggable: path.resolve( + __dirname, + './node_modules/vuedraggable/src/vuedraggable.js' + ), '@material/mwc-icon': path.resolve( __dirname, './app/javascript/shared/components/MaterialIconElement.js'