From cf33eeedbc8a3bcda4115f51032d3f6713336101 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 27 Apr 2018 13:07:37 -0400 Subject: [PATCH] Decompose eachResource helper function in appcache-server.js. --- packages/appcache/appcache-server.js | 29 ++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/appcache/appcache-server.js b/packages/appcache/appcache-server.js index 0de206577e..afdab9c3e5 100644 --- a/packages/appcache/appcache-server.js +++ b/packages/appcache/appcache-server.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor' import { isModern } from "meteor/modern-browsers"; +import { WebApp } from "meteor/webapp"; import crypto from 'crypto'; import fs from 'fs'; import path from 'path'; @@ -101,9 +102,10 @@ WebApp.connectHandlers.use((req, res, next) => { manifest += "CACHE:\n"; manifest += "/\n"; - const reqArch = isModern(request.browser) ? 'web.browser' : 'web.browser.legacy'; - WebApp.clientPrograms[reqArch].manifest.forEach(resource => { - const {url} = resource + + eachResource(request, resource => { + const { url } = resource; + if (resource.where === 'client' && ! RoutePolicy.classify(url) && ! shouldSkip(resource)) { @@ -134,8 +136,8 @@ WebApp.connectHandlers.use((req, res, next) => { // request to the server and have the asset served from cache by // specifying the full URL with hash in their code (manually, with // some sort of URL rewriting helper) - WebApp.clientPrograms[reqArch].manifest.forEach(resource => { - const {url} = resource + eachResource(request, resource => { + const { url } = resource; if (resource.where === 'client' && ! RoutePolicy.classify(url) && ! resource.cacheable && @@ -164,17 +166,28 @@ WebApp.connectHandlers.use((req, res, next) => { return res.end(body); }); +function eachResource(request, callback) { + const browser = request.browser || + WebApp.categorizeRequest(request).browser; + + const arch = isModern(browser) + ? "web.browser" + : "web.browser.legacy"; + + WebApp.clientPrograms[arch].manifest.forEach(callback); +} + const sizeCheck = () => WebApp.connectHandlers.use((req, res, next) => { let totalSize = 0; - const request = WebApp.categorizeRequest(req); - const reqArch = isModern(request.browser) ? 'web.browser' : 'web.browser.legacy'; - WebApp.clientPrograms[reqArch].manifest.forEach(resource => { + + eachResource(req, resource => { if (resource.where === 'client' && ! RoutePolicy.classify(resource.url) && ! shouldSkip(resource)) { totalSize += resource.size; } }); + if (totalSize > 5 * 1024 * 1024) { Meteor._debug( "** You are using the appcache package but the total size of the\n" +