Socket
Socket
Sign inDemoInstall

@types/webpack

Package Overview
Dependencies
5
Maintainers
1
Versions
183
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.8.20 to 3.8.21

386

webpack v3.8/index.d.ts

@@ -40,3 +40,3 @@ // Type definitions for webpack 3.8

/** Name of the configuration. Used when loading multiple configurations. */
name?: string;
name?: string | undefined;
/**

@@ -46,14 +46,14 @@ * The base directory (absolute path!) for resolving the `entry` option.

*/
context?: string;
entry?: string | string[] | Entry | EntryFunc;
context?: string | undefined;
entry?: string | string[] | Entry | EntryFunc | undefined;
/** Choose a style of source mapping to enhance the debugging process. These values can affect build and rebuild speed dramatically. */
devtool?: Options.Devtool;
devtool?: Options.Devtool | undefined;
/** Options affecting the output. */
output?: Output;
output?: Output | undefined;
/** Options affecting the normal modules (NormalModuleFactory) */
module?: Module;
module?: Module | undefined;
/** Options affecting the resolving of modules. */
resolve?: Resolve;
resolve?: Resolve | undefined;
/** Like resolve but for loaders. */
resolveLoader?: ResolveLoader;
resolveLoader?: ResolveLoader | undefined;
/**

@@ -63,3 +63,3 @@ * Specify dependencies that shouldn’t be resolved by webpack, but should become dependencies of the resulting bundle.

*/
externals?: ExternalsElement | ExternalsElement[];
externals?: ExternalsElement | ExternalsElement[] | undefined;
/**

@@ -80,32 +80,32 @@ * <ul>

*/
target?: 'web' | 'webworker' | 'node' | 'async-node' | 'node-webkit' | 'atom' | 'electron' | 'electron-renderer' | 'electron-main' | ((compiler?: any) => void);
target?: 'web' | 'webworker' | 'node' | 'async-node' | 'node-webkit' | 'atom' | 'electron' | 'electron-renderer' | 'electron-main' | ((compiler?: any) => void) | undefined;
/** Report the first error as a hard error instead of tolerating it. */
bail?: boolean;
bail?: boolean | undefined;
/** Capture timing information for each module. */
profile?: boolean;
profile?: boolean | undefined;
/** Cache generated modules and chunks to improve performance for multiple incremental builds. */
cache?: boolean | object;
cache?: boolean | object | undefined;
/** Enter watch mode, which rebuilds on file change. */
watch?: boolean;
watchOptions?: Options.WatchOptions;
watch?: boolean | undefined;
watchOptions?: Options.WatchOptions | undefined;
/** Switch loaders to debug mode. */
debug?: boolean;
debug?: boolean | undefined;
/** Include polyfills or mocks for various node stuff */
node?: Node | false;
node?: Node | false | undefined;
/** Set the value of require.amd and define.amd. */
amd?: { [moduleName: string]: boolean };
amd?: { [moduleName: string]: boolean } | undefined;
/** Used for recordsInputPath and recordsOutputPath */
recordsPath?: string;
recordsPath?: string | undefined;
/** Load compiler state from a json file. */
recordsInputPath?: string;
recordsInputPath?: string | undefined;
/** Store compiler state to a json file. */
recordsOutputPath?: string;
recordsOutputPath?: string | undefined;
/** Add additional plugins to the compiler. */
plugins?: Plugin[];
plugins?: Plugin[] | undefined;
/** Stats options for logging */
stats?: Options.Stats;
stats?: Options.Stats | undefined;
/** Performance options */
performance?: Options.Performance;
performance?: Options.Performance | undefined;
/** Limit the number of parallel processed modules. Can be used to fine tune performance or to get more reliable profiling results */
parallelism?: number;
parallelism?: number | undefined;
}

@@ -133,13 +133,13 @@

