WIP - add extractor, generate snippet_data

This commit is contained in:
Stefan Fejes
2019-08-20 15:52:05 +02:00
parent 88084d3d30
commit cc8f1d8a7a
37396 changed files with 4588842 additions and 133 deletions

View File

@ -0,0 +1,45 @@
/*
Copyright 2017 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import '../_version.mjs';
/**
* @param {Response} response
* @return {Response}
*
* @private
* @memberof module:workbox-precaching
*/
const cleanRedirect = async (response) => {
const clonedResponse = response.clone();
// Not all browsers support the Response.body stream, so fall back
// to reading the entire body into memory as a blob.
const bodyPromise = 'body' in clonedResponse ?
Promise.resolve(clonedResponse.body) :
clonedResponse.blob();
const body = await bodyPromise;
// new Response() is happy when passed either a stream or a Blob.
return new Response(body, {
headers: clonedResponse.headers,
status: clonedResponse.status,
statusText: clonedResponse.statusText,
});
};
export default cleanRedirect;

View File

@ -0,0 +1,61 @@
/*
Copyright 2017 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import {logger} from 'workbox-core/_private/logger.mjs';
import '../_version.mjs';
const logGroup = (groupTitle, urls) => {
logger.groupCollapsed(groupTitle);
urls.forEach((url) => {
logger.log(url);
});
logger.groupEnd();
};
/**
* @param {Array<string>} deletedCacheRequests
* @param {Array<string>} deletedRevisionDetails
*
* @private
* @memberof module:workbox-precachig
*/
export default (deletedCacheRequests, deletedRevisionDetails) => {
if (deletedCacheRequests.length === 0 &&
deletedRevisionDetails.length === 0) {
return;
}
const cacheDeleteCount = deletedCacheRequests.length;
const revisionDeleteCount = deletedRevisionDetails.length;
const cacheDeleteText =
`${cacheDeleteCount} cached ` +
`request${cacheDeleteCount === 1 ? ' was' : 's were'} deleted`;
const revisionDeleteText =
`${revisionDeleteCount} ` +
`${revisionDeleteCount === 1 ? 'entry' : 'entries'} ` +
`${revisionDeleteCount === 1 ? 'was' : 'were'} deleted from IndexedDB.`;
logger.groupCollapsed(
`During precaching cleanup, ${cacheDeleteText} and ${revisionDeleteText}`);
logGroup('Deleted Cache Requests', deletedCacheRequests);
logGroup('Revision Details Deleted from DB', deletedRevisionDetails);
logger.groupEnd();
};

View File

@ -0,0 +1,71 @@
/*
Copyright 2017 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import {logger} from 'workbox-core/_private/logger.mjs';
import '../_version.mjs';
/**
* @param {string} groupTitle
* @param {Array<PrecacheEntry>} entries
*
* @private
*/
const _nestedGroup = (groupTitle, entries) => {
if (entries.length === 0) {
return;
}
logger.groupCollapsed(groupTitle);
entries.forEach((entry) => {
logger.log(entry._originalInput);
});
logger.groupEnd();
};
/**
* @param {Array<Object>} entriesToPrecache
* @param {Array<Object>} alreadyPrecachedEntries
*
* @private
* @memberof module:workbox-precachig
*/
export default (entriesToPrecache, alreadyPrecachedEntries) => {
// Goal is to print the message:
// Precaching X files.
// Or:
// Precaching X files. Y files were cached and up-to-date.
const precachedCount = entriesToPrecache.length;
const alreadyPrecachedCount = alreadyPrecachedEntries.length;
let printText =
`Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.`;
if (alreadyPrecachedCount > 0) {
printText += ` ${alreadyPrecachedCount} ` +
`file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.`;
}
logger.groupCollapsed(printText);
_nestedGroup(
`View precached URLs.`,
entriesToPrecache);
_nestedGroup(
`View URLs that were already precached.`,
alreadyPrecachedEntries);
logger.groupEnd();
};

View File

@ -0,0 +1,63 @@
/*
Copyright 2017 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import {logger} from 'workbox-core/_private/logger.mjs';
import '../_version.mjs';
/**
* This method will print out a warning if a precache entry doesn't have
* a `revision` value.
*
* This is common if the asset if revisioned in the url like `index.1234.css`.
*
* @param {Map} entriesMap
*
* @private
* @memberof module:workbox-preaching
*/
export default (entriesMap) => {
const urlOnlyEntries = [];
entriesMap.forEach(
(entry) => {
if (typeof entry === 'string' || !entry._originalInput.revision) {
urlOnlyEntries.push(entry._originalInput);
}
}
);
if (urlOnlyEntries.length === 0) {
// No warnings needed.
return;
}
logger.groupCollapsed('Are your precached assets revisioned?');
const urlsList = urlOnlyEntries.map((urlOnlyEntry) => {
return ` - ${JSON.stringify(urlOnlyEntry)}`;
}).join(`\n`);
logger.warn(
`The following precache entries might not be revisioned:` +
`\n\n` +
urlsList +
`\n\n`
);
logger.unprefixed.warn(`You can learn more about why this might be a ` +
`problem here: https://developers.google.com/web/tools/workbox/modules/workbox-precaching`);
logger.groupEnd();
};