change server build process to respect babel transforms
Summary: The build process for the server was a simple ts-node that compiled all deps. However, that didn't do any source transformations we need, like replacing `fb-stubs` with `fb` in facebook builds. This diff works out the dev build process to align more with how other parts of the code base is build, by starting metro to build and bundle the server (only the sources of flipper-server, flipper-server-core and other flipper packages are bundled, node-deps are left as is). To achieve this, since metro doesn't have support for 'external' packages like any arbitrarily other bundler, we recycle the electronRequire work around that is used in the desktop app as well Reviewed By: aigoncharov Differential Revision: D32949677 fbshipit-source-id: 00d326bb17b68aece6fb43af98d0def13b335e74
This commit is contained in:
committed by
Facebook GitHub Bot
parent
1ffd845fb2
commit
ae56f2b62f
1
desktop/.gitignore
vendored
1
desktop/.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
lib/
|
lib/
|
||||||
|
dist/
|
||||||
node_modules/
|
node_modules/
|
||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
/static/themes/
|
/static/themes/
|
||||||
|
|||||||
49
desktop/babel-transformer/src/electron-requires-server.ts
Normal file
49
desktop/babel-transformer/src/electron-requires-server.ts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
* @format
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {CallExpression} from '@babel/types';
|
||||||
|
import {NodePath} from '@babel/traverse';
|
||||||
|
|
||||||
|
module.exports = () => ({
|
||||||
|
name: 'change-require-to-electronRequire-in-server',
|
||||||
|
visitor: {
|
||||||
|
CallExpression(path: NodePath<CallExpression>) {
|
||||||
|
const node = path.node;
|
||||||
|
if (
|
||||||
|
node.type === 'CallExpression' &&
|
||||||
|
node.callee.type === 'Identifier' &&
|
||||||
|
node.callee.name === 'require' &&
|
||||||
|
node.arguments.length === 1 &&
|
||||||
|
node.arguments[0].type === 'StringLiteral'
|
||||||
|
) {
|
||||||
|
const source = node.arguments[0].value;
|
||||||
|
if (
|
||||||
|
// relative files should be bundled
|
||||||
|
!source.startsWith('./') &&
|
||||||
|
!source.startsWith('../') &&
|
||||||
|
// other packages from the workspace should be bundled up and transformed!
|
||||||
|
!source.startsWith('flipper-')
|
||||||
|
) {
|
||||||
|
node.callee.name = 'electronRequire';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
node.callee.type === 'MemberExpression' &&
|
||||||
|
node.callee.object.type === 'Identifier' &&
|
||||||
|
node.callee.object.name === 'require' &&
|
||||||
|
node.callee.property.type === 'Identifier' &&
|
||||||
|
node.callee.property.name === 'resolve' &&
|
||||||
|
node.arguments.length === 1 &&
|
||||||
|
node.arguments[0].type == 'StringLiteral'
|
||||||
|
) {
|
||||||
|
node.callee.object.name = 'electronRequire';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
40
desktop/babel-transformer/src/transform-server.ts
Normal file
40
desktop/babel-transformer/src/transform-server.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
* @format
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {default as doTransform} from './transform';
|
||||||
|
import {default as getCacheKey} from './get-cache-key';
|
||||||
|
|
||||||
|
const presets = [
|
||||||
|
[
|
||||||
|
'@babel/preset-env',
|
||||||
|
{
|
||||||
|
targets: {
|
||||||
|
node: 'current',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
];
|
||||||
|
const plugins = [require('./electron-requires-server'), require('./fb-stubs')];
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
transform,
|
||||||
|
getCacheKey,
|
||||||
|
};
|
||||||
|
|
||||||
|
function transform({
|
||||||
|
filename,
|
||||||
|
options,
|
||||||
|
src,
|
||||||
|
}: {
|
||||||
|
filename: string;
|
||||||
|
options: any;
|
||||||
|
src: string;
|
||||||
|
}) {
|
||||||
|
return doTransform({filename, options, src, presets, plugins});
|
||||||
|
}
|
||||||
@@ -4,17 +4,13 @@
|
|||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"description": "Standalone nodeJS based Flipper server",
|
"description": "Standalone nodeJS based Flipper server",
|
||||||
"repository": "facebook/flipper",
|
"repository": "facebook/flipper",
|
||||||
"main": "lib/index.js",
|
"main": "server.js",
|
||||||
"flipperBundlerEntry": "src",
|
"flipperBundlerEntry": "src",
|
||||||
"types": "lib/index.d.ts",
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bugs": "https://github.com/facebook/flipper/issues",
|
"bugs": "https://github.com/facebook/flipper/issues",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"express": "^4.15.2",
|
"express": "^4.15.2",
|
||||||
"flipper-common": "0.0.0",
|
|
||||||
"flipper-pkg-lib": "0.0.0",
|
|
||||||
"flipper-server-core": "0.0.0",
|
|
||||||
"fs-extra": "^9.0.0",
|
"fs-extra": "^9.0.0",
|
||||||
"mac-ca": "^1.0.6",
|
"mac-ca": "^1.0.6",
|
||||||
"p-filter": "^2.1.0",
|
"p-filter": "^2.1.0",
|
||||||
@@ -23,20 +19,20 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/node": "^15.12.5",
|
"@types/node": "^15.12.5",
|
||||||
|
"flipper-common": "0.0.0",
|
||||||
|
"flipper-pkg-lib": "0.0.0",
|
||||||
|
"flipper-server-core": "0.0.0",
|
||||||
"metro": "^0.66.2",
|
"metro": "^0.66.2",
|
||||||
"nodemon": "^2.0.15",
|
|
||||||
"ts-node": "^9.1.1",
|
|
||||||
"typescript": "^4.4.4"
|
"typescript": "^4.4.4"
|
||||||
},
|
},
|
||||||
"peerDependencies": {},
|
"peerDependencies": {},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"reset": "rimraf lib *.tsbuildinfo",
|
"reset": "rimraf lib *.tsbuildinfo",
|
||||||
"build": "tsc -b",
|
"build": "tsc -b",
|
||||||
"prepack": "yarn reset && yarn build",
|
"prepack": "yarn reset && yarn build"
|
||||||
"start": "cross-env NODE_ENV=development nodemon --ext 'tsx' --watch './src/' --watch '../flipper-server-core/src/' --exec 'yarn build && ../ts-node src/index.tsx'"
|
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"lib/**/*"
|
"dist/**/*"
|
||||||
],
|
],
|
||||||
"homepage": "https://github.com/facebook/flipper",
|
"homepage": "https://github.com/facebook/flipper",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|||||||
15
desktop/flipper-server/server.js
Normal file
15
desktop/flipper-server/server.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
* @format
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
// flipper-server uses the same infra & babel transforms as Electron
|
||||||
|
// to make sure our own sources are bundled up, but node modules arent
|
||||||
|
global.electronRequire = require;
|
||||||
|
require('./dist/index.js');
|
||||||
@@ -7,13 +7,11 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import chalk from 'chalk';
|
|
||||||
import express, {Express} from 'express';
|
import express, {Express} from 'express';
|
||||||
import http from 'http';
|
import http from 'http';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import socketio from 'socket.io';
|
import socketio from 'socket.io';
|
||||||
import {hostname} from 'os';
|
|
||||||
|
|
||||||
type Config = {
|
type Config = {
|
||||||
port: number;
|
port: number;
|
||||||
@@ -26,7 +24,6 @@ export async function startBaseServer(config: Config): Promise<{
|
|||||||
server: http.Server;
|
server: http.Server;
|
||||||
socket: socketio.Server;
|
socket: socketio.Server;
|
||||||
}> {
|
}> {
|
||||||
checkDevServer();
|
|
||||||
const {app, server} = await startAssetServer(config);
|
const {app, server} = await startAssetServer(config);
|
||||||
const socket = addWebsocket(server);
|
const socket = addWebsocket(server);
|
||||||
return {
|
return {
|
||||||
@@ -67,24 +64,3 @@ function addWebsocket(server: http.Server) {
|
|||||||
const io = new socketio.Server(server);
|
const io = new socketio.Server(server);
|
||||||
return io;
|
return io;
|
||||||
}
|
}
|
||||||
|
|
||||||
function looksLikeDevServer(): boolean {
|
|
||||||
const hn = hostname();
|
|
||||||
if (/^devvm.*\.facebook\.com$/.test(hn)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (hn.endsWith('.od.fbinfra.net')) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkDevServer() {
|
|
||||||
if (looksLikeDevServer()) {
|
|
||||||
console.log(
|
|
||||||
chalk.red(
|
|
||||||
`✖ It looks like you're trying to start Flipper on your OnDemand or DevServer, which is not supported. Please run this in a local checkout on your laptop or desktop instead.`,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export async function startFlipperServer(
|
|||||||
// which are signed using some internal self-issued FB certificates. These certificates
|
// which are signed using some internal self-issued FB certificates. These certificates
|
||||||
// are automatically installed to MacOS system store on FB machines, so here we're using
|
// are automatically installed to MacOS system store on FB machines, so here we're using
|
||||||
// this "mac-ca" library to load them into Node.JS.
|
// this "mac-ca" library to load them into Node.JS.
|
||||||
require('mac-ca');
|
electronRequire('mac-ca');
|
||||||
}
|
}
|
||||||
|
|
||||||
const execPath = process.execPath;
|
const execPath = process.execPath;
|
||||||
@@ -57,11 +57,13 @@ export async function startFlipperServer(
|
|||||||
let keytar: any = undefined;
|
let keytar: any = undefined;
|
||||||
try {
|
try {
|
||||||
if (!isTest()) {
|
if (!isTest()) {
|
||||||
keytar = require(path.join(
|
keytar = electronRequire(
|
||||||
staticPath,
|
path.join(
|
||||||
'native-modules',
|
staticPath,
|
||||||
`keytar-${process.platform}.node`,
|
'native-modules',
|
||||||
));
|
`keytar-${process.platform}.node`,
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to load keytar:', e);
|
console.error('Failed to load keytar:', e);
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ async function startMetroServer(
|
|||||||
const babelTransformationsDir = path.resolve(
|
const babelTransformationsDir = path.resolve(
|
||||||
rootDir,
|
rootDir,
|
||||||
'babel-transformer',
|
'babel-transformer',
|
||||||
'src',
|
'lib', // Note: required pre-compiled!
|
||||||
);
|
);
|
||||||
const watchFolders = await dedupeFolders(
|
const watchFolders = await dedupeFolders(
|
||||||
(
|
(
|
||||||
@@ -143,9 +143,6 @@ async function startMetroServer(
|
|||||||
type: 'empty',
|
type: 'empty',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
// if (moduleName.includes('pluginPaths')) {
|
|
||||||
// console.error('got ' + moduleName, rest);
|
|
||||||
// }
|
|
||||||
return MetroResolver.resolve(
|
return MetroResolver.resolve(
|
||||||
{
|
{
|
||||||
...context,
|
...context,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"outDir": "lib",
|
"outDir": "lib",
|
||||||
"rootDir": "src"
|
"rootDir": "src"
|
||||||
},
|
},
|
||||||
|
"include": ["./src/*"],
|
||||||
"references": [
|
"references": [
|
||||||
{
|
{
|
||||||
"path": "../flipper-common"
|
"path": "../flipper-common"
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ export function initializeRenderHost(
|
|||||||
hasFocus() {
|
hasFocus() {
|
||||||
return document.hasFocus();
|
return document.hasFocus();
|
||||||
},
|
},
|
||||||
onIpcEvent(event) {
|
onIpcEvent(_event) {
|
||||||
console.warn('onIpcEvent not available', event);
|
// no-op
|
||||||
},
|
},
|
||||||
sendIpcEvent(event, ..._args: any[]) {
|
sendIpcEvent(_event, ..._args: any[]) {
|
||||||
console.warn('sendIpcEvent not available', event);
|
// no-op
|
||||||
},
|
},
|
||||||
shouldUseDarkColors() {
|
shouldUseDarkColors() {
|
||||||
return !!(
|
return !!(
|
||||||
|
|||||||
@@ -230,7 +230,10 @@
|
|||||||
"build:tsc": "tsc -b tsc-root/tsconfig.json && ./ts-node ./scripts/compute-package-checksum.ts -d ./babel-transformer -o ./lib/checksum.txt",
|
"build:tsc": "tsc -b tsc-root/tsconfig.json && ./ts-node ./scripts/compute-package-checksum.ts -d ./babel-transformer -o ./lib/checksum.txt",
|
||||||
"bump-versions": "./ts-node scripts/bump-versions.ts",
|
"bump-versions": "./ts-node scripts/bump-versions.ts",
|
||||||
"bundle-all-plugins": "./ts-node scripts/bundle-all-plugins.ts",
|
"bundle-all-plugins": "./ts-node scripts/bundle-all-plugins.ts",
|
||||||
|
"predev-server": "yarn build:tsc",
|
||||||
"dev-server": "cross-env NODE_ENV=development ./ts-node scripts/start-dev-server.ts",
|
"dev-server": "cross-env NODE_ENV=development ./ts-node scripts/start-dev-server.ts",
|
||||||
|
"preflipper-server": "yarn build:tsc",
|
||||||
|
"flipper-server": "cross-env NODE_ENV=development ./ts-node scripts/start-flipper-server.ts",
|
||||||
"fix": "eslint . --fix --ext .js,.ts,.tsx",
|
"fix": "eslint . --fix --ext .js,.ts,.tsx",
|
||||||
"lint": "yarn lint:eslint && yarn lint:tsc && yarn tsc-plugins",
|
"lint": "yarn lint:eslint && yarn lint:tsc && yarn tsc-plugins",
|
||||||
"lint:eslint": "eslint . --ext .js,.ts,.tsx",
|
"lint:eslint": "eslint . --ext .js,.ts,.tsx",
|
||||||
@@ -239,7 +242,6 @@
|
|||||||
"open-dist": "open ../dist/mac/Flipper.app --args --launcher=false --inspect=9229",
|
"open-dist": "open ../dist/mac/Flipper.app --args --launcher=false --inspect=9229",
|
||||||
"postinstall": "patch-package && ./ts-node scripts/gen-type-index.ts && yarn --cwd plugins install --mutex network:30331 && yarn build:tsc && ./ts-node scripts/generate-plugin-entry-points.ts && yarn build:themes",
|
"postinstall": "patch-package && ./ts-node scripts/gen-type-index.ts && yarn --cwd plugins install --mutex network:30331 && yarn build:tsc && ./ts-node scripts/generate-plugin-entry-points.ts && yarn build:themes",
|
||||||
"prebuild": "yarn build:tsc && yarn rm-dist && yarn build:themes",
|
"prebuild": "yarn build:tsc && yarn rm-dist && yarn build:themes",
|
||||||
"predev-server": "yarn build:tsc",
|
|
||||||
"preinstall": "node scripts/prepare-watchman-config.js && yarn config set ignore-engines",
|
"preinstall": "node scripts/prepare-watchman-config.js && yarn config set ignore-engines",
|
||||||
"prelint:eslint": "yarn build:eslint",
|
"prelint:eslint": "yarn build:eslint",
|
||||||
"pretest": "yarn build:tsc",
|
"pretest": "yarn build:tsc",
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ import {
|
|||||||
staticDir,
|
staticDir,
|
||||||
defaultPluginsDir,
|
defaultPluginsDir,
|
||||||
babelTransformationsDir,
|
babelTransformationsDir,
|
||||||
|
serverDir,
|
||||||
|
rootDir,
|
||||||
} from './paths';
|
} from './paths';
|
||||||
|
|
||||||
const {version} = require('../package.json');
|
const {version} = require('../package.json');
|
||||||
@@ -343,3 +345,39 @@ export function genMercurialRevision(): Promise<string | null> {
|
|||||||
)
|
)
|
||||||
.catch(() => null);
|
.catch(() => null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function compileServerMain() {
|
||||||
|
await fs.promises.mkdir(path.join(serverDir, 'dist'), {recursive: true});
|
||||||
|
const out = path.join(serverDir, 'dist', 'index.js');
|
||||||
|
console.log('⚙️ Compiling server bundle...');
|
||||||
|
const config = Object.assign({}, await Metro.loadConfig(), {
|
||||||
|
reporter: {update: () => {}},
|
||||||
|
projectRoot: rootDir,
|
||||||
|
transformer: {
|
||||||
|
babelTransformerPath: path.join(
|
||||||
|
babelTransformationsDir,
|
||||||
|
'transform-server',
|
||||||
|
),
|
||||||
|
...minifierConfig,
|
||||||
|
},
|
||||||
|
resolver: {
|
||||||
|
sourceExts: ['tsx', 'ts', 'js', 'json'],
|
||||||
|
resolverMainFields: ['flipperBundlerEntry', 'module', 'main'],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await Metro.runBuild(config, {
|
||||||
|
platform: 'node',
|
||||||
|
entry: path.join(serverDir, 'src', 'index.tsx'),
|
||||||
|
out,
|
||||||
|
dev,
|
||||||
|
minify: !dev,
|
||||||
|
sourceMap: true,
|
||||||
|
sourceMapUrl: dev ? 'index.map' : undefined,
|
||||||
|
inlineSourceMap: false,
|
||||||
|
resetCache: !dev,
|
||||||
|
});
|
||||||
|
console.log('✅ Compiled server bundle.');
|
||||||
|
if (!dev) {
|
||||||
|
stripSourceMapComment(out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import path from 'path';
|
|||||||
export const rootDir = path.resolve(__dirname, '..');
|
export const rootDir = path.resolve(__dirname, '..');
|
||||||
export const appDir = path.join(rootDir, 'app');
|
export const appDir = path.join(rootDir, 'app');
|
||||||
export const staticDir = path.join(rootDir, 'static');
|
export const staticDir = path.join(rootDir, 'static');
|
||||||
|
export const serverDir = path.join(rootDir, 'flipper-server');
|
||||||
export const defaultPluginsDir = path.join(staticDir, 'defaultPlugins');
|
export const defaultPluginsDir = path.join(staticDir, 'defaultPlugins');
|
||||||
export const pluginsDir = path.join(rootDir, 'plugins');
|
export const pluginsDir = path.join(rootDir, 'plugins');
|
||||||
export const fbPluginsDir = path.join(pluginsDir, 'fb');
|
export const fbPluginsDir = path.join(pluginsDir, 'fb');
|
||||||
|
|||||||
178
desktop/scripts/start-flipper-server.ts
Normal file
178
desktop/scripts/start-flipper-server.ts
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
* @format
|
||||||
|
*/
|
||||||
|
|
||||||
|
import child from 'child_process';
|
||||||
|
import chalk from 'chalk';
|
||||||
|
import path from 'path';
|
||||||
|
import {compileServerMain} from './build-utils';
|
||||||
|
import Watchman from './watchman';
|
||||||
|
import {serverDir} from './paths';
|
||||||
|
import isFB from './isFB';
|
||||||
|
import yargs from 'yargs';
|
||||||
|
|
||||||
|
const argv = yargs
|
||||||
|
.usage('yarn start [args]')
|
||||||
|
.options({
|
||||||
|
'default-plugins': {
|
||||||
|
describe:
|
||||||
|
'Enables embedding of default plugins into Flipper package so they are always available. The flag is enabled by default. Env var FLIPPER_NO_DEFAULT_PLUGINS is equivalent to the command-line option "--no-default-plugins".',
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
'bundled-plugins': {
|
||||||
|
describe:
|
||||||
|
'Enables bundling of plugins into Flipper bundle. This is useful for debugging, because it makes Flipper dev mode loading faster and unblocks fast refresh. The flag is enabled by default. Env var FLIPPER_NO_BUNDLEDD_PLUGINS is equivalent to the command-line option "--no-bundled-plugins".',
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
'rebuild-plugins': {
|
||||||
|
describe:
|
||||||
|
'Enables rebuilding of default plugins on Flipper build. Only make sense in conjunction with "--no-bundled-plugins". Enabled by default, but if disabled using "--no-plugin-rebuild", then plugins are just released as is without rebuilding. This can save some time if you know plugin bundles are already up-to-date.',
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
'plugin-marketplace': {
|
||||||
|
describe:
|
||||||
|
'Enable plugin marketplace - ability to install plugins from NPM or other sources. Without the flag Flipper will only show default plugins. The flag is disabled by default in dev mode. Env var FLIPPER_NO_PLUGIN_MARKETPLACE is equivalent to the command-line option "--no-plugin-marketplace"',
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
'plugin-auto-update-interval': {
|
||||||
|
describe:
|
||||||
|
'[FB-internal only] Set custom interval in milliseconds for plugin auto-update checks. Env var FLIPPER_PLUGIN_AUTO_UPDATE_POLLING_INTERVAL is equivalent to this command-line option.',
|
||||||
|
type: 'number',
|
||||||
|
},
|
||||||
|
'enabled-plugins': {
|
||||||
|
describe:
|
||||||
|
'Load only specified plugins and skip loading rest. This is useful when you are developing only one or few plugins. Plugins to load can be specified as a comma-separated list with either plugin id or name used as identifier, e.g. "--enabled-plugins network,inspector". The flag is not provided by default which means that all plugins loaded.',
|
||||||
|
type: 'array',
|
||||||
|
},
|
||||||
|
'public-build': {
|
||||||
|
describe:
|
||||||
|
'[FB-internal only] Will force using public sources only, to be able to iterate quickly on the public version. If sources are checked out from GitHub this is already the default. Setting env var "FLIPPER_FORCE_PUBLIC_BUILD" is equivalent.',
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.version('DEV')
|
||||||
|
.help()
|
||||||
|
.parse(process.argv.slice(1));
|
||||||
|
|
||||||
|
if (isFB) {
|
||||||
|
process.env.FLIPPER_FB = 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv['default-plugins'] === true) {
|
||||||
|
delete process.env.FLIPPER_NO_DEFAULT_PLUGINS;
|
||||||
|
} else if (argv['default-plugins'] === false) {
|
||||||
|
process.env.FLIPPER_NO_DEFAULT_PLUGINS = 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv['bundled-plugins'] === true) {
|
||||||
|
delete process.env.FLIPPER_NO_BUNDLED_PLUGINS;
|
||||||
|
} else if (argv['bundled-plugins'] === false) {
|
||||||
|
process.env.FLIPPER_NO_BUNDLED_PLUGINS = 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv['rebuild-plugins'] === false) {
|
||||||
|
process.env.FLIPPER_NO_REBUILD_PLUGINS = 'true';
|
||||||
|
} else if (argv['rebuild-plugins'] === true) {
|
||||||
|
delete process.env.FLIPPER_NO_REBUILD_PLUGINS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv['public-build'] === true) {
|
||||||
|
// we use a separate env var for forced_public builds, since
|
||||||
|
// FB_FLIPPER / isFB reflects whether we are running on FB sources / infra
|
||||||
|
// so changing that will not give the desired result (e.g. incorrect resolve paths, yarn installs)
|
||||||
|
// this variable purely overrides whether imports are from `fb` or `fb-stubs`
|
||||||
|
console.log('🐬 Emulating open source build of Flipper');
|
||||||
|
process.env.FLIPPER_FORCE_PUBLIC_BUILD = 'true';
|
||||||
|
} else if (argv['public-build'] === false) {
|
||||||
|
delete process.env.FLIPPER_FORCE_PUBLIC_BUILD;
|
||||||
|
}
|
||||||
|
|
||||||
|
// By default plugin marketplace is disabled in dev mode,
|
||||||
|
// but it is possible to enable it using this command line
|
||||||
|
// argument or env var.
|
||||||
|
if (argv['plugin-marketplace'] === true) {
|
||||||
|
delete process.env.FLIPPER_NO_PLUGIN_MARKETPLACE;
|
||||||
|
} else {
|
||||||
|
process.env.FLIPPER_NO_PLUGIN_MARKETPLACE = 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv['plugin-auto-update-interval']) {
|
||||||
|
process.env.FLIPPER_PLUGIN_AUTO_UPDATE_POLLING_INTERVAL = `${argv['plugin-auto-update-interval']}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv['enabled-plugins'] !== undefined) {
|
||||||
|
process.env.FLIPPER_ENABLED_PLUGINS = argv['enabled-plugins'].join(',');
|
||||||
|
}
|
||||||
|
|
||||||
|
let proc: child.ChildProcess | undefined;
|
||||||
|
|
||||||
|
function launchServer() {
|
||||||
|
console.log('⚙️ Launching flipper-server...');
|
||||||
|
proc = child.spawn('node', [`../flipper-server/server.js`], {
|
||||||
|
cwd: serverDir,
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
},
|
||||||
|
stdio: 'inherit',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function restartServer() {
|
||||||
|
proc?.kill(9);
|
||||||
|
try {
|
||||||
|
await compileServerMain();
|
||||||
|
await launchServer();
|
||||||
|
} catch (e) {
|
||||||
|
console.error(
|
||||||
|
chalk.red(
|
||||||
|
'Failed to compile or launch server, waiting for additional changes...',
|
||||||
|
),
|
||||||
|
e,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function startWatchChanges() {
|
||||||
|
try {
|
||||||
|
const watchman = new Watchman(path.resolve(__dirname, '..'));
|
||||||
|
await watchman.initialize();
|
||||||
|
await Promise.all(
|
||||||
|
[
|
||||||
|
'pkg',
|
||||||
|
'doctor',
|
||||||
|
'plugin-lib',
|
||||||
|
'flipper-server',
|
||||||
|
'flipper-common',
|
||||||
|
'flipper-server-core',
|
||||||
|
].map((dir) =>
|
||||||
|
watchman.startWatchFiles(
|
||||||
|
dir,
|
||||||
|
() => {
|
||||||
|
restartServer();
|
||||||
|
},
|
||||||
|
{
|
||||||
|
excludes: [
|
||||||
|
'**/__tests__/**/*',
|
||||||
|
'**/node_modules/**/*',
|
||||||
|
'**/.*',
|
||||||
|
'**/lib/**/*',
|
||||||
|
'**/dist/**/*',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to start watching for changes using Watchman', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
await startWatchChanges();
|
||||||
|
restartServer();
|
||||||
|
})();
|
||||||
@@ -3339,11 +3339,6 @@ abab@^2.0.3, abab@^2.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
|
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
|
||||||
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
|
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
|
||||||
|
|
||||||
abbrev@1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
|
||||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
|
||||||
|
|
||||||
abort-controller@^3.0.0:
|
abort-controller@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
||||||
@@ -3641,14 +3636,6 @@ anymatch@^3.0.3:
|
|||||||
normalize-path "^3.0.0"
|
normalize-path "^3.0.0"
|
||||||
picomatch "^2.0.4"
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
anymatch@~3.1.2:
|
|
||||||
version "3.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
|
||||||
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
|
|
||||||
dependencies:
|
|
||||||
normalize-path "^3.0.0"
|
|
||||||
picomatch "^2.0.4"
|
|
||||||
|
|
||||||
app-builder-bin@3.5.13:
|
app-builder-bin@3.5.13:
|
||||||
version "3.5.13"
|
version "3.5.13"
|
||||||
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e"
|
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e"
|
||||||
@@ -4240,11 +4227,6 @@ base@^0.11.1:
|
|||||||
mixin-deep "^1.2.0"
|
mixin-deep "^1.2.0"
|
||||||
pascalcase "^0.1.1"
|
pascalcase "^0.1.1"
|
||||||
|
|
||||||
binary-extensions@^2.0.0:
|
|
||||||
version "2.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
|
||||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
|
||||||
|
|
||||||
bl@^1.0.0, bl@^4.0.3, bl@^4.1.0, bl@^5.0.0:
|
bl@^1.0.0, bl@^4.0.3, bl@^4.1.0, bl@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2"
|
resolved "https://registry.yarnpkg.com/bl/-/bl-5.0.0.tgz#6928804a41e9da9034868e1c50ca88f21f57aea2"
|
||||||
@@ -4335,7 +4317,7 @@ braces@^2.3.1:
|
|||||||
split-string "^3.0.2"
|
split-string "^3.0.2"
|
||||||
to-regex "^3.0.1"
|
to-regex "^3.0.1"
|
||||||
|
|
||||||
braces@^3.0.1, braces@~3.0.2:
|
braces@^3.0.1:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||||
@@ -4645,21 +4627,6 @@ chardet@^0.7.0:
|
|||||||
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||||
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
||||||
|
|
||||||
chokidar@^3.5.2:
|
|
||||||
version "3.5.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
|
|
||||||
integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
|
|
||||||
dependencies:
|
|
||||||
anymatch "~3.1.2"
|
|
||||||
braces "~3.0.2"
|
|
||||||
glob-parent "~5.1.2"
|
|
||||||
is-binary-path "~2.1.0"
|
|
||||||
is-glob "~4.0.1"
|
|
||||||
normalize-path "~3.0.0"
|
|
||||||
readdirp "~3.6.0"
|
|
||||||
optionalDependencies:
|
|
||||||
fsevents "~2.3.2"
|
|
||||||
|
|
||||||
chownr@^1.1.1:
|
chownr@^1.1.1:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||||
@@ -6934,11 +6901,6 @@ fsevents@^2.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
|
||||||
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
|
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
|
||||||
|
|
||||||
fsevents@~2.3.2:
|
|
||||||
version "2.3.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
|
||||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
|
||||||
|
|
||||||
function-bind@^1.1.1:
|
function-bind@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||||
@@ -7020,7 +6982,7 @@ github-slugger@^1.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
emoji-regex ">=6.0.0 <=6.1.1"
|
emoji-regex ">=6.0.0 <=6.1.1"
|
||||||
|
|
||||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
glob-parent@^5.1.2:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||||
@@ -7399,11 +7361,6 @@ ieee754@^1.1.13, ieee754@^1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||||
|
|
||||||
ignore-by-default@^1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
|
||||||
integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
|
|
||||||
|
|
||||||
ignore-walk@^4.0.1:
|
ignore-walk@^4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3"
|
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3"
|
||||||
@@ -7600,13 +7557,6 @@ is-bigint@^1.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-bigints "^1.0.1"
|
has-bigints "^1.0.1"
|
||||||
|
|
||||||
is-binary-path@~2.1.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
|
||||||
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
|
||||||
dependencies:
|
|
||||||
binary-extensions "^2.0.0"
|
|
||||||
|
|
||||||
is-boolean-object@^1.1.0:
|
is-boolean-object@^1.1.0:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
|
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
|
||||||
@@ -7745,7 +7695,7 @@ is-generator-fn@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
|
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
|
||||||
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
|
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
|
||||||
|
|
||||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||||
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||||
@@ -9976,29 +9926,6 @@ node-releases@^2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
|
||||||
integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
|
integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
|
||||||
|
|
||||||
nodemon@^2.0.15:
|
|
||||||
version "2.0.15"
|
|
||||||
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.15.tgz#504516ce3b43d9dc9a955ccd9ec57550a31a8d4e"
|
|
||||||
integrity sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==
|
|
||||||
dependencies:
|
|
||||||
chokidar "^3.5.2"
|
|
||||||
debug "^3.2.7"
|
|
||||||
ignore-by-default "^1.0.1"
|
|
||||||
minimatch "^3.0.4"
|
|
||||||
pstree.remy "^1.1.8"
|
|
||||||
semver "^5.7.1"
|
|
||||||
supports-color "^5.5.0"
|
|
||||||
touch "^3.1.0"
|
|
||||||
undefsafe "^2.0.5"
|
|
||||||
update-notifier "^5.1.0"
|
|
||||||
|
|
||||||
nopt@~1.0.10:
|
|
||||||
version "1.0.10"
|
|
||||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
|
|
||||||
integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
|
|
||||||
dependencies:
|
|
||||||
abbrev "1"
|
|
||||||
|
|
||||||
normalize-package-data@^2.5.0:
|
normalize-package-data@^2.5.0:
|
||||||
version "2.5.0"
|
version "2.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||||
@@ -10026,7 +9953,7 @@ normalize-path@^2.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
remove-trailing-separator "^1.0.1"
|
remove-trailing-separator "^1.0.1"
|
||||||
|
|
||||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
normalize-path@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||||
@@ -10560,7 +10487,7 @@ picomatch@^2.0.4, picomatch@^2.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||||
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
|
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
|
||||||
|
|
||||||
picomatch@^2.2.1, picomatch@^2.2.3:
|
picomatch@^2.2.3:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
|
||||||
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
|
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
|
||||||
@@ -10798,11 +10725,6 @@ psl@^1.1.33:
|
|||||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||||
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
||||||
|
|
||||||
pstree.remy@^1.1.8:
|
|
||||||
version "1.1.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
|
|
||||||
integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
|
|
||||||
|
|
||||||
pump@^3.0.0:
|
pump@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||||
@@ -11579,13 +11501,6 @@ readdir-glob@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
readdirp@~3.6.0:
|
|
||||||
version "3.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
|
||||||
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
|
||||||
dependencies:
|
|
||||||
picomatch "^2.2.1"
|
|
||||||
|
|
||||||
realpath-native@^2.0.0:
|
realpath-native@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
|
resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
|
||||||
@@ -12111,7 +12026,7 @@ semver-diff@^3.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
|
|
||||||
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
|
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
|
||||||
version "5.7.1"
|
version "5.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||||
@@ -12743,7 +12658,7 @@ sumchecker@^3.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
debug "^4.1.0"
|
debug "^4.1.0"
|
||||||
|
|
||||||
supports-color@^5.3.0, supports-color@^5.5.0:
|
supports-color@^5.3.0:
|
||||||
version "5.5.0"
|
version "5.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||||
@@ -13006,13 +12921,6 @@ toidentifier@1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
|
||||||
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
|
||||||
|
|
||||||
touch@^3.1.0:
|
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
|
|
||||||
integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
|
|
||||||
dependencies:
|
|
||||||
nopt "~1.0.10"
|
|
||||||
|
|
||||||
tough-cookie@^4.0.0:
|
tough-cookie@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
|
||||||
@@ -13248,11 +13156,6 @@ unbzip2-stream@^1.0.9:
|
|||||||
buffer "^5.2.1"
|
buffer "^5.2.1"
|
||||||
through "^2.3.8"
|
through "^2.3.8"
|
||||||
|
|
||||||
undefsafe@^2.0.5:
|
|
||||||
version "2.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
|
|
||||||
integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
|
|
||||||
|
|
||||||
unicode-canonical-property-names-ecmascript@^1.0.4:
|
unicode-canonical-property-names-ecmascript@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
|
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
|
||||||
|
|||||||
Reference in New Issue
Block a user