@joystick.js/cli-canary 0.0.0-canary.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.build/getFilesToBuild.js +38 -0
- package/.build/index.js +69 -0
- package/HMRNOTES.txt +23 -0
- package/README.md +7 -0
- package/_package.json +55 -0
- package/canary.js +12 -0
- package/dist/cli.js +69 -0
- package/dist/functions/build/getTarIgnoreList.js +25 -0
- package/dist/functions/build/index.js +54 -0
- package/dist/functions/create/buildPackageJSON.js +20 -0
- package/dist/functions/create/index.js +193 -0
- package/dist/functions/create/templates/api/index.js +4 -0
- package/dist/functions/create/templates/i18n/en-US.js +4 -0
- package/dist/functions/create/templates/index.client.js +7 -0
- package/dist/functions/create/templates/index.css +20 -0
- package/dist/functions/create/templates/index.html +23 -0
- package/dist/functions/create/templates/index.server.js +21 -0
- package/dist/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
- package/dist/functions/create/templates/public/favicon.ico +0 -0
- package/dist/functions/create/templates/public/manifest.json +25 -0
- package/dist/functions/create/templates/public/service-worker.js +32 -0
- package/dist/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
- package/dist/functions/create/templates/settings.development.json +27 -0
- package/dist/functions/create/templates/ui/components/button/index.js +50 -0
- package/dist/functions/create/templates/ui/layouts/app/index.js +13 -0
- package/dist/functions/create/templates/ui/pages/error/index.js +31 -0
- package/dist/functions/create/templates/ui/pages/index/index.js +94 -0
- package/dist/functions/index.js +243 -0
- package/dist/functions/logout/index.js +20 -0
- package/dist/functions/push/checkIfProvisionAvailable.js +19 -0
- package/dist/functions/push/deploy/index.js +173 -0
- package/dist/functions/push/deploy/initial.js +100 -0
- package/dist/functions/push/deploy/version.js +100 -0
- package/dist/functions/push/domains.js +23 -0
- package/dist/functions/push/getAvailableCDN.js +23 -0
- package/dist/functions/push/getDeployment.js +41 -0
- package/dist/functions/push/getDeploymentSummary.js +38 -0
- package/dist/functions/push/getInstanceSizeRegions.js +37 -0
- package/dist/functions/push/getInstanceSizesForRegion.js +34 -0
- package/dist/functions/push/getProviderInstanceSizes.js +34 -0
- package/dist/functions/push/getProviderRegions.js +36 -0
- package/dist/functions/push/getProvidersWithConnectionStatus.js +20 -0
- package/dist/functions/push/getSessionToken.js +23 -0
- package/dist/functions/push/getUserFromSessionToken.js +37 -0
- package/dist/functions/push/index.js +210 -0
- package/dist/functions/push/loginToCheatCode.js +33 -0
- package/dist/functions/push/pingProvisionAPI.js +31 -0
- package/dist/functions/push/prompts.js +332 -0
- package/dist/functions/push/providerMap.js +11 -0
- package/dist/functions/push/providers.js +9 -0
- package/dist/functions/reset/index.js +0 -0
- package/dist/functions/reset/reset.js +127 -0
- package/dist/functions/start/bootstrapLayoutComponent.js +54 -0
- package/dist/functions/start/bootstrapPageComponent.js +51 -0
- package/dist/functions/start/buildFile.js +85 -0
- package/dist/functions/start/buildFiles.js +76 -0
- package/dist/functions/start/buildPlugins.js +183 -0
- package/dist/functions/start/checkIfPortAvailable.js +18 -0
- package/dist/functions/start/cleanup/index.js +18 -0
- package/dist/functions/start/databases/mongodb/availableQueryParameters.js +42 -0
- package/dist/functions/start/databases/mongodb/buildConnectionString.js +22 -0
- package/dist/functions/start/databases/mongodb/buildQueryParameters.js +14 -0
- package/dist/functions/start/databases/mongodb/checkConnection.js +38 -0
- package/dist/functions/start/databases/mongodb/connect.js +25 -0
- package/dist/functions/start/databases/mongodb/index.js +93 -0
- package/dist/functions/start/databases/postgresql/checkConnection.js +41 -0
- package/dist/functions/start/databases/postgresql/connect.js +27 -0
- package/dist/functions/start/databases/postgresql/index.js +106 -0
- package/dist/functions/start/databases/redis.js +0 -0
- package/dist/functions/start/databases/startProvider.js +16 -0
- package/dist/functions/start/fileDependencyMapper.js +22 -0
- package/dist/functions/start/filesToCopy.js +18 -0
- package/dist/functions/start/generateId.js +74 -0
- package/dist/functions/start/getCodependenciesForFile.js +64 -0
- package/dist/functions/start/getFilesToBuild.js +39 -0
- package/dist/functions/start/getProcessIdFromPort.js +60 -0
- package/dist/functions/start/hmrServer.js +66 -0
- package/dist/functions/start/index.js +535 -0
- package/dist/functions/start/isWindows.js +5 -0
- package/dist/functions/start/minifyFile.js +12 -0
- package/dist/functions/start/onWarn.js +63 -0
- package/dist/functions/start/readFileDependencyMap.js +16 -0
- package/dist/functions/start/removeDeletedDependenciesFromMap.js +18 -0
- package/dist/functions/start/setComponentId.js +46 -0
- package/dist/functions/start/updateFileMap.js +67 -0
- package/dist/functions/update/index.js +21 -0
- package/dist/functions/use/index.js +61 -0
- package/dist/index.js +8 -0
- package/dist/lib/CLILog.js +49 -0
- package/dist/lib/buildResolvePlugin.js +21 -0
- package/dist/lib/checkIfValidJSON.js +11 -0
- package/dist/lib/colorLog.js +7 -0
- package/dist/lib/getArgs.js +14 -0
- package/dist/lib/getCodeFrame.js +10 -0
- package/dist/lib/getOptions.js +15 -0
- package/dist/lib/getPlatformSafePath.js +7 -0
- package/dist/lib/getProvider.js +8 -0
- package/dist/lib/help.js +56 -0
- package/dist/lib/isObject.js +6 -0
- package/dist/lib/isValidJSONString.js +11 -0
- package/dist/lib/isWindows.js +5 -0
- package/dist/lib/killProcesses.js +0 -0
- package/dist/lib/loadSettings.js +33 -0
- package/dist/lib/loader.js +82 -0
- package/dist/lib/masterIgnoreList.js +16 -0
- package/dist/lib/nodeEnvironment.js +9 -0
- package/dist/lib/nodeEnvironments.js +8 -0
- package/dist/lib/parseCookiesFromLogin.js +18 -0
- package/dist/lib/rainbowRoad.js +7 -0
- package/dist/lib/readDirectorySync.js +14 -0
- package/dist/lib/regexes.js +12 -0
- package/dist/lib/replaceBackslashesWithForwardSlashes.js +8 -0
- package/dist/lib/replaceFileProtocol.js +8 -0
- package/dist/lib/serializeQueryParameters.js +8 -0
- package/dist/lib/settings.js +4 -0
- package/dist/lib/validateDatabasesFromSettings.js +34 -0
- package/dist/lib/wait.js +8 -0
- package/package.json +54 -0
- package/release.js +40 -0
- package/src/cli.js +88 -0
- package/src/functions/build/getTarIgnoreList.js +30 -0
- package/src/functions/build/index.js +63 -0
- package/src/functions/create/buildPackageJSON.js +18 -0
- package/src/functions/create/index.js +209 -0
- package/src/functions/create/templates/api/index.js +4 -0
- package/src/functions/create/templates/i18n/en-US.js +4 -0
- package/src/functions/create/templates/index.client.js +7 -0
- package/src/functions/create/templates/index.css +20 -0
- package/src/functions/create/templates/index.html +23 -0
- package/src/functions/create/templates/index.server.js +21 -0
- package/src/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
- package/src/functions/create/templates/public/favicon.ico +0 -0
- package/src/functions/create/templates/public/manifest.json +25 -0
- package/src/functions/create/templates/public/service-worker.js +32 -0
- package/src/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
- package/src/functions/create/templates/settings.development.json +27 -0
- package/src/functions/create/templates/ui/components/button/index.js +50 -0
- package/src/functions/create/templates/ui/layouts/app/index.js +13 -0
- package/src/functions/create/templates/ui/pages/error/index.js +31 -0
- package/src/functions/create/templates/ui/pages/index/index.js +94 -0
- package/src/functions/index.js +243 -0
- package/src/functions/logout/index.js +20 -0
- package/src/functions/push/checkIfProvisionAvailable.js +20 -0
- package/src/functions/push/deploy/index.js +199 -0
- package/src/functions/push/deploy/initial.js +108 -0
- package/src/functions/push/deploy/version.js +108 -0
- package/src/functions/push/domains.js +23 -0
- package/src/functions/push/getAvailableCDN.js +27 -0
- package/src/functions/push/getDeployment.js +43 -0
- package/src/functions/push/getDeploymentSummary.js +39 -0
- package/src/functions/push/getInstanceSizeRegions.js +40 -0
- package/src/functions/push/getInstanceSizesForRegion.js +35 -0
- package/src/functions/push/getProviderInstanceSizes.js +35 -0
- package/src/functions/push/getProviderRegions.js +39 -0
- package/src/functions/push/getProvidersWithConnectionStatus.js +25 -0
- package/src/functions/push/getSessionToken.js +26 -0
- package/src/functions/push/getUserFromSessionToken.js +39 -0
- package/src/functions/push/index.js +245 -0
- package/src/functions/push/loginToCheatCode.js +34 -0
- package/src/functions/push/pingProvisionAPI.js +33 -0
- package/src/functions/push/prompts.js +276 -0
- package/src/functions/push/providerMap.js +8 -0
- package/src/functions/push/providers.js +6 -0
- package/src/functions/reset/index.js +0 -0
- package/src/functions/reset/reset.js +163 -0
- package/src/functions/start/bootstrapLayoutComponent.js +57 -0
- package/src/functions/start/bootstrapPageComponent.js +54 -0
- package/src/functions/start/buildFile.js +97 -0
- package/src/functions/start/buildFiles.js +101 -0
- package/src/functions/start/buildPlugins.js +215 -0
- package/src/functions/start/checkIfPortAvailable.js +21 -0
- package/src/functions/start/cleanup/index.js +23 -0
- package/src/functions/start/databases/mongodb/availableQueryParameters.js +39 -0
- package/src/functions/start/databases/mongodb/buildConnectionString.js +28 -0
- package/src/functions/start/databases/mongodb/buildQueryParameters.js +15 -0
- package/src/functions/start/databases/mongodb/checkConnection.js +40 -0
- package/src/functions/start/databases/mongodb/connect.js +25 -0
- package/src/functions/start/databases/mongodb/index.js +108 -0
- package/src/functions/start/databases/postgresql/checkConnection.js +43 -0
- package/src/functions/start/databases/postgresql/connect.js +27 -0
- package/src/functions/start/databases/postgresql/index.js +127 -0
- package/src/functions/start/databases/redis.js +0 -0
- package/src/functions/start/databases/startProvider.js +15 -0
- package/src/functions/start/fileDependencyMapper.js +24 -0
- package/src/functions/start/filesToCopy.js +15 -0
- package/src/functions/start/generateId.js +73 -0
- package/src/functions/start/getCodependenciesForFile.js +84 -0
- package/src/functions/start/getFilesToBuild.js +49 -0
- package/src/functions/start/getProcessIdFromPort.js +92 -0
- package/src/functions/start/hmrServer.js +78 -0
- package/src/functions/start/index.js +688 -0
- package/src/functions/start/isWindows.js +3 -0
- package/src/functions/start/minifyFile.js +10 -0
- package/src/functions/start/onWarn.js +68 -0
- package/src/functions/start/readFileDependencyMap.js +19 -0
- package/src/functions/start/removeDeletedDependenciesFromMap.js +19 -0
- package/src/functions/start/setComponentId.js +58 -0
- package/src/functions/start/updateFileMap.js +100 -0
- package/src/functions/update/index.js +20 -0
- package/src/functions/use/index.js +62 -0
- package/src/index.js +13 -0
- package/src/lib/CLILog.js +40 -0
- package/src/lib/buildResolvePlugin.js +32 -0
- package/src/lib/checkIfValidJSON.js +8 -0
- package/src/lib/colorLog.js +5 -0
- package/src/lib/getArgs.js +14 -0
- package/src/lib/getCodeFrame.js +8 -0
- package/src/lib/getOptions.js +12 -0
- package/src/lib/getPlatformSafePath.js +6 -0
- package/src/lib/getProvider.js +5 -0
- package/src/lib/help.js +56 -0
- package/src/lib/isObject.js +3 -0
- package/src/lib/isValidJSONString.js +8 -0
- package/src/lib/isWindows.js +3 -0
- package/src/lib/killProcesses.js +5 -0
- package/src/lib/loadSettings.js +40 -0
- package/src/lib/loader.js +94 -0
- package/src/lib/masterIgnoreList.js +13 -0
- package/src/lib/nodeEnvironment.js +6 -0
- package/src/lib/nodeEnvironments.js +8 -0
- package/src/lib/parseCookiesFromLogin.js +21 -0
- package/src/lib/rainbowRoad.js +5 -0
- package/src/lib/readDirectorySync.js +13 -0
- package/src/lib/regexes.js +5 -0
- package/src/lib/replaceBackslashesWithForwardSlashes.js +8 -0
- package/src/lib/replaceFileProtocol.js +8 -0
- package/src/lib/serializeQueryParameters.js +5 -0
- package/src/lib/settings.js +1 -0
- package/src/lib/validateDatabasesFromSettings.js +37 -0
- package/src/lib/wait.js +5 -0
- package/storage/.verdaccio-db.json +1 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import readFileDependencyMap from "./readFileDependencyMap.js";
|
|
3
|
+
|
|
4
|
+
const findCodependenciesInMap = (pathVariations = [], map = {}) => {
|
|
5
|
+
return Object.entries(map)
|
|
6
|
+
.filter(([codependentPath, codependentDependencies]) => {
|
|
7
|
+
const hasMatchingImports =
|
|
8
|
+
codependentDependencies &&
|
|
9
|
+
codependentDependencies.imports &&
|
|
10
|
+
codependentDependencies.imports.some((codependentDependency) => {
|
|
11
|
+
return pathVariations.some((pathVariation) => {
|
|
12
|
+
return codependentDependency.path.includes(pathVariation);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const hasMatchingRequires =
|
|
17
|
+
codependentDependencies &&
|
|
18
|
+
codependentDependencies.requires &&
|
|
19
|
+
codependentDependencies.requires.some((codependentDependency) => {
|
|
20
|
+
return pathVariations.some((pathVariation) => {
|
|
21
|
+
return codependentDependency.path.includes(pathVariation);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return hasMatchingImports || hasMatchingRequires;
|
|
26
|
+
})
|
|
27
|
+
.map(([matchingCodependentPath]) => {
|
|
28
|
+
return matchingCodependentPath.replace(`${process.cwd()}/`, "");
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const getPathVariations = (path = "") => {
|
|
33
|
+
const pathParts = path.split("/");
|
|
34
|
+
const variations = [];
|
|
35
|
+
const lastPathPart = pathParts && pathParts[pathParts.length - 1];
|
|
36
|
+
|
|
37
|
+
pathParts.forEach((pathPart, pathPartIndex) => {
|
|
38
|
+
let base = `${pathPart}`;
|
|
39
|
+
|
|
40
|
+
variations.push(`/${pathPart}`);
|
|
41
|
+
|
|
42
|
+
pathParts.slice(pathPartIndex + 1, pathParts.length).forEach((part) => {
|
|
43
|
+
base = base += `/${part}`;
|
|
44
|
+
variations.push(base);
|
|
45
|
+
if (part.includes(".")) {
|
|
46
|
+
variations.push(base.split(".")[0]);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
if (lastPathPart?.includes('.')) {
|
|
52
|
+
variations.push(`./${lastPathPart}`);
|
|
53
|
+
variations.push(`./${lastPathPart?.split('.')[0]}`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
variations.push(`./${pathParts[0]}`);
|
|
57
|
+
variations.push(`./${pathParts[0]}/index`);
|
|
58
|
+
variations.push(`./${pathParts[0]}/index.js`);
|
|
59
|
+
|
|
60
|
+
// TODO: This may wreak havoc eventually, but going to let it slide
|
|
61
|
+
// for now.
|
|
62
|
+
variations.push(`/index`);
|
|
63
|
+
variations.push(`/index.js`);
|
|
64
|
+
|
|
65
|
+
return variations;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default (pathToFind = "") => {
|
|
69
|
+
const pathVariations = getPathVariations(pathToFind);
|
|
70
|
+
const fileDependencyMap = readFileDependencyMap();
|
|
71
|
+
const codpendencies = findCodependenciesInMap(
|
|
72
|
+
pathVariations,
|
|
73
|
+
fileDependencyMap
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
existing: codpendencies.filter((codependency) => {
|
|
78
|
+
return !!fs.existsSync(codependency);
|
|
79
|
+
}),
|
|
80
|
+
deleted: codpendencies.filter((codependency) => {
|
|
81
|
+
return !fs.existsSync(codependency);
|
|
82
|
+
}),
|
|
83
|
+
};
|
|
84
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import masterIgnoreList from "../../lib/masterIgnoreList.js";
|
|
4
|
+
|
|
5
|
+
const getFileListFromPath = (directoryPath = '', files = []) => {
|
|
6
|
+
const filesInDirectory = fs.readdirSync(directoryPath);
|
|
7
|
+
const filesWithDirectoryPathPrefix = filesInDirectory.map((filePathInDirectory = '') => {
|
|
8
|
+
return join(directoryPath, filePathInDirectory);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
files.push(...filesWithDirectoryPathPrefix);
|
|
12
|
+
|
|
13
|
+
filesWithDirectoryPathPrefix.forEach((filePathWithDirectoryPrefix = '') => {
|
|
14
|
+
const pathIsDirectory = fs.statSync(filePathWithDirectoryPrefix).isDirectory();
|
|
15
|
+
|
|
16
|
+
if (pathIsDirectory) {
|
|
17
|
+
getFileListFromPath(filePathWithDirectoryPrefix, files);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return files;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
export default (excludedPaths = [], context = null) => {
|
|
26
|
+
const files = getFileListFromPath("./");
|
|
27
|
+
const masterIgnoreListFilteredForContext = context && context === 'start' ? masterIgnoreList?.filter((fileToIgnore) => {
|
|
28
|
+
return !fileToIgnore.includes('settings');
|
|
29
|
+
}) : masterIgnoreList;
|
|
30
|
+
|
|
31
|
+
const filteredFiles = files
|
|
32
|
+
.filter((path) => {
|
|
33
|
+
const isExcluded = excludedPaths.some((excludedPath) => {
|
|
34
|
+
return path.includes(excludedPath);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return !isExcluded;
|
|
38
|
+
})
|
|
39
|
+
.filter((path) => {
|
|
40
|
+
return !masterIgnoreListFilteredForContext.some((excludedPath) => {
|
|
41
|
+
return path.includes(excludedPath);
|
|
42
|
+
});
|
|
43
|
+
})
|
|
44
|
+
.filter((path) => {
|
|
45
|
+
return !fs.lstatSync(path).isDirectory();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return filteredFiles;
|
|
49
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import condense from 'selective-whitespace';
|
|
2
|
+
import netstats from 'netstats';
|
|
3
|
+
|
|
4
|
+
const platform = process.platform;
|
|
5
|
+
|
|
6
|
+
function pushTo(target, item) {
|
|
7
|
+
if (item !== '' && typeof item === 'number' && item !== 0 && target.indexOf(item) === -1) {
|
|
8
|
+
target.push(item);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Example output to parse (macOS):
|
|
13
|
+
// $ lsof -i :8017
|
|
14
|
+
/*
|
|
15
|
+
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
|
|
16
|
+
nc 20661 michael 3u IPv4 0x3b190d9d07c2c3db 0t0 TCP *:8017 (LISTEN)
|
|
17
|
+
nc 21145 michael 3u IPv4 0x3b190d9d054773db 0t0 TCP *:8017 (LISTEN)
|
|
18
|
+
Python 21221 michael 3u IPv4 0x3b190d9ceb8dfd7b 0t0 UDP localhost:8017
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
// [WIN] $ netstat.exe -a -n -o | findstr :9000
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
TCP 0.0.0.0:9000 0.0.0.0:0 LISTENING 5220
|
|
25
|
+
TCP 127.0.0.1:9000 127.0.0.1:62376 ESTABLISHED 5220
|
|
26
|
+
TCP 127.0.0.1:9000 127.0.0.1:62379 ESTABLISHED 5220
|
|
27
|
+
TCP 127.0.0.1:62288 127.0.0.1:9000 TIME_WAIT 0
|
|
28
|
+
TCP 127.0.0.1:62299 127.0.0.1:9000 TIME_WAIT 0
|
|
29
|
+
TCP 127.0.0.1:62376 127.0.0.1:9000 ESTABLISHED 7604
|
|
30
|
+
TCP 127.0.0.1:62378 127.0.0.1:9000 ESTABLISHED 7604
|
|
31
|
+
UDP 127.0.0.1:9000 *:* 1240
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
async function processNetStats(arr) {
|
|
35
|
+
const pidindex = 1;
|
|
36
|
+
let items = arr.slice(1);
|
|
37
|
+
|
|
38
|
+
if (platform === 'win32') {
|
|
39
|
+
items = arr;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const pids = {
|
|
43
|
+
all: [],
|
|
44
|
+
tcp: [],
|
|
45
|
+
udp: [],
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
await Promise.all(items.map((item) => {
|
|
49
|
+
const values = condense(item).split(' ');
|
|
50
|
+
let pid = parseInt(values[pidindex], 10);
|
|
51
|
+
|
|
52
|
+
if (platform === 'win32') {
|
|
53
|
+
pid = parseInt(values.pop(), 10);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (values.length > 1) {
|
|
57
|
+
if (values.indexOf('TCP') !== -1) {
|
|
58
|
+
pushTo(pids.tcp, pid);
|
|
59
|
+
pushTo(pids.all, pid);
|
|
60
|
+
} else if (values.indexOf('UDP') !== -1) {
|
|
61
|
+
pushTo(pids.udp, pid);
|
|
62
|
+
pushTo(pids.all, pid);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return Promise.resolve();
|
|
67
|
+
}));
|
|
68
|
+
|
|
69
|
+
return pids;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getProcessIdFromPort(port) {
|
|
73
|
+
if (typeof port !== 'number') {
|
|
74
|
+
throw new TypeError('Expected a port number');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return new Promise(((resolve) => {
|
|
78
|
+
netstats(port).then((stats) => {
|
|
79
|
+
processNetStats(stats).then((ps) => {
|
|
80
|
+
resolve(ps);
|
|
81
|
+
});
|
|
82
|
+
}).catch(() => {
|
|
83
|
+
resolve({
|
|
84
|
+
all: [],
|
|
85
|
+
tcp: [],
|
|
86
|
+
udp: [],
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export default getProcessIdFromPort;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { WebSocketServer } from "ws";
|
|
3
|
+
import generateId from "./generateId";
|
|
4
|
+
|
|
5
|
+
// NOTE: This doesn't run on the app server (in node). This runs on your local computer
|
|
6
|
+
// as a totally separate process that's forked on joystick start.
|
|
7
|
+
|
|
8
|
+
export default (() => {
|
|
9
|
+
const websocketServer = new WebSocketServer({
|
|
10
|
+
port: parseInt(process.env.PORT, 10) + 1,
|
|
11
|
+
path: "/_joystick/hmr",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
process.on("message", (message) => {
|
|
15
|
+
if (typeof process.HMR_CONNECTIONS === "object") {
|
|
16
|
+
const parsedMessage = JSON.parse(message);
|
|
17
|
+
const connections = Object.values(process.HMR_CONNECTIONS);
|
|
18
|
+
for (let i = 0; i < connections?.length; i += 1) {
|
|
19
|
+
const connection = connections[i];
|
|
20
|
+
if (connection?.connection?.send) {
|
|
21
|
+
connection.connection.send(
|
|
22
|
+
JSON.stringify({
|
|
23
|
+
type: "FILE_CHANGE",
|
|
24
|
+
settings: {
|
|
25
|
+
global: parsedMessage?.settings?.global,
|
|
26
|
+
public: parsedMessage?.settings?.public,
|
|
27
|
+
},
|
|
28
|
+
indexHTMLChanged: parsedMessage?.indexHTMLChanged,
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
websocketServer.on("connection", function connection(websocketConnection) {
|
|
37
|
+
const connectionId = generateId();
|
|
38
|
+
|
|
39
|
+
process.HMR_CONNECTIONS = {
|
|
40
|
+
...(process.HMR_CONNECTIONS || {}),
|
|
41
|
+
[connectionId]: {
|
|
42
|
+
connection: websocketConnection,
|
|
43
|
+
watchlist: [],
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
if (Object.keys(process.HMR_CONNECTIONS || {})?.length > 0) {
|
|
48
|
+
process.send({ type: "HAS_HMR_CONNECTIONS" });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
websocketConnection.on("message", (message) => {
|
|
52
|
+
const parsedMessage = JSON.parse(message);
|
|
53
|
+
|
|
54
|
+
if (parsedMessage?.type === "HMR_UPDATE_COMPLETE") {
|
|
55
|
+
process.send({ type: "HMR_UPDATE_COMPLETED", sessions: parsedMessage?.sessions });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (parsedMessage?.type === "HMR_WATCHLIST") {
|
|
59
|
+
process.HMR_CONNECTIONS[connectionId]?.watchlist?.push(
|
|
60
|
+
...(parsedMessage?.tags || [])
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
websocketConnection.on("close", () => {
|
|
66
|
+
if (process.HMR_CONNECTIONS[connectionId]) {
|
|
67
|
+
delete process.HMR_CONNECTIONS[connectionId];
|
|
68
|
+
|
|
69
|
+
if (Object.keys(process.HMR_CONNECTIONS || {})?.length === 0) {
|
|
70
|
+
process.send({ type: "HAS_NO_HMR_CONNECTIONS" });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return true;
|
|
78
|
+
})();
|