/** The output directory as absolute path */
path?: string;
path?: string | undefined;
/** (Required) The filename of the entry chunk as relative path inside the output.path directory. */
filename?: string;
filename?: string | undefined;
/** The filename of non-entry chunks as relative path inside the output.path directory. */
chunkFilename?: string;
chunkFilename?: string | undefined;
/** The filename of the SourceMaps for the JavaScript files. They are inside the output.path directory. */
sourceMapFilename?: string;
sourceMapFilename?: string | undefined;
/** Filename template string of function for the sources array in a generated SourceMap. */
devtoolModuleFilenameTemplate?: string | ((info: DevtoolModuleFilenameTemplateInfo) => string);
devtoolModuleFilenameTemplate?: string | ((info: DevtoolModuleFilenameTemplateInfo) => string) | undefined;
/** Similar to output.devtoolModuleFilenameTemplate, but used in the case of duplicate module identifiers. */
devtoolFallbackModuleFilenameTemplate?: string | ((info: DevtoolModuleFilenameTemplateInfo) => string);
devtoolFallbackModuleFilenameTemplate?: string | ((info: DevtoolModuleFilenameTemplateInfo) => string) | undefined;
/**

@@ -151,17 +151,17 @@ * Enable line to line mapped mode for all/specified modules.

*/
devtoolLineToLine?: boolean;
devtoolLineToLine?: boolean | undefined;
/** The filename of the Hot Update Chunks. They are inside the output.path directory. */
hotUpdateChunkFilename?: string;
hotUpdateChunkFilename?: string | undefined;
/** The filename of the Hot Update Main File. It is inside the output.path directory. */
hotUpdateMainFilename?: string;
hotUpdateMainFilename?: string | undefined;
/** The output.path from the view of the Javascript / HTML page. */
publicPath?: string;
publicPath?: string | undefined;
/** The JSONP function used by webpack for asnyc loading of chunks. */
jsonpFunction?: string;
jsonpFunction?: string | undefined;
/** The JSONP function used by webpack for async loading of hot update chunks. */
hotUpdateFunction?: string;
hotUpdateFunction?: string | undefined;
/** Include comments with information about the modules. */
pathinfo?: boolean;
pathinfo?: boolean | undefined;
/** If set, export the bundle as library. output.library is the name. */
library?: string | string[];
library?: string | string[] | undefined;
/**

@@ -181,19 +181,19 @@ * Which format to export the library:

*/
libraryTarget?: 'var' | 'this' | 'commonjs' | 'commonjs2' | 'amd' | 'umd' | 'window' | 'assign' | 'jsonp';
libraryTarget?: 'var' | 'this' | 'commonjs' | 'commonjs2' | 'amd' | 'umd' | 'window' | 'assign' | 'jsonp' | undefined;
/** Configure which module or modules will be exposed via the `libraryTarget` */
libraryExport?: string | string[];
libraryExport?: string | string[] | undefined;
/** If output.libraryTarget is set to umd and output.library is set, setting this to true will name the AMD module. */
umdNamedDefine?: boolean;
umdNamedDefine?: boolean | undefined;
/** Prefixes every line of the source in the bundle with this string. */
sourcePrefix?: string;
sourcePrefix?: string | undefined;
/** This option enables cross-origin loading of chunks. */
crossOriginLoading?: string | boolean;
crossOriginLoading?: string | boolean | undefined;
/** The encoding to use when generating the hash, defaults to 'hex' */
hashDigest?: 'hex' | 'latin1' | 'base64';
hashDigest?: 'hex' | 'latin1' | 'base64' | undefined;
/** The prefix length of the hash digest to use, defaults to 20. */
hashDigestLength?: number;
hashDigestLength?: number | undefined;
/** Algorithm used for generation the hash (see node.js crypto package) */
hashFunction?: string | ((algorithm: string, options?: any) => any);
hashFunction?: string | ((algorithm: string, options?: any) => any) | undefined;
/** An optional salt to update the hash via Node.JS' hash.update. */
hashSalt?: string;
hashSalt?: string | undefined;
}

@@ -203,19 +203,19 @@

