2022-11-24 13:40:42 +03:00
/ *
* Copyright ( c ) Microsoft Corporation . All rights reserved .
* Licensed under the MIT License . See License . txt in the project root for license information .
* /
2020-12-19 05:07:04 +03:00
'use strict' ;
/* eslint-disable no-undef */
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require ( 'path' ) ;
2022-06-22 13:07:40 +03:00
const webpack = require ( 'webpack' ) ;
2023-02-07 13:11:26 +03:00
const { dependencies } = require ( './package.json' ) ;
2020-12-19 05:07:04 +03:00
/**@type {import('webpack').Configuration}*/
2022-06-22 13:07:40 +03:00
const nodeConfig = {
2020-12-19 05:07:04 +03:00
target : 'node' ,
mode : 'development' ,
2021-03-02 08:39:40 +03:00
entry : {
2022-11-24 13:40:42 +03:00
extension : './src/client/extension.ts' ,
2022-12-21 06:57:49 +03:00
yamlServer : './src/server/YamlServer.ts' ,
htmlServer : './src/server/HtmlServer.ts'
2021-03-02 08:39:40 +03:00
} ,
2020-12-19 05:07:04 +03:00
output : {
2022-11-24 13:40:42 +03:00
path : path . resolve ( _ _dirname , 'dist' ) ,
2021-03-02 08:39:40 +03:00
filename : '[name].js' ,
2020-12-19 05:07:04 +03:00
libraryTarget : "commonjs2" ,
} ,
devtool : 'source-map' ,
externals : {
2021-06-12 02:25:43 +03:00
vscode : "commonjs vscode" ,
// These dependencies are ignored because we don't use them, and App Insights has try-catch protecting their loading if they don't exist
// See: https://github.com/microsoft/vscode-extension-telemetry/issues/41#issuecomment-598852991
'applicationinsights-native-metrics' : 'commonjs applicationinsights-native-metrics' ,
'@opentelemetry/tracing' : "commonjs @opentelemetry/tracing"
2020-12-19 05:07:04 +03:00
} ,
resolve : {
extensions : [ '.ts' , '.js' ]
} ,
module : {
rules : [ {
test : /\.ts$/ ,
exclude : /node_modules/ ,
2021-10-06 02:03:42 +03:00
use : [ {
2021-05-11 02:11:28 +03:00
loader : 'ts-loader'
}
2022-11-24 13:40:42 +03:00
]
2020-12-19 05:07:04 +03:00
} ]
} ,
2023-02-07 13:11:26 +03:00
plugins : [
new webpack . DefinePlugin ( {
_ _GENERATOR _PACKAGE _VERSION _ _ : JSON . stringify ( dependencies [ "@microsoft/generator-powerpages" ] || "1.0.0" ) , // get the currently used version of powerpages generator with fallback to ^1.0.0
} ) ,
2023-07-11 18:09:09 +03:00
new webpack . DefinePlugin ( {
IS _DESKTOP : true ,
} ) ,
2023-02-07 13:11:26 +03:00
]
2022-06-22 13:07:40 +03:00
} ;
const webConfig = {
2022-11-24 13:40:42 +03:00
mode : 'none' , // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
target : 'webworker' , // extensions run in a webworker context
entry : {
'extension' : './src/web/client/extension.ts' ,
'test/unit/extension' : './src/web/client/test/unit/extension.test.ts' ,
2023-02-14 11:37:27 +03:00
'client/test/integration/index' : './src/client/test/Integration/index.ts' ,
'test/integration/index' : './src/web/client/test/integration/index.ts' ,
2022-11-24 13:40:42 +03:00
} ,
output : {
filename : '[name].js' ,
path : path . join ( _ _dirname , './dist/web' ) ,
libraryTarget : 'commonjs' ,
devtoolModuleFilenameTemplate : '../../[resource-path]'
} ,
resolve : {
mainFields : [ 'browser' , 'module' , 'main' ] , // look for `browser` entry point in imported node modules
extensions : [ '.ts' , '.js' ] , // support ts-files and js-files
alias : {
// provides alternate implementation for node module and source files
} ,
fallback : {
// Webpack 5 no longer polyfills Node.js core modules automatically.
// see https://webpack.js.org/configuration/resolve/#resolvefallback
// for the list of Node.js core module polyfills.
2023-01-13 04:39:47 +03:00
"constants" : require . resolve ( "constants-browserify" ) ,
2022-11-24 13:40:42 +03:00
'assert' : require . resolve ( 'assert' ) ,
2023-01-13 04:39:47 +03:00
"os" : require . resolve ( "os-browserify" ) ,
"path" : require . resolve ( "path-browserify" ) ,
2022-11-24 13:40:42 +03:00
'stream' : require . resolve ( "stream-browserify" ) ,
2023-07-04 07:44:12 +03:00
'util' : false ,
buffer : require . resolve ( 'buffer' ) ,
2022-11-24 13:40:42 +03:00
}
} ,
module : {
rules : [ {
test : /\.ts$/ ,
exclude : /node_modules/ ,
use : [ {
loader : 'ts-loader'
} ]
} ]
} ,
plugins : [
2023-07-04 07:44:12 +03:00
new webpack . ProvidePlugin ( {
Buffer : [ 'buffer' , 'Buffer' ] ,
} ) ,
2023-07-11 18:09:09 +03:00
new webpack . DefinePlugin ( {
IS _DESKTOP : false ,
} ) ,
2022-11-24 13:40:42 +03:00
] ,
externals : {
'vscode' : 'commonjs vscode' , // ignored because it doesn't exist
'fs' : 'fs' ,
} ,
performance : {
hints : false
} ,
devtool : 'nosources-source-map' , // create a source map that points to the original source file
infrastructureLogging : {
level : "log" , // enables logging required for problem matchers
} ,
2022-06-22 13:07:40 +03:00
} ;
2020-12-19 05:07:04 +03:00
2023-10-24 21:00:47 +03:00
/** @type fluent container scripts web worker config */
const webWorkerConfig = {
mode : "none" ,
target : "webworker" , // web extensions run in a webworker context
entry : {
main : "./src/web/client/common/worker/webworker.js" ,
} ,
output : {
filename : "[name].js" ,
path : path . join ( _ _dirname , "./dist/web" ) ,
libraryTarget : "self" ,
} ,
resolve : {
extensions : [ ".ts" , ".js" ] , // support ts-files and js-files
alias : { } ,
fallback : {
path : require . resolve ( "path-browserify" ) ,
tty : require . resolve ( "tty-browserify" ) ,
os : require . resolve ( "os-browserify/browser" ) ,
stream : require . resolve ( "stream-browserify" ) ,
http : require . resolve ( "stream-http" ) ,
zlib : require . resolve ( "browserify-zlib" ) ,
https : require . resolve ( "https-browserify" ) ,
} ,
} ,
module : {
rules : [
{
test : /\.ts$/ ,
exclude : /node_modules/ ,
use : [
{
loader : "ts-loader" ,
} ,
] ,
} ,
{
test : /webworker\.js$/ ,
use : {
loader : "worker-loader" ,
options : { inline : "fallback" } ,
} ,
} ,
] ,
} ,
externals : {
vscode : "commonjs vscode" , // ignored because it doesn't exist
} ,
performance : {
hints : false ,
} ,
devtool : "source-map" ,
} ;
module . exports = [ nodeConfig , webConfig , webWorkerConfig ] ;