@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,127 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import util from "util";
|
|
3
|
+
import child_process from "child_process";
|
|
4
|
+
import commandExists from "command-exists";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import Mongo from "mongodb";
|
|
7
|
+
import ps from "ps-node";
|
|
8
|
+
import mongoUri from "mongo-uri-tool";
|
|
9
|
+
import Loader from "../../lib/loader.js";
|
|
10
|
+
import settings from "../../lib/settings.js";
|
|
11
|
+
const exec = util.promisify(child_process.exec);
|
|
12
|
+
const resetDatabase = async (mongodb) => {
|
|
13
|
+
const collections = mongodb && mongodb.db && await mongodb.db.listCollections().toArray();
|
|
14
|
+
for (let i = 0; i < collections.length; i += 1) {
|
|
15
|
+
const collectionFromList = collections[i];
|
|
16
|
+
const collectionName = collectionFromList && collectionFromList.name;
|
|
17
|
+
const collection = collectionName && mongodb.db.collection(collectionName);
|
|
18
|
+
if (collection) {
|
|
19
|
+
await collection.deleteMany();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
};
|
|
24
|
+
const handleCleanup = (processIds = []) => {
|
|
25
|
+
process.loader.stop();
|
|
26
|
+
processIds.forEach((processId) => {
|
|
27
|
+
ps.kill(processId);
|
|
28
|
+
});
|
|
29
|
+
process.exit();
|
|
30
|
+
};
|
|
31
|
+
const handleSignalEvents = (processIds = []) => {
|
|
32
|
+
process.on("SIGINT", () => handleCleanup(processIds));
|
|
33
|
+
process.on("SIGTERM", () => handleCleanup(processIds));
|
|
34
|
+
};
|
|
35
|
+
const getMongoProcessId = (stdout = null) => {
|
|
36
|
+
const forkedProcessId = stdout && stdout.match(/forked process:+\s[0-9]+/gi);
|
|
37
|
+
const processId = forkedProcessId && forkedProcessId[0] && forkedProcessId[0].replace("forked process: ", "");
|
|
38
|
+
return processId && parseInt(processId, 10);
|
|
39
|
+
};
|
|
40
|
+
const getConnectionOptions = () => {
|
|
41
|
+
const mongodbSettings = settings && settings.databases && settings.databases.mongodb;
|
|
42
|
+
const uri = mongodbSettings && mongodbSettings.uri;
|
|
43
|
+
if (!mongodbSettings || mongodbSettings && !uri) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
chalk.redBright(
|
|
46
|
+
"Must have a valid databases.mongodb.uri value in your settings-<env>.json file to connect to MongoDB."
|
|
47
|
+
)
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
uri,
|
|
52
|
+
parsedUri: mongoUri.parseUri(uri),
|
|
53
|
+
options: Object.assign({}, mongodbSettings.options)
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const connectToMongoDB = async () => {
|
|
57
|
+
const connectionOptions = getConnectionOptions();
|
|
58
|
+
if (!process.mongodb && connectionOptions) {
|
|
59
|
+
const mongodb = await Mongo.MongoClient.connect(connectionOptions.uri, {
|
|
60
|
+
poolSize: process.env.NODE_ENV === "development" ? 10 : 100,
|
|
61
|
+
useNewUrlParser: true,
|
|
62
|
+
useUnifiedTopology: true,
|
|
63
|
+
authSource: "admin",
|
|
64
|
+
ssl: process.env.NODE_ENV !== "development",
|
|
65
|
+
...connectionOptions.options
|
|
66
|
+
});
|
|
67
|
+
const db = mongodb.db(connectionOptions.parsedUri.db);
|
|
68
|
+
return {
|
|
69
|
+
db,
|
|
70
|
+
Collection: db.collection.bind(db),
|
|
71
|
+
connection: mongodb
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
};
|
|
76
|
+
const startMongoDB = async () => {
|
|
77
|
+
const dataDirectoryExists = fs.existsSync(".data/mongodb");
|
|
78
|
+
if (!dataDirectoryExists) {
|
|
79
|
+
fs.mkdirSync(".data/mongodb", { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
const { stdout } = await exec(
|
|
82
|
+
"mongod --port 27017 --dbpath ./.data/mongodb --quiet --fork --logpath ./.data/mongodb/log"
|
|
83
|
+
);
|
|
84
|
+
const mongoProcessId = getMongoProcessId(stdout);
|
|
85
|
+
process.mongoProcessId = mongoProcessId;
|
|
86
|
+
return mongoProcessId;
|
|
87
|
+
};
|
|
88
|
+
const warnMongoDBMissing = () => {
|
|
89
|
+
console.warn(`
|
|
90
|
+
${chalk.red("MongoDB not installed.")}
|
|
91
|
+
|
|
92
|
+
${chalk.green(
|
|
93
|
+
"Download MongoDB at https://www.mongodb.com/try/download/community"
|
|
94
|
+
)}
|
|
95
|
+
|
|
96
|
+
After installation, try to run this command again to start MongoDB alongside your app.
|
|
97
|
+
|
|
98
|
+
`);
|
|
99
|
+
};
|
|
100
|
+
const reset = async () => {
|
|
101
|
+
if (process.env.NODE_ENV !== "development") {
|
|
102
|
+
console.log(
|
|
103
|
+
chalk.redBright(
|
|
104
|
+
"To prevent catastrophic data loss, reset is disabled outside of your development environment."
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
process.isReset = true;
|
|
110
|
+
process.loader = new Loader();
|
|
111
|
+
process.loader.start("Resetting database...");
|
|
112
|
+
const mongodbExists = commandExists.sync("mongod");
|
|
113
|
+
if (mongodbExists) {
|
|
114
|
+
const mongoProcessId = await startMongoDB();
|
|
115
|
+
handleSignalEvents([mongoProcessId]);
|
|
116
|
+
const mongodb = await connectToMongoDB();
|
|
117
|
+
await resetDatabase(mongodb);
|
|
118
|
+
ps.kill(mongoProcessId);
|
|
119
|
+
process.loader.stable("Database reset!\n\n");
|
|
120
|
+
process.exit();
|
|
121
|
+
} else {
|
|
122
|
+
process.loader.stop();
|
|
123
|
+
warnMongoDBMissing();
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
(async () => reset())();
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { EXPORT_DEFAULT_REGEX } from "../../lib/regexes.js";
|
|
3
|
+
var bootstrapLayoutComponent_default = () => {
|
|
4
|
+
return {
|
|
5
|
+
transform(code, id) {
|
|
6
|
+
const shouldBootstrap = ["layouts"].some((bootstrapTarget) => {
|
|
7
|
+
return id.includes(bootstrapTarget);
|
|
8
|
+
});
|
|
9
|
+
if (shouldBootstrap) {
|
|
10
|
+
const matches = code.match(EXPORT_DEFAULT_REGEX) || [];
|
|
11
|
+
const match = matches && matches[0];
|
|
12
|
+
if (!match) {
|
|
13
|
+
console.log(" ");
|
|
14
|
+
console.warn(
|
|
15
|
+
chalk.yellowBright(
|
|
16
|
+
`All components in the ui/layouts directory must have an export default statement (e.g., export default MyLayout). Please check the file at ${id}.`
|
|
17
|
+
)
|
|
18
|
+
);
|
|
19
|
+
console.log(" ");
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const matchParts = match && match.split(" ") || [];
|
|
23
|
+
const componentName = matchParts.pop();
|
|
24
|
+
if (componentName) {
|
|
25
|
+
return {
|
|
26
|
+
code: code.replace(
|
|
27
|
+
`${match};`,
|
|
28
|
+
`if (
|
|
29
|
+
typeof window !== 'undefined' &&
|
|
30
|
+
window.__joystick_ssr__ === true &&
|
|
31
|
+
window.__joystick_layout_page__ &&
|
|
32
|
+
ui &&
|
|
33
|
+
ui.mount
|
|
34
|
+
) {
|
|
35
|
+
fetch(window.__joystick_layout_page_url__).then(async (response) => {
|
|
36
|
+
const file = await response.text();
|
|
37
|
+
const component = eval(file);
|
|
38
|
+
ui.mount(${componentName}, Object.assign({ ...window.__joystick_ssr_props__ }, { page: window[window.__joystick_layout_page__].js }), document.getElementById('app'));
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default ${componentName};
|
|
43
|
+
`
|
|
44
|
+
)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
bootstrapLayoutComponent_default as default
|
|
54
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { EXPORT_DEFAULT_REGEX } from "../../lib/regexes.js";
|
|
3
|
+
var bootstrapPageComponent_default = () => {
|
|
4
|
+
return {
|
|
5
|
+
transform(code, id) {
|
|
6
|
+
const shouldBootstrap = ["pages"].some((bootstrapTarget) => {
|
|
7
|
+
return id.includes(bootstrapTarget);
|
|
8
|
+
});
|
|
9
|
+
if (shouldBootstrap) {
|
|
10
|
+
const matches = code.match(EXPORT_DEFAULT_REGEX) || [];
|
|
11
|
+
const match = matches && matches[0];
|
|
12
|
+
if (!match) {
|
|
13
|
+
console.log(" ");
|
|
14
|
+
console.warn(
|
|
15
|
+
chalk.yellowBright(
|
|
16
|
+
`All components in the ui/pages directory must have an export default statement (e.g., export default MyPage). Please check the file at ${id}.`
|
|
17
|
+
)
|
|
18
|
+
);
|
|
19
|
+
console.log(" ");
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const matchParts = match && match.split(" ") || [];
|
|
23
|
+
const componentName = matchParts.pop();
|
|
24
|
+
if (componentName) {
|
|
25
|
+
return {
|
|
26
|
+
code: code.replace(
|
|
27
|
+
`${match};`,
|
|
28
|
+
`
|
|
29
|
+
if (
|
|
30
|
+
typeof window !== 'undefined' &&
|
|
31
|
+
window.__joystick_ssr__ === true &&
|
|
32
|
+
!window.__joystick_layout_page__ &&
|
|
33
|
+
ui &&
|
|
34
|
+
ui.mount
|
|
35
|
+
) {
|
|
36
|
+
ui.mount(${componentName}, window.__joystick_ssr_props__ || {}, document.getElementById('app'));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default ${componentName};
|
|
40
|
+
`
|
|
41
|
+
)
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export {
|
|
50
|
+
bootstrapPageComponent_default as default
|
|
51
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import esbuild from "esbuild";
|
|
2
|
+
import svg from "esbuild-plugin-svg";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
import plugins from "./buildPlugins.js";
|
|
5
|
+
import onWarn from "./onWarn.js";
|
|
6
|
+
import getCodeFrame from "../../lib/getCodeFrame.js";
|
|
7
|
+
const configs = {
|
|
8
|
+
node: (inputPath, outputPath = null, environment = "development") => ({
|
|
9
|
+
entryPoints: [inputPath],
|
|
10
|
+
bundle: false,
|
|
11
|
+
outfile: `${outputPath || "./.joystick/build"}/${inputPath}`,
|
|
12
|
+
platform: "node",
|
|
13
|
+
format: "esm",
|
|
14
|
+
define: {
|
|
15
|
+
"process.env.NODE_ENV": `'${environment}'`
|
|
16
|
+
},
|
|
17
|
+
// minify: environment !== "development",
|
|
18
|
+
logLevel: "silent",
|
|
19
|
+
plugins: [plugins.warnNodeEnvironment, plugins.generateFileDependencyMap]
|
|
20
|
+
}),
|
|
21
|
+
browser: (inputPath, outputPath = null, environment = "development") => {
|
|
22
|
+
return {
|
|
23
|
+
target: "es2020",
|
|
24
|
+
entryPoints: [inputPath],
|
|
25
|
+
bundle: true,
|
|
26
|
+
outfile: `${outputPath || "./.joystick/build"}/${inputPath}`,
|
|
27
|
+
platform: "browser",
|
|
28
|
+
format: "esm",
|
|
29
|
+
define: {
|
|
30
|
+
"process.env.NODE_ENV": `'${environment}'`
|
|
31
|
+
},
|
|
32
|
+
// minify: environment !== "development",
|
|
33
|
+
logLevel: "silent",
|
|
34
|
+
plugins: [
|
|
35
|
+
plugins.warnNodeEnvironment,
|
|
36
|
+
plugins.generateFileDependencyMap,
|
|
37
|
+
plugins.bootstrapComponent,
|
|
38
|
+
svg()
|
|
39
|
+
]
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var buildFile_default = async (file = "", platform = "", outputPath = "", environment = "development") => {
|
|
44
|
+
return new Promise(async (resolve) => {
|
|
45
|
+
const config = configs[platform] && configs[platform](file, outputPath, environment);
|
|
46
|
+
if (config) {
|
|
47
|
+
try {
|
|
48
|
+
await esbuild.build(config);
|
|
49
|
+
return resolve({
|
|
50
|
+
success: true
|
|
51
|
+
});
|
|
52
|
+
} catch (exception) {
|
|
53
|
+
console.warn(exception);
|
|
54
|
+
const error = exception?.errors && exception?.errors[0];
|
|
55
|
+
const snippet = fs.existsSync(file) ? getCodeFrame(file, {
|
|
56
|
+
line: error?.location?.line,
|
|
57
|
+
column: error?.location?.column
|
|
58
|
+
}) : null;
|
|
59
|
+
onWarn({
|
|
60
|
+
file,
|
|
61
|
+
stack: exception?.stack,
|
|
62
|
+
line: error?.location?.line,
|
|
63
|
+
column: error?.location?.column,
|
|
64
|
+
snippet,
|
|
65
|
+
lineWithError: error?.location?.lineText?.trim(),
|
|
66
|
+
message: error?.text
|
|
67
|
+
});
|
|
68
|
+
return resolve({
|
|
69
|
+
success: false,
|
|
70
|
+
path: file,
|
|
71
|
+
error: {
|
|
72
|
+
stack: exception?.stack,
|
|
73
|
+
snippet
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return resolve({
|
|
79
|
+
success: true
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
export {
|
|
84
|
+
buildFile_default as default
|
|
85
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import esbuild from "esbuild";
|
|
3
|
+
import filesToCopy from "./filesToCopy.js";
|
|
4
|
+
import buildFile from "./buildFile.js";
|
|
5
|
+
import minifyFile from "./minifyFile.js";
|
|
6
|
+
import getPlatformSafePath from "../../lib/getPlatformSafePath.js";
|
|
7
|
+
const getFilePlatform = (path = "") => {
|
|
8
|
+
let platform = "copy";
|
|
9
|
+
const browserPaths = [
|
|
10
|
+
getPlatformSafePath("email/"),
|
|
11
|
+
getPlatformSafePath("lib/"),
|
|
12
|
+
getPlatformSafePath("lib/browser"),
|
|
13
|
+
getPlatformSafePath("ui/"),
|
|
14
|
+
"index.client.js"
|
|
15
|
+
];
|
|
16
|
+
const browserExclusions = [getPlatformSafePath("lib/node")];
|
|
17
|
+
const nodePaths = [
|
|
18
|
+
getPlatformSafePath("api/"),
|
|
19
|
+
getPlatformSafePath("routes/"),
|
|
20
|
+
getPlatformSafePath("fixtures/"),
|
|
21
|
+
getPlatformSafePath("lib/node"),
|
|
22
|
+
"index.server.js"
|
|
23
|
+
];
|
|
24
|
+
const nodeExclusions = [getPlatformSafePath("lib/browser")];
|
|
25
|
+
const isBrowser = browserPaths.some((browserPath) => {
|
|
26
|
+
return path.includes(browserPath);
|
|
27
|
+
}) && !browserExclusions.some((browserExclusionPath) => {
|
|
28
|
+
return path.includes(browserExclusionPath);
|
|
29
|
+
});
|
|
30
|
+
const isNode = nodePaths.some((nodePath) => {
|
|
31
|
+
return path.includes(nodePath);
|
|
32
|
+
}) && !nodeExclusions.some((nodeExclusionPath) => {
|
|
33
|
+
return path.includes(nodeExclusionPath);
|
|
34
|
+
});
|
|
35
|
+
if (isBrowser) {
|
|
36
|
+
platform = "browser";
|
|
37
|
+
}
|
|
38
|
+
if (isNode) {
|
|
39
|
+
platform = "node";
|
|
40
|
+
}
|
|
41
|
+
return platform;
|
|
42
|
+
};
|
|
43
|
+
const isNotJavaScript = (path = "") => {
|
|
44
|
+
const extension = path.split(".").pop();
|
|
45
|
+
return extension && !extension.match(/\js$/);
|
|
46
|
+
};
|
|
47
|
+
var buildFiles_default = async (filesToBuild = [], outputPath = null, environment = "development") => {
|
|
48
|
+
return Promise.all(
|
|
49
|
+
filesToBuild.map(async (fileToBuild) => {
|
|
50
|
+
const platform = getFilePlatform(fileToBuild);
|
|
51
|
+
const isFileToCopy = platform === "copy" || isNotJavaScript(fileToBuild) || filesToCopy.some((fileToCopy) => {
|
|
52
|
+
return fileToCopy.regex.test(fileToBuild);
|
|
53
|
+
});
|
|
54
|
+
if (isFileToCopy) {
|
|
55
|
+
fs.outputFileSync(
|
|
56
|
+
`${outputPath || "./.joystick/build"}/${fileToBuild}`,
|
|
57
|
+
fs.readFileSync(fileToBuild)
|
|
58
|
+
);
|
|
59
|
+
return fileToBuild;
|
|
60
|
+
}
|
|
61
|
+
const build = await buildFile(
|
|
62
|
+
fileToBuild,
|
|
63
|
+
platform,
|
|
64
|
+
outputPath,
|
|
65
|
+
environment
|
|
66
|
+
);
|
|
67
|
+
if (environment !== "development") {
|
|
68
|
+
await minifyFile(`${outputPath || "./.joystick/build"}/${fileToBuild}`);
|
|
69
|
+
}
|
|
70
|
+
return build;
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
export {
|
|
75
|
+
buildFiles_default as default
|
|
76
|
+
};
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import updateFileMap from "./updateFileMap.js";
|
|
4
|
+
import {
|
|
5
|
+
JOYSTICK_UI_REGEX,
|
|
6
|
+
EXPORT_DEFAULT_REGEX,
|
|
7
|
+
JOYSTICK_COMPONENT_REGEX,
|
|
8
|
+
JOYSTICK_COMMENT_REGEX
|
|
9
|
+
} from "../../lib/regexes.js";
|
|
10
|
+
import generateId from "./generateId.js";
|
|
11
|
+
import getPlatformSafePath from "../../lib/getPlatformSafePath.js";
|
|
12
|
+
import setComponentId from "./setComponentId.js";
|
|
13
|
+
var buildPlugins_default = {
|
|
14
|
+
bootstrapComponent: {
|
|
15
|
+
name: "bootstrapComponent",
|
|
16
|
+
setup(build) {
|
|
17
|
+
const ssrId = generateId();
|
|
18
|
+
build.onLoad({ filter: /\.js$/ }, (args = {}) => {
|
|
19
|
+
try {
|
|
20
|
+
const shouldSetSSRId = [getPlatformSafePath("ui/")].some(
|
|
21
|
+
(bootstrapTarget) => {
|
|
22
|
+
return args.path.includes(bootstrapTarget);
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
const isLayoutComponent = [getPlatformSafePath("ui/layouts")].some(
|
|
26
|
+
(bootstrapTarget) => {
|
|
27
|
+
return args.path.includes(bootstrapTarget);
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
const isPageComponent = [getPlatformSafePath("ui/pages")].some(
|
|
31
|
+
(bootstrapTarget) => {
|
|
32
|
+
return args.path.includes(bootstrapTarget);
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
const isEmailComponent = [getPlatformSafePath("email/")].some(
|
|
36
|
+
(bootstrapTarget) => {
|
|
37
|
+
return args.path.includes(bootstrapTarget);
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
if (shouldSetSSRId || isLayoutComponent || isPageComponent || isEmailComponent) {
|
|
41
|
+
const code = fs.readFileSync(
|
|
42
|
+
getPlatformSafePath(args.path),
|
|
43
|
+
"utf-8"
|
|
44
|
+
);
|
|
45
|
+
const joystickUIMatches = code.match(JOYSTICK_UI_REGEX) || [];
|
|
46
|
+
const joystickUIMatch = joystickUIMatches && joystickUIMatches[0];
|
|
47
|
+
const exportDefaultMatches = code.match(EXPORT_DEFAULT_REGEX) || [];
|
|
48
|
+
const exportDefaultMatch = exportDefaultMatches && exportDefaultMatches[0];
|
|
49
|
+
if (joystickUIMatch && !exportDefaultMatch) {
|
|
50
|
+
console.log(" ");
|
|
51
|
+
console.warn(
|
|
52
|
+
chalk.yellowBright(
|
|
53
|
+
`All Joystick components in the ui directory must have an export default statement (e.g., export default MyComponent, export default MyLayout, or export default MyPage). Please check the file at ${args.path}.`
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
console.log(" ");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
let contents = setComponentId(code)?.replace(
|
|
60
|
+
/\.component\(\/\*\*\//g,
|
|
61
|
+
".component("
|
|
62
|
+
);
|
|
63
|
+
contents = contents.replace(JOYSTICK_COMMENT_REGEX, "");
|
|
64
|
+
const exportDefaultMatchParts = exportDefaultMatch && exportDefaultMatch.split(" ") || [];
|
|
65
|
+
const componentName = exportDefaultMatchParts.pop();
|
|
66
|
+
if (componentName && isLayoutComponent) {
|
|
67
|
+
contents = contents.replace(
|
|
68
|
+
`${exportDefaultMatch};`,
|
|
69
|
+
`if (
|
|
70
|
+
typeof window !== 'undefined' &&
|
|
71
|
+
window.__joystick_ssr__ === true &&
|
|
72
|
+
window.__joystick_layout_page__ &&
|
|
73
|
+
ui &&
|
|
74
|
+
ui.mount
|
|
75
|
+
) {
|
|
76
|
+
(async () => {
|
|
77
|
+
const layoutComponentFile = await import(window.__joystick_layout__);
|
|
78
|
+
const pageComponentFile = await import(window.window.__joystick_layout_page_url__);
|
|
79
|
+
const layout = layoutComponentFile.default;
|
|
80
|
+
const page = pageComponentFile.default;
|
|
81
|
+
ui.mount(layout, Object.assign({ ...window.__joystick_ssr_props__ }, { page }), document.getElementById('app'));
|
|
82
|
+
})();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export default ${componentName};
|
|
86
|
+
`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
if (componentName && isPageComponent) {
|
|
90
|
+
contents = contents.replace(
|
|
91
|
+
`${exportDefaultMatch};`,
|
|
92
|
+
`if (
|
|
93
|
+
typeof window !== 'undefined' &&
|
|
94
|
+
window.__joystick_ssr__ === true &&
|
|
95
|
+
!window.__joystick_layout_page__ &&
|
|
96
|
+
ui &&
|
|
97
|
+
ui.mount
|
|
98
|
+
) {
|
|
99
|
+
ui.mount(${componentName}, window.__joystick_ssr_props__ || {}, document.getElementById('app'));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export default ${componentName};
|
|
103
|
+
`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
contents,
|
|
108
|
+
loader: "js"
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
} catch (exception) {
|
|
112
|
+
console.warn(exception);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
build.onEnd(() => {
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
const shouldSetComponentId = [
|
|
118
|
+
getPlatformSafePath("ui/"),
|
|
119
|
+
getPlatformSafePath("email/")
|
|
120
|
+
].some((bootstrapTarget) => {
|
|
121
|
+
return build.initialOptions.outfile.includes(bootstrapTarget);
|
|
122
|
+
});
|
|
123
|
+
if (shouldSetComponentId) {
|
|
124
|
+
const file = fs.readFileSync(build.initialOptions.outfile, "utf-8");
|
|
125
|
+
const joystickUIMatches = file?.match(JOYSTICK_COMPONENT_REGEX) || [];
|
|
126
|
+
if (joystickUIMatches?.length > 0) {
|
|
127
|
+
let contents = setComponentId(file)?.replace(
|
|
128
|
+
/\.component\(\/\*\*\//g,
|
|
129
|
+
".component("
|
|
130
|
+
);
|
|
131
|
+
fs.writeFileSync(build.initialOptions.outfile, contents);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
resolve();
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
generateFileDependencyMap: {
|
|
140
|
+
name: "generateFileDependencyMap",
|
|
141
|
+
setup(build) {
|
|
142
|
+
build.onLoad({ filter: /\.js$/ }, (args) => {
|
|
143
|
+
try {
|
|
144
|
+
const canAddToMap = ![
|
|
145
|
+
"node_modules",
|
|
146
|
+
".joystick",
|
|
147
|
+
"?",
|
|
148
|
+
"commonjsHelpers.js"
|
|
149
|
+
].some((excludedPath) => {
|
|
150
|
+
return getPlatformSafePath(args.path).includes(excludedPath);
|
|
151
|
+
});
|
|
152
|
+
if (canAddToMap) {
|
|
153
|
+
const code = fs.readFileSync(
|
|
154
|
+
getPlatformSafePath(args.path),
|
|
155
|
+
"utf-8"
|
|
156
|
+
);
|
|
157
|
+
updateFileMap(getPlatformSafePath(args.path), code);
|
|
158
|
+
}
|
|
159
|
+
} catch (exception) {
|
|
160
|
+
console.warn(exception);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
warnNodeEnvironment: {
|
|
166
|
+
name: "warnNodeEnvironment",
|
|
167
|
+
setup(build) {
|
|
168
|
+
build.onLoad({ filter: /\.js$/ }, (args = {}) => {
|
|
169
|
+
const code = fs.readFileSync(args.path, "utf-8");
|
|
170
|
+
if (code?.match(/process.env.NODE_ENV\s+=\s/gi)?.length) {
|
|
171
|
+
console.warn(
|
|
172
|
+
chalk.yellowBright(
|
|
173
|
+
"\n[WARNING] process.env.NODE_ENV should only be set via a CLI flag in development or via external environment variables in production.\n"
|
|
174
|
+
)
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
export {
|
|
182
|
+
buildPlugins_default as default
|
|
183
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import net from "net";
|
|
2
|
+
var checkIfPortAvailable_default = (port) => {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const testServer = net.createServer();
|
|
5
|
+
testServer.once("error", function(err) {
|
|
6
|
+
if (err.code != "EADDRINUSE")
|
|
7
|
+
return callback(err);
|
|
8
|
+
resolve(false);
|
|
9
|
+
}).once("listening", function() {
|
|
10
|
+
testServer.once("close", function() {
|
|
11
|
+
resolve(true);
|
|
12
|
+
}).close();
|
|
13
|
+
}).listen(port);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
checkIfPortAvailable_default as default
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import ps from "ps-node";
|
|
2
|
+
process.title = "joystick_cleanup";
|
|
3
|
+
const killProcess = (pid = 0) => {
|
|
4
|
+
return new Promise((resolve) => {
|
|
5
|
+
ps.kill(pid, () => {
|
|
6
|
+
resolve();
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
process.on("message", async (message) => {
|
|
11
|
+
const parsedMessage = JSON.parse(message);
|
|
12
|
+
const processIds = parsedMessage?.processIds;
|
|
13
|
+
for (let i = 0; i < processIds?.length; i += 1) {
|
|
14
|
+
const processId = processIds[i];
|
|
15
|
+
await killProcess(processId);
|
|
16
|
+
}
|
|
17
|
+
process.exit();
|
|
18
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var availableQueryParameters_default = [
|
|
2
|
+
"replicaSet",
|
|
3
|
+
"tls",
|
|
4
|
+
"ssl",
|
|
5
|
+
"tlsCertificateKeyFile",
|
|
6
|
+
"tlsCertificateKeyFilePassword",
|
|
7
|
+
"tlsCAFile",
|
|
8
|
+
"tlsAllowInvalidCertificates",
|
|
9
|
+
"tlsAllowInvalidHostnames",
|
|
10
|
+
"tlsInsecure",
|
|
11
|
+
"connectTimeoutMS",
|
|
12
|
+
"socketTimeoutMS",
|
|
13
|
+
"compressors",
|
|
14
|
+
"zlibCompressionLevel",
|
|
15
|
+
"maxPoolSize",
|
|
16
|
+
"minPoolSize",
|
|
17
|
+
"maxIdleTimeMS",
|
|
18
|
+
"waitQueueMultiple",
|
|
19
|
+
"waitQueueTimeoutMS",
|
|
20
|
+
"w",
|
|
21
|
+
"wtimeoutMS",
|
|
22
|
+
"journal",
|
|
23
|
+
"readConcernLevel",
|
|
24
|
+
"readPreference",
|
|
25
|
+
"maxStalenessSeconds",
|
|
26
|
+
"readPreferenceTags",
|
|
27
|
+
"authSource",
|
|
28
|
+
"authMechanism",
|
|
29
|
+
"authMechanismProperties",
|
|
30
|
+
"gssapiServiceName",
|
|
31
|
+
"localThresholdMS",
|
|
32
|
+
"serverSelectionTimeoutMS",
|
|
33
|
+
"serverSelectionTryOnce",
|
|
34
|
+
"heartbeatFrequencyMS",
|
|
35
|
+
"appName",
|
|
36
|
+
"retryReads",
|
|
37
|
+
"retryWrites",
|
|
38
|
+
"uuidRepresentation"
|
|
39
|
+
];
|
|
40
|
+
export {
|
|
41
|
+
availableQueryParameters_default as default
|
|
42
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import buildQueryParameters from "./buildQueryParameters.js";
|
|
2
|
+
import serializeQueryParameters from "../../../../lib/serializeQueryParameters.js";
|
|
3
|
+
var buildConnectionString_default = (connection = {}) => {
|
|
4
|
+
let connectionString = "mongodb://";
|
|
5
|
+
if (connection && (connection.username || connection.password)) {
|
|
6
|
+
connectionString = `${connectionString}${connection.username || connection.password ? `${connection.username || ""}${!!connection.username && !!connection.password ? ":" : ""}${connection.password || ""}@` : ""}`;
|
|
7
|
+
}
|
|
8
|
+
if (connection && connection.hosts && Array.isArray(connection.hosts)) {
|
|
9
|
+
connectionString = `${connectionString}${connection.hosts.map((host) => `${host.hostname}:${host.port}`).join(",")}`;
|
|
10
|
+
}
|
|
11
|
+
if (connection && connection.database) {
|
|
12
|
+
connectionString = `${connectionString}/${connection.database}`;
|
|
13
|
+
}
|
|
14
|
+
const queryParameters = buildQueryParameters(connection);
|
|
15
|
+
if (Object.keys(queryParameters)?.length > 0) {
|
|
16
|
+
connectionString = `${connectionString}?${serializeQueryParameters(queryParameters)}`;
|
|
17
|
+
}
|
|
18
|
+
return connectionString;
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
buildConnectionString_default as default
|
|
22
|
+
};
|