/** A array of applied pre loaders. */
preLoaders?: Rule[];
preLoaders?: Rule[] | undefined;
/** A array of applied post loaders. */
postLoaders?: Rule[];
postLoaders?: Rule[] | undefined;
/** A RegExp or an array of RegExps. Don’t parse files matching. */
noParse?: RegExp | RegExp[] | ((content: string) => boolean);
unknownContextRequest?: string;
unknownContextRecursive?: boolean;
unknownContextRegExp?: RegExp;
unknownContextCritical?: boolean;
exprContextRequest?: string;
exprContextRegExp?: RegExp;
exprContextRecursive?: boolean;
exprContextCritical?: boolean;
wrappedContextRegExp?: RegExp;
wrappedContextRecursive?: boolean;
wrappedContextCritical?: boolean;
strictExportPresence?: boolean;
noParse?: RegExp | RegExp[] | ((content: string) => boolean) | undefined;
unknownContextRequest?: string | undefined;
unknownContextRecursive?: boolean | undefined;
unknownContextRegExp?: RegExp | undefined;
unknownContextCritical?: boolean | undefined;
exprContextRequest?: string | undefined;
exprContextRegExp?: RegExp | undefined;
exprContextRecursive?: boolean | undefined;
exprContextCritical?: boolean | undefined;
wrappedContextRegExp?: RegExp | undefined;
wrappedContextRecursive?: boolean | undefined;
wrappedContextCritical?: boolean | undefined;
strictExportPresence?: boolean | undefined;
}

@@ -244,3 +244,3 @@ interface OldModule extends BaseModule {

*/
modules?: string[];
modules?: string[] | undefined;

@@ -252,3 +252,3 @@ /**

*/
descriptionFiles?: string[];
descriptionFiles?: string[] | undefined;

@@ -262,3 +262,3 @@ /**

*/
mainFields?: string[];
mainFields?: string[] | undefined;

@@ -274,3 +274,3 @@ /**

*/
aliasFields?: string[];
aliasFields?: string[] | undefined;

@@ -283,3 +283,3 @@ /**

*/
mainFiles?: string[];
mainFiles?: string[] | undefined;

@@ -291,3 +291,3 @@ /**

*/
extensions?: string[];
extensions?: string[] | undefined;

@@ -298,3 +298,3 @@ /**

*/
enforceExtension?: boolean;
enforceExtension?: boolean | undefined;

@@ -306,3 +306,3 @@ /**

*/
alias?: { [key: string]: string; };
alias?: { [key: string]: string; } | undefined;

@@ -316,3 +316,3 @@ /**

*/
unsafeCache?: {} | boolean;
unsafeCache?: {} | boolean | undefined;

@@ -329,3 +329,3 @@ /**

*/
plugins?: ResolvePlugin[];
plugins?: ResolvePlugin[] | undefined;

@@ -337,3 +337,3 @@ /**

*/
symlinks?: boolean;
symlinks?: boolean | undefined;

@@ -346,3 +346,3 @@ /**

*/
cacheWithContext?: boolean;
cacheWithContext?: boolean | undefined;
}

@@ -354,5 +354,5 @@

*/
moduleExtensions?: string[];
moduleExtensions?: string[] | undefined;
enforceModuleExtension?: boolean;
enforceModuleExtension?: boolean | undefined;
}

@@ -369,8 +369,8 @@

interface Node {
console?: boolean;
global?: boolean;
process?: boolean;
Buffer?: boolean;
__filename?: boolean | string;
__dirname?: boolean | string;
console?: boolean | undefined;
global?: boolean | undefined;
process?: boolean | undefined;
Buffer?: boolean | undefined;
__filename?: boolean | string | undefined;
__dirname?: boolean | string | undefined;
[nodeBuiltin: string]: boolean | string | undefined;

@@ -381,5 +381,5 @@ }

/** The Condition must match. The convention is the provide a string or array of strings here, but it's not enforced. */
include?: Condition;
include?: Condition | undefined;
/** The Condition must NOT match. The convention is the provide a string or array of strings here, but it's not enforced. */
exclude?: Condition;
exclude?: Condition | undefined;
}

@@ -409,7 +409,7 @@ interface TestConditionSpec extends BaseConditionSpec {

loader: string;
query?: { [name: string]: any };
query?: { [name: string]: any } | undefined;
}
interface NewLoader {
loader: string;
options?: { [name: string]: any } | string;
options?: { [name: string]: any } | string | undefined;
}

@@ -440,13 +440,13 @@ type Loader = string | OldLoader | NewLoader;

