/*
Copyright 2018 Google LLC
Use of this source code is governed by an MIT-style
license that can be found in the LICENSE file or at
https://opensource.org/licenses/MIT.
*/
import {WorkboxError} from '../_private/WorkboxError.mjs';
import '../_version.mjs';
/*
* This method returns true if the current context is a service worker.
*/
const isSWEnv = (moduleName) => {
if (!('ServiceWorkerGlobalScope' in self)) {
throw new WorkboxError('not-in-sw', {moduleName});
}
};
/*
* This method throws if the supplied value is not an array.
* The destructed values are required to produce a meaningful error for users.
* The destructed and restructured object is so it's clear what is
* needed.
*/
const isArray = (value, {moduleName, className, funcName, paramName}) => {
if (!Array.isArray(value)) {
throw new WorkboxError('not-an-array', {
moduleName,
className,
funcName,
paramName,
});
}
};
const hasMethod = (object, expectedMethod,
{moduleName, className, funcName, paramName}) => {
const type = typeof object[expectedMethod];
if (type !== 'function') {
throw new WorkboxError('missing-a-method', {paramName, expectedMethod,
moduleName, className, funcName});
}
};
const isType = (object, expectedType,
{moduleName, className, funcName, paramName}) => {
if (typeof object !== expectedType) {
throw new WorkboxError('incorrect-type', {paramName, expectedType,
moduleName, className, funcName});
}
};
const isInstance = (object, expectedClass,
{moduleName, className, funcName,
paramName, isReturnValueProblem}) => {
if (!(object instanceof expectedClass)) {
throw new WorkboxError('incorrect-class', {paramName, expectedClass,
moduleName, className, funcName, isReturnValueProblem});
}
};
const isOneOf = (value, validValues, {paramName}) => {
if (!validValues.includes(value)) {
throw new WorkboxError('invalid-value', {
paramName,
value,
validValueDescription: `Valid values are ${JSON.stringify(validValues)}.`,
});
}
};
const isArrayOfClass = (value, expectedClass,
{moduleName, className, funcName, paramName}) => {
const error = new WorkboxError('not-array-of-class', {
value, expectedClass,
moduleName, className, funcName, paramName,
});
if (!Array.isArray(value)) {
throw error;
}
for (let item of value) {
if (!(item instanceof expectedClass)) {
throw error;
}
}
};
const finalAssertExports = process.env.NODE_ENV === 'production' ? null : {
hasMethod,
isArray,
isInstance,
isOneOf,
isSWEnv,
isType,
isArrayOfClass,
};
export {finalAssertExports as assert};