Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

tify

Package Overview
Dependencies
Maintainers
1
Versions
80
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tify - npm Package Compare versions

Comparing version 0.14.1 to 0.15.1

.postcssrc.js

11

build/build.js

@@ -1,2 +0,2 @@

/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable import/no-extraneous-dependencies, no-console */

@@ -31,6 +31,9 @@ require('./check-versions')();

// eslint-disable-next-line no-console
console.log(chalk.cyan(' Build complete.\n'));
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'));
process.exit(1);
}
console.log(chalk.cyan(' Build complete.\n'));
});
});

@@ -1,2 +0,2 @@

/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable import/no-extraneous-dependencies, no-console */

@@ -6,2 +6,3 @@ const chalk = require('chalk');

const packageConfig = require('../package.json');
const shell = require('shelljs');

@@ -18,8 +19,11 @@ function exec(cmd) {

},
{
];
if (shell.which('npm')) {
versionRequirements.push({
name: 'npm',
currentVersion: exec('npm --version'),
versionRequirement: packageConfig.engines.npm,
},
];
});
}

@@ -32,4 +36,4 @@ module.exports = () => {

warnings.push(
`${mod.name}: ${chalk.red(mod.currentVersion)} should be`
+ ` ${chalk.green(mod.versionRequirement)}` // eslint-disable-line comma-dangle
`${mod.name}: ${chalk.red(mod.currentVersion)}`
+ ` should be ${chalk.green(mod.versionRequirement)}`
);

@@ -40,3 +44,2 @@ }

if (warnings.length) {
/* eslint-disable no-console */
console.log('');

@@ -46,4 +49,4 @@ console.log(chalk.yellow('To use this template, you must update following to modules:'));

for (let i = 0; i < warnings.length; i += 1) {
const warning = warnings[i];
console.log(`\t${warning}`);
const warning = warnings[i]
console.log(` ${warning}`);
}

@@ -54,2 +57,1 @@ console.log();

};

@@ -1,2 +0,3 @@

/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable */
require('eventsource-polyfill');

@@ -3,0 +4,0 @@ const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true');

@@ -1,3 +0,2 @@

/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable no-console */
/* eslint-disable import/no-extraneous-dependencies, no-console */

@@ -17,3 +16,3 @@ require('./check-versions')();

const proxyMiddleware = require('http-proxy-middleware');
const webpackConfig = process.env.NODE_ENV === 'testing'
const webpackConfig = (process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'production')
? require('./webpack.prod.conf')

@@ -39,13 +38,20 @@ : require('./webpack.dev.conf');

const hotMiddleware = require('webpack-hot-middleware')(compiler, {
log: () => {},
log: false,
heartbeat: 2000,
});
// force page reload when html-webpack-plugin template changes;
compiler.plugin('compilation', (compilation) => {
compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => {
hotMiddleware.publish({ action: 'reload' });
cb();
});
});
// force page reload when html-webpack-plugin template changes
// currently disabled until this is resolved:
// https://github.com/jantimon/html-webpack-plugin/issues/680
// compiler.plugin('compilation', (compilation) => {
// compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => {
// hotMiddleware.publish({ action: 'reload' });
// cb();
// });
// });
// proxy api requests;
// enable hot-reload and state-preserving;
// compilation error display;
app.use(hotMiddleware);
// proxy api requests
Object.keys(proxyTable).forEach((context) => {

@@ -59,13 +65,9 @@ let options = proxyTable[context];

// handle fallback for HTML5 history API;
// handle fallback for HTML5 history API
app.use(require('connect-history-api-fallback')());
// serve webpack bundle output;
// serve webpack bundle output
app.use(devMiddleware);
// enable hot-reload and state-preserving;
// compilation error display;
app.use(hotMiddleware);
// serve pure static assets;
// serve pure static assets
const staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory);

@@ -77,3 +79,5 @@ app.use(staticPath, express.static('./static'));

let resolveFunc;
const readyPromise = new Promise((resolve) => { resolveFunc = resolve; });
const readyPromise = new Promise((resolve) => {
resolveFunc = resolve;
});

@@ -84,3 +88,5 @@ console.log('> Starting dev server...');

// when env is testing, don't need open it
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') opn(uri);
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
opn(uri);
}
resolveFunc();