*/
enforce?: 'pre' | 'post';
enforce?: 'pre' | 'post' | undefined;
/** A condition that must be met */
test?: Condition | Condition[];
test?: Condition | Condition[] | undefined;
/** A condition that must not be met */
exclude?: Condition | Condition[];
exclude?: Condition | Condition[] | undefined;
/** A condition that must be met */
include?: Condition | Condition[];
include?: Condition | Condition[] | undefined;
/** A Condition matched with the resource. */
resource?: Condition | Condition[];
resource?: Condition | Condition[] | undefined;
/** A condition matched with the issuer */
issuer?: Condition | Condition[];
issuer?: Condition | Condition[] | undefined;
/**

@@ -458,7 +458,7 @@ * An object with parser options. All applied parser options are merged.

*/
parser?: { [optName: string]: any };
parser?: { [optName: string]: any } | undefined;
/** An array of Rules that is also used when the Rule matches. */
rules?: Rule[];
rules?: Rule[] | undefined;
/** An array of Rules from which only the first matching Rule is used when the Rule matches. */
oneOf?: Rule[];
oneOf?: Rule[] | undefined;
}

@@ -479,6 +479,6 @@ interface BaseDirectRule extends BaseRule {

*/
query?: { [name: string]: any };
query?: { [name: string]: any } | undefined;
}
interface NewLoaderRule extends BaseSingleLoaderRule {
options?: { [name: string]: any } | string;
options?: { [name: string]: any } | string | undefined;
}

@@ -524,3 +524,3 @@ type LoaderRule = OldLoaderRule | NewLoaderRule;

*/
hints?: 'warning' | 'error' | false;
hints?: 'warning' | 'error' | false | undefined;
/**

@@ -530,3 +530,3 @@ * An asset is any emitted file from webpack. This option controls when webpack emits a performance hint

*/
maxAssetSize?: number;
maxAssetSize?: number | undefined;
/**

@@ -537,3 +537,3 @@ * An entrypoint represents all assets that would be utilized during initial load time for a specific entry.

*/
maxEntrypointSize?: number;
maxEntrypointSize?: number | undefined;
}

@@ -559,3 +559,3 @@ type Stats = Stats.ToStringOptions;

*/
aggregateTimeout?: number;
aggregateTimeout?: number | undefined;
/**

@@ -566,5 +566,5 @@ * For some systems, watching many file systems can result in a lot of CPU or memory usage.

*/
ignored?: string | string[] | RegExp;
ignored?: string | string[] | RegExp | undefined;
/** Turn on polling by passing true, or specifying a poll interval in milliseconds. */
poll?: boolean | number;
poll?: boolean | number | undefined;
}

@@ -651,67 +651,67 @@ }

/** Add asset Information */
assets?: boolean;
assets?: boolean | undefined;
/** Sort assets by a field */
assetsSort?: string;
assetsSort?: string | undefined;
/** Add information about cached (not built) modules */
cached?: boolean;
cached?: boolean | undefined;
/** Show cached assets (setting this to `false` only shows emitted files) */
cachedAssets?: boolean;
cachedAssets?: boolean | undefined;
/** Add children information */
children?: boolean;
children?: boolean | undefined;
/** Add built modules information to chunk information */
chunkModules?: boolean;
chunkModules?: boolean | undefined;
/** Add the origins of chunks and chunk merging info */
chunkOrigins?: boolean;
chunkOrigins?: boolean | undefined;
/** Add chunk information (setting this to `false` allows for a less verbose output) */
chunks?: boolean;
chunks?: boolean | undefined;
/** Sort the chunks by a field */
chunksSort?: string;
chunksSort?: string | undefined;
/** Context directory for request shortening */
context?: string;
context?: string | undefined;
/** Display the distance from the entry point for each module */
depth?: boolean;
depth?: boolean | undefined;
/** Display the entry points with the corresponding bundles */
entrypoints?: boolean;
entrypoints?: boolean | undefined;
/** Add --env information */
env?: boolean;
env?: boolean | undefined;
/** Add errors */
errors?: boolean;
errors?: boolean | undefined;
/** Add details to errors (like resolving log) */
errorDetails?: boolean;
errorDetails?: boolean | undefined;
/** Exclude assets from being displayed in stats */
excludeAssets?: StatsExcludeFilter;
excludeAssets?: StatsExcludeFilter | undefined;
/** Exclude modules from being displayed in stats */
excludeModules?: StatsExcludeFilter;
excludeModules?: StatsExcludeFilter | undefined;
/** See excludeModules */
exclude?: StatsExcludeFilter;
exclude?: StatsExcludeFilter | undefined;
/** Add the hash of the compilation */
hash?: boolean;
hash?: boolean | undefined;
/** Set the maximum number of modules to be shown */
maxModules?: number;
maxModules?: number | undefined;
/** Add built modules information */
modules?: boolean;
modules?: boolean | undefined;
/** Sort the modules by a field */
modulesSort?: string;
modulesSort?: string | undefined;
/** Show dependencies and origin of warnings/errors */
moduleTrace?: boolean;
moduleTrace?: boolean | undefined;
/** Add public path information */
publicPath?: boolean;
publicPath?: boolean | undefined;
/** Add information about the reasons why modules are included */
reasons?: boolean;
reasons?: boolean | undefined;
/** Add the source code of modules */
source?: boolean;
source?: boolean | undefined;
/** Add timing information */
timings?: boolean;
timings?: boolean | undefined;
/** Add webpack version information */
version?: boolean;
version?: boolean | undefined;
/** Add warnings */
warnings?: boolean;
warnings?: boolean | undefined;
/** Show which exports of a module are used */
usedExports?: boolean;
usedExports?: boolean | undefined;
/** Filter warnings to be shown */
warningsFilter?: string | RegExp | Array<string | RegExp> | ((warning: string) => boolean);
warningsFilter?: string | RegExp | Array<string | RegExp> | ((warning: string) => boolean) | undefined;
/** Show performance hint when file size exceeds `performance.maxAssetSize` */
performance?: boolean;
performance?: boolean | undefined;
/** Show the exports of the modules */
providedExports?: boolean;
providedExports?: boolean | undefined;
}

@@ -725,3 +725,3 @@

/** `webpack --colors` equivalent */
colors?: boolean;
colors?: boolean | undefined;
}

@@ -745,7 +745,7 @@

banner: string;
entryOnly?: boolean;
exclude?: Filter | Filter[];
include?: Filter | Filter[];
raw?: boolean;
test?: Filter | Filter[];
entryOnly?: boolean | undefined;
exclude?: Filter | Filter[] | undefined;
include?: Filter | Filter[] | undefined;
raw?: boolean | undefined;
test?: Filter | Filter[] | undefined;
}

@@ -773,3 +773,3 @@ }

*/
context?: string;
context?: string | undefined;

@@ -820,3 +820,3 @@ /**

*/
name?: string;
name?: string | undefined;

@@ -826,3 +826,3 @@ /**

*/
scope?: string;
scope?: string | undefined;

@@ -836,3 +836,3 @@ /**

*/
sourceType?: string;
sourceType?: string | undefined;
}

@@ -847,12 +847,12 @@ }

interface Options {
append?: false | string;
columns?: boolean;
append?: false | string | undefined;
columns?: boolean | undefined;
lineToLine?: boolean | {
exclude?: Condition | Condition[];
include?: Condition | Condition[];
test?: Condition | Condition[];
};
module?: boolean;
moduleFilenameTemplate?: string;
sourceRoot?: string;
exclude?: Condition | Condition[] | undefined;
include?: Condition | Condition[] | undefined;
test?: Condition | Condition[] | undefined;
} | undefined;
module?: boolean | undefined;
moduleFilenameTemplate?: string | undefined;
sourceRoot?: string | undefined;
}

@@ -867,5 +867,5 @@ }

constructor(options?: {
hashFunction?: string,
hashDigest?: string,
hashDigestLength?: number
hashFunction?: string | undefined,
hashDigest?: string | undefined,
hashDigestLength?: number | undefined
});

@@ -932,18 +932,18 @@ }

