mirror of
				https://github.com/Redocly/redoc.git
				synced 2025-10-31 07:47:29 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /* tslint:disable:no-implicit-dependencies */
 | |
| import ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
 | |
| import * as webpack from 'webpack';
 | |
| import * as path from 'path';
 | |
| import { webpackIgnore } from './config/webpack-utils';
 | |
| 
 | |
| const nodeExternals = require('webpack-node-externals')({
 | |
|   // bundle in modules that need transpiling + non-js (e.g. css)
 | |
|   allowlist: [
 | |
|     'swagger2openapi',
 | |
|     'marked',
 | |
|     /reftools/,
 | |
|     'oas-resolver',
 | |
|     'oas-kit-common',
 | |
|     'oas-schema-walker',
 | |
|     /\.(?!(?:jsx?|json)$).{1,5}$/i,
 | |
|   ],
 | |
| });
 | |
| 
 | |
| const VERSION = JSON.stringify(require('./package.json').version);
 | |
| let REVISION;
 | |
| 
 | |
| try {
 | |
|   REVISION = JSON.stringify(
 | |
|     require('child_process').execSync('git rev-parse --short HEAD').toString().trim(),
 | |
|   );
 | |
| } catch (e) {
 | |
|   console.error('Skipping REDOC_REVISION');
 | |
| }
 | |
| 
 | |
| const BANNER = `ReDoc - OpenAPI/Swagger-generated API Reference Documentation
 | |
| -------------------------------------------------------------
 | |
|   Version: ${VERSION}
 | |
|   Repo: https://github.com/Redocly/redoc`;
 | |
| 
 | |
| export default (env: { standalone?: boolean; browser?: boolean } = {}) => ({
 | |
|   entry: env.standalone ? ['./src/polyfills.ts', './src/standalone.tsx'] : './src/index.ts',
 | |
|   output: {
 | |
|     filename: env.standalone
 | |
|       ? 'redoc.standalone.js'
 | |
|       : env.browser
 | |
|       ? 'redoc.browser.lib.js'
 | |
|       : 'redoc.lib.js',
 | |
|     path: path.join(__dirname, '/bundles'),
 | |
|     library: 'Redoc',
 | |
|     libraryTarget: 'umd',
 | |
|     globalObject: 'this',
 | |
|   },
 | |
|   devtool: 'source-map',
 | |
|   resolve: {
 | |
|     extensions: ['.ts', '.tsx', '.js', '.mjs', '.json'],
 | |
|     fallback: {
 | |
|       path: require.resolve('path-browserify'),
 | |
|       buffer: require.resolve('buffer'),
 | |
|       http: false,
 | |
|       fs: path.resolve(__dirname, 'src/empty.js'),
 | |
|       os: path.resolve(__dirname, 'src/empty.js'),
 | |
|       tty: path.resolve(__dirname, 'src/empty.js'),
 | |
|       url: require.resolve('url/'),
 | |
|     },
 | |
|   },
 | |
|   performance: false,
 | |
|   externalsPresets: env.standalone || env.browser ? {} : { node: true },
 | |
|   externals: env.standalone
 | |
|     ? {
 | |
|         esprima: 'null',
 | |
|         'node-fetch': 'null',
 | |
|         'node-fetch-h2': 'null',
 | |
|         yaml: 'null',
 | |
|         url: 'null',
 | |
|         'safe-json-stringify': 'null',
 | |
|       }
 | |
|     : (context, request, callback) => {
 | |
|         // ignore node-fetch dep of swagger2openapi as it is not used
 | |
|         if (/esprima|node-fetch|node-fetch-h2|\/yaml|safe-json-stringify|url$/i.test(request)) {
 | |
|           return callback(null, 'var undefined');
 | |
|         }
 | |
|         return nodeExternals(context, request, callback);
 | |
|       },
 | |
| 
 | |
|   module: {
 | |
|     rules: [
 | |
|       {
 | |
|         test: /\.(tsx?|[cm]?js)$/,
 | |
|         loader: 'esbuild-loader',
 | |
|         options: {
 | |
|           target: 'es2015',
 | |
|           tsconfigRaw: require('./tsconfig.json'),
 | |
|         },
 | |
|         exclude: [/node_modules/],
 | |
|       },
 | |
|       {
 | |
|         test: /\.css$/,
 | |
|         use: [
 | |
|           'style-loader',
 | |
|           'css-loader',
 | |
|           {
 | |
|             loader: 'esbuild-loader',
 | |
|             options: {
 | |
|               minify: true,
 | |
|             },
 | |
|           },
 | |
|         ],
 | |
|       },
 | |
|     ],
 | |
|   },
 | |
|   plugins: [
 | |
|     new webpack.DefinePlugin({
 | |
|       __REDOC_VERSION__: VERSION,
 | |
|       __REDOC_REVISION__: REVISION,
 | |
|       'process.env': '{}',
 | |
|       'process.platform': '"browser"',
 | |
|       'process.stdout': 'null',
 | |
|     }),
 | |
|     new ForkTsCheckerWebpackPlugin({ logger: { infrastructure: 'silent', issues: 'console' } }),
 | |
|     new webpack.BannerPlugin(BANNER),
 | |
|     new webpack.ProvidePlugin({
 | |
|       Buffer: ['buffer', 'Buffer'],
 | |
|     }),
 | |
|     webpackIgnore(/js-yaml\/dumper\.js$/),
 | |
|     env.standalone ? webpackIgnore(/^\.\/SearchWorker\.worker$/) : undefined,
 | |
|   ].filter(Boolean),
 | |
| });
 |