aboutsummaryrefslogtreecommitdiff
path: root/node_modules/workbox-build/src/lib/copy-workbox-libraries.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/workbox-build/src/lib/copy-workbox-libraries.js')
-rw-r--r--node_modules/workbox-build/src/lib/copy-workbox-libraries.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/node_modules/workbox-build/src/lib/copy-workbox-libraries.js b/node_modules/workbox-build/src/lib/copy-workbox-libraries.js
new file mode 100644
index 00000000..4bc8d38b
--- /dev/null
+++ b/node_modules/workbox-build/src/lib/copy-workbox-libraries.js
@@ -0,0 +1,89 @@
+/*
+ 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.
+*/
+
+const fse = require('fs-extra');
+const path = require('path');
+
+const errors = require('./errors');
+const useBuildType = require('./use-build-type');
+
+// Used to filter the libraries to copy based on our package.json dependencies.
+const WORKBOX_PREFIX = 'workbox-';
+const BUILD_TYPES = [
+ 'dev',
+ 'prod',
+];
+
+/**
+ * This copies over a set of runtime libraries used by Workbox into a
+ * local directory, which should be deployed alongside your service worker file.
+ *
+ * As an alternative to deploying these local copies, you could instead use
+ * Workbox from its official CDN URL.
+ *
+ * This method is exposed for the benefit of developers using
+ * [injectManifest()]{@link module:workbox-build.injectManifest} who would
+ * prefer not to use the CDN copies of Workbox. Developers using
+ * [generateSW()]{@link module:workbox-build.generateSW} don't need to
+ * explicitly call this method, as it's called automatically when
+ * `importWorkboxFrom` is set to `local`.
+ *
+ * @param {string} destDirectory The path to the parent directory under which
+ * the new directory of libraries will be created.
+ * @return {Promise<string>} The name of the newly created directory.
+ *
+ * @alias module:workbox-build.copyWorkboxLibraries
+ */
+module.exports = async (destDirectory) => {
+ const thisPkg = require('../../package.json');
+ // Use the version string from workbox-build in the name of the parent
+ // directory. This should be safe, because lerna will bump workbox-build's
+ // pkg.version whenever one of the dependent libraries gets bumped, and we
+ // care about versioning the dependent libraries.
+ const workboxDirectoryName = `workbox-v${thisPkg.version}`;
+ const workboxDirectoryPath = path.join(destDirectory, workboxDirectoryName);
+ await fse.ensureDir(workboxDirectoryPath);
+
+ const copyPromises = [];
+ const librariesToCopy = Object.keys(thisPkg.dependencies).filter(
+ (dependency) => dependency.startsWith(WORKBOX_PREFIX));
+ for (const library of librariesToCopy) {
+ const pkg = require(`${library}/package.json`);
+ const defaultPathToLibrary = require.resolve(`${library}/${pkg.main}`);
+
+ for (const buildType of BUILD_TYPES) {
+ // Special-case logic for workbox-sw, which only has a single build type.
+ // This prevents a race condition with two identical copy promises;
+ // see https://github.com/GoogleChrome/workbox/issues/1180
+ if (library === 'workbox-sw' && buildType === BUILD_TYPES[0]) {
+ continue;
+ }
+
+ const srcPath = useBuildType(defaultPathToLibrary, buildType);
+ const destPath = path.join(workboxDirectoryPath,
+ path.basename(srcPath));
+ copyPromises.push(fse.copy(srcPath, destPath));
+ copyPromises.push(fse.copy(`${srcPath}.map`, `${destPath}.map`));
+ }
+ }
+
+ try {
+ await Promise.all(copyPromises);
+ return workboxDirectoryName;
+ } catch (error) {
+ throw Error(`${errors['unable-to-copy-workbox-libraries']} ${error}`);
+ }
+};