UNPKG

@plugin-web-update-notification/umijs

Version:
1 lines 8.86 kB
{"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { resolve } from 'path'\nimport { copyFileSync, mkdirSync, readFileSync, writeFileSync } from 'fs'\nimport type { IApi } from 'umi'\nimport type { Options } from '@plugin-web-update-notification/core'\nimport {\n DIRECTORY_NAME,\n INJECT_SCRIPT_FILE_NAME,\n INJECT_SCRIPT_TAG_ID,\n INJECT_STYLE_FILE_NAME,\n JSON_FILE_NAME,\n NOTIFICATION_ANCHOR_CLASS_NAME,\n generateJSONFileContent,\n generateJsFileContent,\n getFileHash,\n getVersion,\n} from '@plugin-web-update-notification/core'\nimport { name as pkgName } from '../package.json'\n\nexport type { Options } from '@plugin-web-update-notification/core'\n\nexport default (api: IApi) => {\n api.describe({\n key: 'webUpdateNotification',\n config: {\n schema(Joi) {\n return Joi.object({\n versionType: Joi.string(),\n customVersion: Joi.string(),\n /** polling interval(ms), default 10*60*1000 */\n checkInterval: Joi.number(),\n /** whether to output version in console */\n logVersion: Joi.boolean(),\n checkOnWindowFocus: Joi.boolean(),\n checkImmediately: Joi.boolean(),\n checkOnLoadFileError: Joi.boolean(),\n injectFileBase: Joi.string(),\n customNotificationHTML: Joi.string(),\n notificationProps: {\n title: Joi.string(),\n description: Joi.string(),\n buttonText: Joi.string(),\n dismissButtonText: Joi.string(),\n },\n notificationConfig: {\n primaryColor: Joi.string(),\n secondaryColor: Joi.string(),\n placement: Joi.string(),\n },\n silence: Joi.boolean(),\n locale: Joi.string(),\n localeData: Joi.object(),\n hiddenDefaultNotification: Joi.boolean(),\n hiddenDismissButton: Joi.boolean(),\n })\n },\n },\n enableBy() {\n return api.env === 'production' && api?.userConfig.webUpdateNotification\n },\n })\n\n const webUpdateNotificationOptions = (api.userConfig?.webUpdateNotification || {}) as Options\n if (webUpdateNotificationOptions.injectFileBase === undefined)\n webUpdateNotificationOptions.injectFileBase = api.userConfig.publicPath || '/'\n\n const { versionType, customNotificationHTML, hiddenDefaultNotification, injectFileBase = '/', customVersion, silence } = webUpdateNotificationOptions\n\n let version = ''\n if (versionType === 'custom')\n version = getVersion(versionType, customVersion!)\n else\n version = getVersion(versionType!)\n\n // 插件只在生产环境时生效\n if (!version || api.env !== 'production')\n return\n\n const jsFlePath = resolve('node_modules', pkgName, 'dist', `${INJECT_SCRIPT_FILE_NAME}.js`)\n const jsFileContent = generateJsFileContent(\n readFileSync(jsFlePath, 'utf8').toString(),\n version,\n webUpdateNotificationOptions,\n )\n /** inject script file hash */\n const jsFileHash = getFileHash(jsFileContent)\n\n const cssFilePath = resolve('node_modules', pkgName, 'dist', `${INJECT_STYLE_FILE_NAME}.css`)\n /** inject css file hash */\n const cssFileHash = getFileHash(readFileSync(cssFilePath, 'utf8').toString())\n\n api.addHTMLLinks(() => {\n if (customNotificationHTML || hiddenDefaultNotification)\n return []\n\n return [\n {\n rel: 'stylesheet',\n href: `${injectFileBase}${DIRECTORY_NAME}/${INJECT_STYLE_FILE_NAME}.${cssFileHash}.css`,\n },\n ]\n })\n\n api.onBuildComplete(() => {\n const outputPath = resolve(api.userConfig.outputPath || 'dist')\n mkdirSync(`${outputPath}/${DIRECTORY_NAME}`)\n\n // copy file from @plugin-web-update-notification/core/dist/??.css */ to dist/\n copyFileSync(cssFilePath, `${outputPath}/${DIRECTORY_NAME}/${INJECT_STYLE_FILE_NAME}.${cssFileHash}.css`)\n\n // write js file to dist/\n writeFileSync(`${outputPath}/${DIRECTORY_NAME}/${INJECT_SCRIPT_FILE_NAME}.${jsFileHash}.js`, jsFileContent)\n\n // write version json file to dist/\n writeFileSync(`${outputPath}/${DIRECTORY_NAME}/${JSON_FILE_NAME}.json`, generateJSONFileContent(version, silence))\n })\n\n api.modifyHTML(($) => {\n if (!hiddenDefaultNotification)\n $('body').append(`<div class=\"${NOTIFICATION_ANCHOR_CLASS_NAME}\"></div>`)\n\n $('head').prepend(`<script data-id=\"${INJECT_SCRIPT_TAG_ID}\" data-v=\"${version}\" src=\"${injectFileBase}${DIRECTORY_NAME}/${INJECT_SCRIPT_FILE_NAME}.${jsFileHash}.js\"></script>`)\n\n return $\n })\n}\n","{\n \"name\": \"@plugin-web-update-notification/umijs\",\n \"version\": \"2.0.2\",\n \"description\": \"Umi plugin for detect web page updates and notify.\",\n \"author\": \"Utopia\",\n \"license\": \"MIT\",\n \"homepage\": \"https://github.com/GreatAuk/plugin-web-update-notification\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/GreatAuk/plugin-web-update-notification\",\n \"directory\": \"packages/umi-plugin\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/GreatAuk/plugin-web-update-notification/issues\"\n },\n \"keywords\": [\n \"umi\",\n \"umi-plugin\",\n \"@plugin-web-update-notification/core\",\n \"web-update-notification\"\n ],\n \"sideEffects\": false,\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"require\": \"./dist/index.js\",\n \"import\": \"./dist/index.mjs\"\n }\n },\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.mjs\",\n \"types\": \"dist/index.d.ts\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"start\": \"tsx src/index.ts\",\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\"\n },\n \"peerDependencies\": {\n \"umi\": \"*\"\n },\n \"dependencies\": {\n \"@plugin-web-update-notification/core\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"umi\": \"^4.0.2\"\n }\n}\n"],"mappings":"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","names":["resolve","copyFileSync","mkdirSync","readFileSync","writeFileSync","DIRECTORY_NAME","INJECT_SCRIPT_FILE_NAME","INJECT_SCRIPT_TAG_ID","INJECT_STYLE_FILE_NAME","JSON_FILE_NAME","NOTIFICATION_ANCHOR_CLASS_NAME","generateJSONFileContent","generateJsFileContent","getFileHash","getVersion","name","src_default","api","Joi","webUpdateNotificationOptions","versionType","customNotificationHTML","hiddenDefaultNotification","injectFileBase","customVersion","silence","version","getVersion","jsFlePath","resolve","name","INJECT_SCRIPT_FILE_NAME","jsFileContent","generateJsFileContent","readFileSync","jsFileHash","getFileHash","cssFilePath","INJECT_STYLE_FILE_NAME","cssFileHash","DIRECTORY_NAME","outputPath","mkdirSync","copyFileSync","writeFileSync","JSON_FILE_NAME","generateJSONFileContent","$","NOTIFICATION_ANCHOR_CLASS_NAME","INJECT_SCRIPT_TAG_ID"]}