interface Options {
append?: false | string;
columns?: boolean;
exclude?: Condition | Condition[];
fallbackModuleFilenameTemplate?: string;
filename?: null | false | string;
include?: Condition | Condition[];
append?: false | string | undefined;
columns?: boolean | undefined;
exclude?: Condition | Condition[] | undefined;
fallbackModuleFilenameTemplate?: string | undefined;
filename?: null | false | string | undefined;
include?: Condition | Condition[] | undefined;
lineToLine?: boolean | {
exclude?: Condition | Condition[];
include?: Condition | Condition[];
test?: Condition | Condition[];
};
module?: boolean;
moduleFilenameTemplate?: string;
noSources?: boolean;
sourceRoot?: null | string;
test?: Condition | Condition[];
exclude?: Condition | Condition[] | undefined;
include?: Condition | Condition[] | undefined;
test?: Condition | Condition[] | undefined;
} | undefined;
module?: boolean | undefined;
moduleFilenameTemplate?: string | undefined;
noSources?: boolean | undefined;
sourceRoot?: null | string | undefined;
test?: Condition | Condition[] | undefined;
}

@@ -969,3 +969,3 @@ }

*/
entryChunkMultiplicator?: number;
entryChunkMultiplicator?: number | undefined;
/**

@@ -975,3 +975,3 @@ * A factor which defines the minimum required size reduction for chunk merging.

*/
minSizeReduce?: number;
minSizeReduce?: number | undefined;
/**

@@ -981,3 +981,3 @@ * When set, modules that are not in both merged chunks are moved to all parents of the chunk.

*/
moveToParents?: boolean;
moveToParents?: boolean | undefined;
}

@@ -1000,4 +1000,4 @@ }

*/
name?: string;
names?: string[];
name?: string | undefined;
names?: string[] | undefined;

@@ -1008,3 +1008,3 @@ /**

*/
filename?: string;
filename?: string | undefined;

@@ -1017,3 +1017,3 @@ /**

*/
minChunks?: number | MinChunksFn;
minChunks?: number | MinChunksFn | undefined;

@@ -1024,3 +1024,3 @@ /**

*/
chunks?: string[];
chunks?: string[] | undefined;

@@ -1030,3 +1030,3 @@ /**

*/
children?: boolean;
children?: boolean | undefined;

@@ -1038,3 +1038,3 @@ /**

*/
async?: boolean | string;
async?: boolean | string | undefined;

@@ -1044,3 +1044,3 @@ /**

*/
minSize?: number;
minSize?: number | undefined;
}

@@ -1074,10 +1074,10 @@ }

interface Options extends UglifyJS.MinifyOptions {
beautify?: boolean;
comments?: boolean | RegExp | CommentFilter;
exclude?: Condition | Condition[];
include?: Condition | Condition[];
beautify?: boolean | undefined;
comments?: boolean | RegExp | CommentFilter | undefined;
exclude?: Condition | Condition[] | undefined;
include?: Condition | Condition[] | undefined;
/** Parallelization can speedup your build significantly and is therefore highly recommended. */
parallel?: boolean | { cache: boolean, workers: boolean | number };
sourceMap?: boolean;
test?: Condition | Condition[];
parallel?: boolean | { cache: boolean, workers: boolean | number } | undefined;
sourceMap?: boolean | undefined;
test?: Condition | Condition[] | undefined;
}

@@ -1109,3 +1109,3 @@ }

*/
raw?: boolean;
raw?: boolean | undefined;
}

@@ -1112,0 +1112,0 @@

{
"name": "@types/webpack",
"version": "3.8.20",
"version": "3.8.21",
"description": "TypeScript definitions for webpack",
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webpack",
"license": "MIT",

@@ -77,4 +78,4 @@ "contributors": [

},
"typesPublisherContentHash": "f08392946d48ab10eef4167d665cc5bb696f18d11209fd451b488265c32b184c",
"typeScriptVersion": "3.2"
"typesPublisherContentHash": "c1c638929cd18d72ca31ea889556142ab709c2781c9c14d80abc030531a42821",
"typeScriptVersion": "3.6"
}

@@ -11,3 +11,3 @@ # Installation

### Additional Details
* Last updated: Wed, 28 Oct 2020 18:56:30 GMT
* Last updated: Fri, 02 Jul 2021 18:05:22 GMT
* Dependencies: [@types/tapable](https://npmjs.com/package/@types/tapable), [@types/uglify-js](https://npmjs.com/package/@types/uglify-js), [@types/source-map](https://npmjs.com/package/@types/source-map), [@types/node](https://npmjs.com/package/@types/node)

@@ -14,0 +14,0 @@ * Global values: none

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc