UNPKG

8.18 kBSource Map (JSON)View Raw
1{"version":3,"file":"WebpackPWAManifestPlugin.js","sourceRoot":"","sources":["../src/WebpackPWAManifestPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { Tapable } from 'tapable';\nimport webpack from 'webpack';\n\nimport { createPWAManifestFromExpoConfig, validateManifest } from './config';\nimport createMetatagsFromConfig from './createMetatagsFromConfig';\nimport {\n applyTag,\n buildResourcesAsync,\n generateAppleSplashAndIconTags,\n generateHtmlTags,\n} from './injector';\nimport { HTMLManifestLink, ManifestOptions, ManifestProps } from './WebpackPWAManifestPlugin.types';\n\nconst TAP_CMD = 'webpack-pwa-manifest-plugin';\nconst TAP = 'WebpackPWAManifestPlugin';\n\n/**\n * Generate a `manifest.json` for your PWA based on the `app.json`.\n * This plugin must be **after HtmlWebpackPlugin**.\n *\n * To test PWAs in chrome visit `chrome://flags#enable-desktop-pwas`\n */\nexport default class WebpackPWAManifest {\n assets: any = null;\n hasHTMLPlugin: boolean = false;\n manifest: ManifestOptions;\n expoConfig: ExpoConfig;\n options: any;\n HtmlWebpackPlugin: any;\n projectRoot: string;\n\n constructor(\n appJson: ExpoConfig,\n { noResources, filename, publicPath, HtmlWebpackPlugin, projectRoot }: ManifestProps\n ) {\n this.projectRoot = projectRoot || process.cwd();\n this.HtmlWebpackPlugin = HtmlWebpackPlugin;\n\n this.manifest = createPWAManifestFromExpoConfig(appJson);\n\n this.expoConfig = appJson;\n\n this.options = {\n fingerprints: true,\n inject: true,\n ios: false,\n publicPath,\n // filename: options.fingerprints ? '[name].[hash].[ext]' : '[name].[ext]',\n noResources,\n filename,\n includeDirectory: false,\n metatags: createMetatagsFromConfig(appJson),\n };\n\n if (noResources) {\n delete this.manifest.startupImages;\n delete this.manifest.icons;\n }\n\n validateManifest(this.manifest);\n }\n\n getManifest() {\n return this.manifest;\n }\n\n apply(compiler: webpack.Compiler) {\n // Hook into the html-webpack-plugin processing\n // and add the html\n const injectToHTMLAsync = async (\n htmlPluginData: any,\n compilation: webpack.compilation.Compilation,\n callback: any\n ) => {\n if (!this.hasHTMLPlugin) {\n this.hasHTMLPlugin = true;\n }\n\n const publicPath = this.options.publicPath || compilation.outputOptions.publicPath;\n\n // The manifest (this.manifest) should be ready by this point.\n // It will be written to disk here.\n const manifestFile = await buildResourcesAsync(this, publicPath);\n\n if (!this.options.inject) {\n callback(null, htmlPluginData);\n return;\n }\n\n let tags = generateAppleSplashAndIconTags(this.assets);\n\n for (const metatagName of Object.keys(this.options.metatags)) {\n const content = this.options.metatags[metatagName];\n tags = applyTag(tags, 'meta', {\n name: metatagName,\n content,\n });\n }\n\n if (manifestFile) {\n const manifestLink: HTMLManifestLink = {\n rel: 'manifest',\n href: manifestFile.url,\n };\n if (this.manifest.crossorigin) {\n manifestLink.crossorigin = this.manifest.crossorigin;\n }\n tags = applyTag(tags, 'link', manifestLink);\n }\n\n const tagsHTML = generateHtmlTags(tags);\n htmlPluginData.html = htmlPluginData.html.replace(/(<\\/head>)/i, `${tagsHTML}</head>`);\n\n callback(null, htmlPluginData);\n };\n\n // webpack 4\n if (compiler.hooks) {\n compiler.hooks.compilation.tap(TAP, compilation => {\n // This is set in html-webpack-plugin pre-v4.\n // @ts-ignore\n let hook = compilation.hooks.htmlWebpackPluginAfterHtmlProcessing;\n if (!hook) {\n const HtmlWebpackPlugin = this.HtmlWebpackPlugin || require('html-webpack-plugin');\n hook = HtmlWebpackPlugin.getHooks(compilation).beforeEmit;\n }\n\n hook.tapAsync(TAP_CMD, (htmlPluginData: any, callback: (...props: any[]) => void) => {\n injectToHTMLAsync(htmlPluginData, compilation, () => {\n if (this.assets) {\n for (let asset of this.assets) {\n compilation.assets[asset.output] = {\n source: () => asset.source,\n size: () => asset.size,\n };\n }\n }\n callback();\n });\n });\n });\n } else {\n compiler.plugin('compilation', compilation => {\n compilation.plugin(\n 'html-webpack-plugin-before-html-processing',\n (htmlPluginData: any, callback: (_this: Tapable, ...args: any[]) => void) =>\n injectToHTMLAsync(htmlPluginData, compilation, callback)\n );\n });\n }\n }\n}\n\nexport { WebpackPWAManifest };\n"]}
\No newline at end of file