@@ -93,3 +99,5 @@ });

ready: readyPromise,
close: () => { server.close(); },
close: () => {
server.close();
},
};

@@ -1,5 +0,8 @@

var utils = require('./utils');
var config = require('../config');
var isProduction = process.env.NODE_ENV === 'production';
/* eslint-disable import/no-extraneous-dependencies */
const utils = require('./utils');
const config = require('../config');
const isProduction = process.env.NODE_ENV === 'production';
module.exports = {

@@ -17,2 +20,8 @@ loaders: utils.cssLoaders({

],
transformToRequire: {
video: 'src',
source: 'src',
img: 'src',
image: 'xlink:href',
},
};
/* eslint-disable import/no-extraneous-dependencies */
const path = require('path');

@@ -3,0 +4,0 @@ const utils = require('./utils');

/* eslint-disable import/no-extraneous-dependencies */
const utils = require('./utils');

@@ -3,0 +4,0 @@ const webpack = require('webpack');

@@ -1,4 +0,5 @@

/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable import/no-unresolved */
/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved */
// NOTE: HtmlWebpackPlugin removed since we don't need an index.html in production.
const path = require('path');

@@ -38,2 +39,3 @@ const utils = require('./utils');

}),
// TIFY-specific: Prepend copyright notice to each compiled file
new webpack.BannerPlugin(

@@ -45,2 +47,3 @@ `TIFY v${pkg.version}\n`

),
// UglifyJs do not support ES6+, you can also use babel-minify for better treeshaking: https://github.com/babel/minify
new webpack.optimize.UglifyJsPlugin({

@@ -50,2 +53,3 @@ compress: {

},
parallel: true,
sourceMap: true,

@@ -59,3 +63,7 @@ }),

// duplicated CSS from different components can be deduped.
new OptimizeCSSPlugin(),
new OptimizeCSSPlugin({
cssProcessorOptions: {
safe: true, // TODO: Is this required?
},
}),
// copy custom static assets

@@ -62,0 +70,0 @@ new CopyWebpackPlugin([

@@ -1,3 +0,4 @@

// This is the webpack config used for unit tests.
// This is the webpack config used for unit tests
/* eslint-disable import/no-extraneous-dependencies */

@@ -16,2 +17,9 @@

devtool: '#inline-source-map',
resolveLoader: {
alias: {
// necessary to to make lang="scss" work in test when using vue-loader's ?inject option
// see discussion at https://github.com/vuejs/vue-loader/issues/724
'scss-loader': 'sass-loader',
},
},
plugins: [

@@ -18,0 +26,0 @@ new webpack.DefinePlugin({

@@ -0,1 +1,2 @@

// Based on template version 1.1.3
// See http://vuejs-templates.github.io/webpack for documentation

@@ -37,2 +38,1 @@ const path = require('path');

};
module.exports = {
NODE_ENV: '"production"',
// Used in "export" panel
AUTHOR_NAME: `"${process.env.npm_package_author_name}"`,

@@ -4,0 +6,0 @@ AUTHOR_EMAIL: `"${process.env.npm_package_author_email}"`,

{
"name": "tify",
"version": "0.14.1",
"version": "0.15.1",
"description": "TIFY is a slim and fast IIIF document viewer.",

@@ -16,50 +16,50 @@ "homepage": "https://github.com/subugoe/tify",

"scripts": {
"build": "node build/build.js",
"dev": "node build/dev-server.js",
"build": "node build/build.js",
"install": "rm -rf openseadragon && git clone https://github.com/openseadragon/openseadragon.git && cd openseadragon && git checkout tags/v2.3.0",
"e2e": "node test/e2e/runner.js",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs",
"postinstall": "rm -rf openseadragon && git clone https://github.com/openseadragon/openseadragon.git && cd openseadragon && git checkout tags/v2.3.1",
"test": "npm run unit && npm run e2e",
"unit-watch": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js",
"unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs",
"version": "npm run build && git add dist"
},
"dependencies": {
"axios": "^0.16.2",
"axios": "^0.17.0",
"material-design-icons-iconfont": "^3.0.3",
"promise-polyfill": "^6.0.2",
"striptags": "^2.2.1",
"vue": "^2.4.2"
"vue": "^2.5.2"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.25.0",
"babel-eslint": "^7.2.3",
"babel-loader": "^7.1.1",
"babel-plugin-istanbul": "^4.1.4",
"autoprefixer": "^7.1.6",
"babel-core": "^6.26.0",
"babel-eslint": "^8.0.1",
"babel-loader": "^7.1.2",
"babel-plugin-istanbul": "^4.1.5",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-2": "^6.24.1",
"babel-register": "^6.24.1",
"babel-register": "^6.26.0",
"banner-webpack-plugin": "^0.2.3",
"chai": "^4.1.1",
"chalk": "^2.1.0",
"codeceptjs": "^1.0.0",
"connect-history-api-fallback": "^1.3.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.4",
"css-loader": "^0.28.4",
"eslint": "^4.4.1",
"eslint-config-airbnb-base": "^11.3.1",
"chai": "^4.1.2",
"chalk": "^2.2.0",
"codeceptjs": "^1.0.3",
"connect-history-api-fallback": "^1.4.0",
"copy-webpack-plugin": "^4.2.0",
"cross-env": "^5.1.0",
"css-loader": "^0.28.7",
"eslint": "^4.9.0",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-import-resolver-webpack": "^0.8.3",
"eslint-loader": "^1.9.0",
"eslint-plugin-html": "^3.1.1",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-html": "^3.2.2",
"eslint-plugin-import": "^2.8.0",
"eventsource-polyfill": "^0.9.6",
"express": "^4.15.4",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^0.11.2",
"express": "^4.16.2",
"extract-text-webpack-plugin": "^3.0.1",
"file-loader": "^1.1.5",
"friendly-errors-webpack-plugin": "^1.6.1",
"function-bind": "^1.1.0",
"function-bind": "^1.1.1",
"html-webpack-plugin": "^2.30.1",

@@ -69,12 +69,11 @@ "http-proxy-middleware": "^0.17.4",

"inject-loader": "^3.0.1",
"karma": "^1.7.0",
"karma": "^1.7.1",
"karma-coverage": "^1.1.1",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.4",
"karma-sinon-chai": "^1.3.1",
"karma-sinon-chai": "^1.3.2",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.31",
"karma-webpack": "^2.0.4",
"lolex": "^2.1.2",
"mocha": "^3.5.0",
"karma-webpack": "^2.0.5",
"mocha": "^4.0.1",
"nightmare": "^2.10.0",

@@ -84,17 +83,19 @@ "nightmare-upload": "^0.1.1",

"opn": "^5.1.0",
"optimize-css-assets-webpack-plugin": "^3.0.0",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.3.0",
"phantomjs-prebuilt": "^2.1.14",
"postcss-import": "^10.0.0",
"phantomjs-prebuilt": "^2.1.15",
"postcss-import": "^11.0.0",
"sass-loader": "^6.0.6",
"semver": "^5.4.1",
"sinon": "^3.0.0",
"sinon-chai": "^2.12.0",
"url-loader": "^0.5.9",
"vue-loader": "^13.0.4",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.4.2",
"webpack": "^3.4.1",
"shelljs": "^0.7.8",
"sinon": "^4.0.1",
"sinon-chai": "^2.14.0",
"url-loader": "^0.6.2",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.3",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.8.1",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-middleware": "^1.12.0",
"webpack-hot-middleware": "^2.18.2",
"webpack-hot-middleware": "^2.20.0",
"webpack-merge": "^4.1.0"

@@ -101,0 +102,0 @@ },

@@ -9,3 +9,3 @@ <p>

[Check out the demo](http://tify.sub.uni-goettingen.de/demo.html?manifestUrl=https://gdzstaging.sub.uni-goettingen.de/iiif/presentation/PPN857449303/manifest) and feel free to load your own manifests by changing the URL.
[Check out the demo](http://tify.sub.uni-goettingen.de/demo.html?manifest=https://gdzstaging.sub.uni-goettingen.de/iiif/presentation/PPN857449303/manifest) and feel free to load your own manifests by changing the URL.

@@ -36,10 +36,10 @@ ## Embedding TIFY

The only required parameter `manifestUrl` is a URL pointing to the manifest. It can be set either as a query parameter or with the `tifyOptions` object, whereby the latter takes precedence.
The only required parameter `manifest` is a URL pointing to the manifest. It can be set either as a query parameter or with the `tifyOptions` object, whereby the latter takes precedence.
### Options
- `container` (string, default: `#tify`): The HTML element TIFY is loaded into.
- `container` (string or HTMLElement, default: `#tify`): The HTML element TIFY is loaded into.
- `immediateRender` (boolean, default: `true`): Set this to `false` to render lower resolution tiles until the full resolution is loaded, providing the effect of blurry to sharp. Note that this increases loading times.
- `language` (string, default: `en`): The interface language. Currently, only English and German (`de`) are available.
- `manifestUrl` (string): A URL pointing to the IIIF manifest. If this option is not set, the URL has to be provided via a query parameter of the same name.
- `stylesheetUrl`: (string) Use this to provide your own stylesheet, replacing TIFY's default styles. Set to `null` to prevent TIFY from loading any styles, e.g. if your site's stylesheet already includes styles for TIFY.
- `manifest` (string): A URL pointing to the IIIF manifest. If this option is not set, the URL has to be provided via a query parameter of the same name.
- `stylesheet` (string): Use this to provide your own stylesheet, replacing TIFY's default styles. Set to `null` to prevent TIFY from loading any styles, e.g. if your site's stylesheet already includes styles for TIFY.
- `title` (string, default: `TIFY`): By default, TIFY replaces the window title with the document title as defined by the manifest, appended by `TIFY`. Set this to any string, or `null` to disable title modification.

@@ -58,4 +58,4 @@

language: 'de',
manifestUrl: 'https://example.com/iiif/manifest.json',
stylesheetUrl: '../styles/my-very-own-tify-styles.css',
manifest: 'https://example.com/iiif/manifest.json',
stylesheet: '../styles/my-very-own-tify-styles.css',
title: null,

@@ -81,3 +81,3 @@ }

In development mode, the manifest URL must be provided via query parameter, e.g. `http://localhost:8080/?manifestUrl=https://gdzstaging.sub.uni-goettingen.de/iiif/presentation/PPN857449303/manifest`.
In development mode, the manifest URL must be provided via query parameter, e.g. `http://localhost:8080/?manifest=https://gdzstaging.sub.uni-goettingen.de/iiif/presentation/PPN857449303/manifest`.

@@ -84,0 +84,0 @@ Build for production with minification:

@@ -16,2 +16,30 @@ import Vue from 'vue';

if (window.tifyOptions) {
if (typeof window.tifyOptions !== 'object') {
throw new Error('tifyOptions must be an object');
}
Object.keys(window.tifyOptions).forEach((key) => {
if (key === 'container') {
if (typeof window.tifyOptions[key] !== 'string' && !(window.tifyOptions[key] instanceof HTMLElement)) {
throw new Error(`TIFY option ${key} must be a string or an HTMLElement`);
}
} else if (key === 'immediateRender') {
if (typeof window.tifyOptions[key] !== 'boolean') {
throw new Error(`TIFY option "${key}" must be boolean`);
}
} else if (key === 'language' || key === 'title') {
if (typeof window.tifyOptions[key] !== 'string') {
throw new Error(`TIFY option "${key}" must be a string`);
}
} else if (key === 'manifest' || key === 'stylesheet') {
if (typeof window.tifyOptions[key] !== 'string' && window.tifyOptions[key] !== null) {
throw new Error(`TIFY option "${key}" must be a string (URL) or null`);
}
} else {
throw new Error(`Unknown TIFY option: "${key}"`);
}
});
}
// In production mode, load the stylesheet by adding a <link> to <head>

@@ -33,12 +61,12 @@ // In dev mode, the stylesheet is inlined for hot reload

language: 'en',
manifestUrl: null,
stylesheetUrl,
manifest: null,
stylesheet: stylesheetUrl,
title: 'TIFY',
}, window.tifyOptions);
const container = document.createElement('div');
const el = document.querySelector(options.container);
if (el) {
el.appendChild(container);
} else if (process.env.NODE_ENV !== 'testing') {
const container = typeof options.container === 'string'
? document.querySelector(options.container)
: options.container;
if (!container && process.env.NODE_ENV !== 'testing') {
throw new Error('TIFY container element not found');

@@ -91,2 +119,3 @@ }

if (this.isValidPagesArray(params.pages)) {
// eslint-disable-next-line prefer-destructuring
pages = params.pages;

@@ -114,3 +143,3 @@ } else {

// http://iiif.io/api/presentation/2.1/#language-of-property-values
const filterHtml = this.$options.filters.filterHtml;
const { filterHtml } = this.$options.filters;

@@ -130,3 +159,3 @@ if (!(value instanceof Array)) {

const language = this.options.language;
const { language } = this.options;
const displayedValues = [];

@@ -175,2 +204,3 @@ const translation = {};

if (
// eslint-disable-next-line no-restricted-globals
isNaN(pages[i])

@@ -186,3 +216,3 @@ || (i > 0 && pages[i] > 0 && pages[i] <= pages[i - 1])

setPage(page) {
const pages = this.params.pages;
const { pages } = this.params;
if (pages[0] % 2 < 1 && (pages[1] === pages[0] + 1 || pages[1] === 0)) {

@@ -246,11 +276,11 @@ const newPage = (page % 2 > 0 ? page - 1 : page);

if (this.options.stylesheetUrl) this.appendStylesheet(this.options.stylesheetUrl);
if (this.options.stylesheet) this.appendStylesheet(this.options.stylesheet);
// Manifest URL in tifyOptions trumps query param
this.manifestUrl = this.options.manifestUrl || this.getQueryParam('manifestUrl');
this.manifestUrl = this.options.manifest || this.getQueryParam('manifest');
if (!this.manifestUrl) {
this.error = 'Missing query parameter or option: manifestUrl';
this.error = 'Missing query parameter or option: manifest';
return;
} else if (this.options.manifestUrl && this.params.manifestUrl) {
this.error = 'Setting manifestUrl via query parameter is disabled';
} else if (this.options.manifest && this.params.manifest) {
this.error = 'Setting manifest via query parameter is disabled';
}

@@ -257,0 +287,0 @@

Feature('Fulltext');
Scenario('Display fulltext', (I) => {
I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/wellcome-b18035723.json&tify={"pages":[15]}');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/wellcome-b18035723.json&tify={"pages":[15]}');
I.waitForElement('.tify-app_main');

@@ -6,0 +6,0 @@

Feature('Info');
Scenario('Display related metadata', (I) => {
I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/wellcome-b18035723.json');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/wellcome-b18035723.json');
I.waitForElement('.tify-app_main');

@@ -11,3 +11,3 @@

I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/ubl-0000000001.json');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/ubl-0000000001.json');
I.click('Info');

@@ -20,3 +20,3 @@ I.see('Related Resources');

Scenario('Collapse long metadata values', (I) => {
I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json');
I.waitForElement('.tify-app_main');

@@ -23,0 +23,0 @@ I.click('Info');

@@ -6,3 +6,3 @@ Feature('Pagination');

Scenario('Change page via buttons', (I) => {
I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json&tify={"pages":[15]}');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json&tify={"pages":[15]}');
I.waitForElement('.tify-app_main');

@@ -37,3 +37,3 @@

Scenario('Change page via keyboard', (I) => {
I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json&tify={"pages":[15]}');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json&tify={"pages":[15]}');
I.waitForElement('.tify-app_main');

@@ -40,0 +40,0 @@

Feature('TOC');
Scenario('Navigate TOC', (I) => {
I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/gdz-HANS_DE_7_w042081.json');
I.waitForElement('.tify-app_main');

@@ -6,0 +6,0 @@

@@ -6,3 +6,3 @@ Feature('Views');

I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/wellcome-b18035723.json');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/wellcome-b18035723.json');
I.waitForElement('.tify-app_main');

@@ -39,3 +39,3 @@

I.amOnPage('http://localhost:8080/?manifestUrl=http://localhost:8081/manifest/wellcome-b18035723.json');
I.amOnPage('http://localhost:8080/?manifest=http://localhost:8081/manifest/wellcome-b18035723.json');
I.waitForElement('.tify-app_main');

@@ -42,0 +42,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc