const webpack = require('webpack'); const path = require('path'); const typescriptSupport = require('react-docgen-typescript'); const propsParser = typescriptSupport.withCustomConfig('./tsconfig.json').parse; module.exports = { sections: [ { name: 'Conversation', description: 'Everything necessary to render a conversation', components: 'ts/components/conversation/*.tsx', }, { name: 'Media Gallery', description: 'Display media and documents in a conversation', components: 'ts/components/conversation/media-gallery/*.tsx', }, { name: 'Utility', description: 'Utility components used across the application', components: 'ts/components/utility/*.tsx', }, { name: 'Test', description: 'Components only used for testing', components: 'ts/styleguide/**/*.tsx', }, ], context: { // Exposes necessary utilities in the global scope for all readme code snippets util: 'ts/styleguide/StyleGuideUtil', }, contextDependencies: [ path.join(__dirname, 'ts/styleguide'), ], // We don't want one long, single page pagePerSection: true, // Expose entire repository to the styleguidist server, primarily for stylesheets assetsDir: './', // Add top-level elements to the HTML: // docs: https://github.com/vxna/mini-html-webpack-template // https://react-styleguidist.js.org/docs/configuration.html#template template: { head: { links: [{ rel: 'stylesheet', type: 'text/css', href: '/stylesheets/manifest.css', }], }, body: { // Brings in all the necessary components to boostrap Backbone views // Mirrors the order used in background.js. scripts: [ { src: 'test/styleguide/legacy_bridge.js', }, { src: 'node_modules/moment/min/moment-with-locales.min.js', }, { src: 'js/components.js', }, { src: 'js/reliable_trigger.js', }, { src: 'js/database.js', }, { src: 'js/storage.js', }, { src: 'js/signal_protocol_store.js', }, { src: 'js/libtextsecure.js', }, { src: 'js/focus_listener.js', }, { src: 'js/notifications.js', }, { src: 'js/delivery_receipts.js', }, { src: 'js/read_receipts.js', }, { src: 'js/read_syncs.js', }, { src: 'js/libphonenumber-util.js', }, { src: 'js/models/messages.js', }, { src: 'js/models/conversations.js', }, { src: 'js/models/blockedNumbers.js', }, { src: 'js/expiring_messages.js', }, { src: 'js/chromium.js', }, { src: 'js/registration.js', }, { src: 'js/expire.js', }, { src: 'js/conversation_controller.js', }, { src: 'js/emoji_util.js', }, // Select Backbone views { src: 'js/views/react_wrapper_view.js', }, { src: 'js/views/whisper_view.js', }, { src: 'js/views/timestamp_view.js', }, { src: 'js/views/attachment_view.js', }, { src: 'js/views/message_view.js', }, // Hacky way of including templates for Backbone components { src: 'test/styleguide/legacy_templates.js', }, ], }, }, propsParser, webpackConfig: { devtool: 'source-map', resolve: { // Necessary to enable the absolute path used in the context option above modules: [ __dirname, path.join(__dirname, 'node_modules'), ], extensions: ['.tsx'], }, module: { rules: [ { test: /\.tsx?$/, loader: 'ts-loader' }, { // To test handling of attachments, we need arraybuffers in memory test: /\.(gif|mp3|mp4|txt|jpg|jpeg|png)$/, loader: 'arraybuffer-loader', }, ], }, }, };