@swizzyweb/swerve-manager 0.3.3 → 0.3.5
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/deno.lock +2 -3
- package/dist/swerve.d.ts +1 -0
- package/dist/swerve.js +5 -10
- package/dist/utils/getArgs.d.ts +1 -0
- package/dist/utils/getArgs.js +24 -5
- package/dist/utils/installWebservice.js +2 -0
- package/package.json +6 -5
- package/src/swerve.ts +6 -11
- package/src/utils/getArgs.ts +26 -5
- package/src/utils/installWebservice.ts +2 -1
- package/test/config/serviceConfig.json +1 -1
package/deno.lock
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "5",
|
|
3
3
|
"specifiers": {
|
|
4
|
-
"npm:@swizzyweb/swizzy-common@~0.3.3": "0.3.3",
|
|
5
4
|
"npm:@types/express@^5.0.6": "5.0.6",
|
|
6
5
|
"npm:@types/node@^22.18.6": "22.19.7",
|
|
7
6
|
"npm:@typescript-eslint/eslint-plugin@^8.54.0": "8.54.0_@typescript-eslint+parser@8.54.0__eslint@9.39.2__typescript@5.9.3_eslint@9.39.2_typescript@5.9.3",
|
|
@@ -1211,8 +1210,8 @@
|
|
|
1211
1210
|
"workspace": {
|
|
1212
1211
|
"packageJson": {
|
|
1213
1212
|
"dependencies": [
|
|
1214
|
-
"npm:@swizzyweb/swizzy-common@~0.3.
|
|
1215
|
-
"npm:@swizzyweb/swizzy-web-service
|
|
1213
|
+
"npm:@swizzyweb/swizzy-common@~0.3.5",
|
|
1214
|
+
"npm:@swizzyweb/swizzy-web-service@~0.6.3",
|
|
1216
1215
|
"npm:@types/express@^5.0.6",
|
|
1217
1216
|
"npm:@types/node@^22.18.6",
|
|
1218
1217
|
"npm:@typescript-eslint/eslint-plugin@^8.54.0",
|
package/dist/swerve.d.ts
CHANGED
package/dist/swerve.js
CHANGED
|
@@ -28,6 +28,7 @@ export class SwerveManager {
|
|
|
28
28
|
appName: "swerve-manager",
|
|
29
29
|
port: -1,
|
|
30
30
|
hostName: os.hostname(),
|
|
31
|
+
noLogFile: props.noLogFile ?? true,
|
|
31
32
|
});
|
|
32
33
|
}
|
|
33
34
|
async run(request) {
|
|
@@ -49,6 +50,7 @@ export class SwerveManager {
|
|
|
49
50
|
hostName: os.hostname(),
|
|
50
51
|
ownerName: "swerve",
|
|
51
52
|
pid: process.pid,
|
|
53
|
+
noLogFile: args.noLogFile,
|
|
52
54
|
});
|
|
53
55
|
try {
|
|
54
56
|
const webServices = [];
|
|
@@ -108,21 +110,14 @@ export class SwerveManager {
|
|
|
108
110
|
const { app, args } = props;
|
|
109
111
|
let gLogger = new SwizzyWinstonLogger({
|
|
110
112
|
port: 0,
|
|
111
|
-
logLevel: process.env.LOG_LEVEL ?? "info",
|
|
113
|
+
logLevel: process.env.LOG_LEVEL ?? args.logLevel ?? "info",
|
|
112
114
|
appDataRoot: args.appDataRoot,
|
|
113
115
|
appName: `swerve`,
|
|
114
116
|
hostName: os.hostname(),
|
|
115
117
|
pid: process.pid,
|
|
118
|
+
noLogFile: args.noLogFile,
|
|
116
119
|
});
|
|
117
120
|
try {
|
|
118
|
-
gLogger = new SwizzyWinstonLogger({
|
|
119
|
-
logLevel: args.serviceArgs.logLevel ?? process.env.LOG_LEVEL ?? "info",
|
|
120
|
-
port: args.port,
|
|
121
|
-
logDir: args.appDataRoot,
|
|
122
|
-
appName: `swerve`,
|
|
123
|
-
hostName: os.hostname(),
|
|
124
|
-
pid: process.pid,
|
|
125
|
-
});
|
|
126
121
|
gLogger.debug(`Swerve Args: ${JSON.stringify(args)}`);
|
|
127
122
|
const PORT = args.port ?? 3005;
|
|
128
123
|
const webServices = [];
|
|
@@ -187,7 +182,7 @@ export class SwerveManager {
|
|
|
187
182
|
serviceArgs: { ...serviceArgs },
|
|
188
183
|
logger,
|
|
189
184
|
});
|
|
190
|
-
|
|
185
|
+
gLogger.debug(`Got web service`);
|
|
191
186
|
gLogger.debug(`Installing web service...`);
|
|
192
187
|
await service.install({});
|
|
193
188
|
gLogger.debug(`Installed web service ${packageName}`);
|
package/dist/utils/getArgs.d.ts
CHANGED
package/dist/utils/getArgs.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import process from "node:process";
|
|
2
|
+
import process, { cwd } from "node:process";
|
|
3
3
|
import { SwerveConfigParser } from "../config/config-parser.js";
|
|
4
4
|
import { deepMerge } from "@swizzyweb/swizzy-common";
|
|
5
5
|
import { getPackageJson } from "./getPackageJson.js";
|
|
6
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
6
7
|
function getHelpText() {
|
|
7
8
|
return `Help --
|
|
8
9
|
npm run server <serviceName> <port (optional)>
|
|
@@ -80,6 +81,7 @@ function getDefaultArgs() {
|
|
|
80
81
|
services: {},
|
|
81
82
|
port: 3005,
|
|
82
83
|
serviceArgs: {},
|
|
84
|
+
noLogFile: false,
|
|
83
85
|
};
|
|
84
86
|
}
|
|
85
87
|
const ARG_PREFIX = "--";
|
|
@@ -116,6 +118,12 @@ function tryParseNumberArg(val) {
|
|
|
116
118
|
}
|
|
117
119
|
function parseArgValue(val, logger) {
|
|
118
120
|
try {
|
|
121
|
+
if (`${val}`.toLocaleLowerCase() == "true") {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
else if (`${val}`.toLocaleLowerCase() == "false") {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
119
127
|
return JSON.parse(val);
|
|
120
128
|
}
|
|
121
129
|
catch (e) {
|
|
@@ -126,7 +134,8 @@ function parseArgValue(val, logger) {
|
|
|
126
134
|
const DEFAULT_PORT = 3005;
|
|
127
135
|
export async function getArgs(args, logger) {
|
|
128
136
|
let argKey = undefined;
|
|
129
|
-
let
|
|
137
|
+
let defaultArgs = getDefaultArgs();
|
|
138
|
+
let swerveArgs = defaultArgs;
|
|
130
139
|
let configFromFile;
|
|
131
140
|
const serviceCounts = new Map();
|
|
132
141
|
for (let i = 2; i < args.length; i++) {
|
|
@@ -140,6 +149,9 @@ export async function getArgs(args, logger) {
|
|
|
140
149
|
argKey = undefined;
|
|
141
150
|
continue;
|
|
142
151
|
}
|
|
152
|
+
if (Object.keys(defaultArgs).includes(argKey)) {
|
|
153
|
+
swerveArgs[argKey] = parseArgValue(nextVal, logger);
|
|
154
|
+
}
|
|
143
155
|
swerveArgs.serviceArgs[argKey] = parseArgValue(nextVal, logger);
|
|
144
156
|
argKey = undefined;
|
|
145
157
|
continue;
|
|
@@ -168,9 +180,16 @@ export async function getArgs(args, logger) {
|
|
|
168
180
|
// serviceEntry[1].servicePath ?? serviceEntry[1].packageName;
|
|
169
181
|
if (!servicePath) {
|
|
170
182
|
serviceEntry[1].servicePath = packageName;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
183
|
+
const localPackage = path.join(cwd(), "node_modules", packageName);
|
|
184
|
+
const packageJsonPath = path.join(localPackage, "package.json");
|
|
185
|
+
if (existsSync(path.join(packageJsonPath))) {
|
|
186
|
+
const json = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
187
|
+
const main = json.main;
|
|
188
|
+
serviceEntry[1].servicePath = path.join(localPackage, main);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
serviceEntry[1].servicePath = getPackageJson(packageName).servicePath;
|
|
192
|
+
}
|
|
174
193
|
}
|
|
175
194
|
else {
|
|
176
195
|
const serviceData = getService(servicePath, logger);
|
|
@@ -73,6 +73,7 @@ export function getLoggerForService(serviceArgs, appName, port, gLogger) {
|
|
|
73
73
|
const hostName = os.hostname();
|
|
74
74
|
const logDir = serviceArgs.logDir;
|
|
75
75
|
const appDataRoot = serviceArgs.appDataRoot;
|
|
76
|
+
const noLogFile = serviceArgs.noLogFile ?? gLogger.getLoggerProps().noLogFile;
|
|
76
77
|
return gLogger.clone({
|
|
77
78
|
port,
|
|
78
79
|
appName,
|
|
@@ -83,5 +84,6 @@ export function getLoggerForService(serviceArgs, appName, port, gLogger) {
|
|
|
83
84
|
logLevel,
|
|
84
85
|
ownerName,
|
|
85
86
|
logFileName,
|
|
87
|
+
noLogFile,
|
|
86
88
|
});
|
|
87
89
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swizzyweb/swerve-manager",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"description": "swizzy-swerve is a bootstrapper for swizzy web services. This package will bootstrap and run independent swizzy web services.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,9 +12,10 @@
|
|
|
12
12
|
"test:node": "node --test ./test**/*.spec.ts",
|
|
13
13
|
"test:deno": "deno test test/** --allow-env --allow-write --allow-read",
|
|
14
14
|
"test:bun": "bun test",
|
|
15
|
-
"coverage": "
|
|
15
|
+
"coverage": "node --test --experimental-test-coverage ./test/**.spec.ts",
|
|
16
16
|
"lint": "eslint .",
|
|
17
|
-
"lint:fix": "eslint . --fix"
|
|
17
|
+
"lint:fix": "eslint . --fix",
|
|
18
|
+
"docs": "npx typedoc src/index.ts"
|
|
18
19
|
},
|
|
19
20
|
"author": "Jason Gallagher",
|
|
20
21
|
"license": "Apache-2.0",
|
|
@@ -29,8 +30,8 @@
|
|
|
29
30
|
"typescript": "^5.9.2"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@swizzyweb/swizzy-common": "^0.3.
|
|
33
|
-
"@swizzyweb/swizzy-web-service": "0.6.
|
|
33
|
+
"@swizzyweb/swizzy-common": "^0.3.5",
|
|
34
|
+
"@swizzyweb/swizzy-web-service": "^0.6.3",
|
|
34
35
|
"express": "^5.2.1"
|
|
35
36
|
},
|
|
36
37
|
"repository": {
|
package/src/swerve.ts
CHANGED
|
@@ -75,6 +75,7 @@ export interface SwerveManagerProps {
|
|
|
75
75
|
webServices?: WebService<any>[];
|
|
76
76
|
nodeModulesPath?: string;
|
|
77
77
|
logger?: ILogger<any> | undefined;
|
|
78
|
+
noLogFile?: boolean;
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
export interface WebServiceConfiguration {}
|
|
@@ -99,6 +100,7 @@ export class SwerveManager implements ISwerveManager {
|
|
|
99
100
|
appName: "swerve-manager",
|
|
100
101
|
port: -1,
|
|
101
102
|
hostName: os.hostname(),
|
|
103
|
+
noLogFile: props.noLogFile ?? true,
|
|
102
104
|
});
|
|
103
105
|
}
|
|
104
106
|
|
|
@@ -122,6 +124,7 @@ export class SwerveManager implements ISwerveManager {
|
|
|
122
124
|
hostName: os.hostname(),
|
|
123
125
|
ownerName: "swerve",
|
|
124
126
|
pid: process.pid,
|
|
127
|
+
noLogFile: args.noLogFile,
|
|
125
128
|
});
|
|
126
129
|
|
|
127
130
|
try {
|
|
@@ -190,23 +193,15 @@ export class SwerveManager implements ISwerveManager {
|
|
|
190
193
|
const { app, args } = props;
|
|
191
194
|
let gLogger = new SwizzyWinstonLogger({
|
|
192
195
|
port: 0,
|
|
193
|
-
logLevel: process.env.LOG_LEVEL ?? "info",
|
|
196
|
+
logLevel: process.env.LOG_LEVEL ?? args.logLevel ?? "info",
|
|
194
197
|
appDataRoot: args.appDataRoot,
|
|
195
198
|
appName: `swerve`,
|
|
196
199
|
hostName: os.hostname(),
|
|
197
200
|
pid: process.pid,
|
|
201
|
+
noLogFile: args.noLogFile,
|
|
198
202
|
});
|
|
199
203
|
|
|
200
204
|
try {
|
|
201
|
-
gLogger = new SwizzyWinstonLogger({
|
|
202
|
-
logLevel: args.serviceArgs.logLevel ?? process.env.LOG_LEVEL ?? "info",
|
|
203
|
-
port: args.port,
|
|
204
|
-
logDir: args.appDataRoot,
|
|
205
|
-
appName: `swerve`,
|
|
206
|
-
hostName: os.hostname(),
|
|
207
|
-
pid: process.pid,
|
|
208
|
-
});
|
|
209
|
-
|
|
210
205
|
gLogger.debug(`Swerve Args: ${JSON.stringify(args)}`);
|
|
211
206
|
|
|
212
207
|
const PORT = args.port ?? 3005;
|
|
@@ -306,7 +301,7 @@ export class SwerveManager implements ISwerveManager {
|
|
|
306
301
|
logger,
|
|
307
302
|
});
|
|
308
303
|
|
|
309
|
-
|
|
304
|
+
gLogger.debug(`Got web service`);
|
|
310
305
|
|
|
311
306
|
gLogger.debug(`Installing web service...`);
|
|
312
307
|
await service.install({});
|
package/src/utils/getArgs.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
2
|
import { ILogger } from "@swizzyweb/swizzy-common";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import process from "node:process";
|
|
4
|
+
import process, { cwd } from "node:process";
|
|
5
5
|
import { IConfig, IService, KeyValue } from "../config/index.js";
|
|
6
6
|
import { SwerveConfigParser } from "../config/config-parser.js";
|
|
7
7
|
import { deepMerge } from "@swizzyweb/swizzy-common";
|
|
8
8
|
import { getPackageJson } from "./getPackageJson.js";
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
9
10
|
|
|
10
11
|
function getHelpText() {
|
|
11
12
|
return `Help --
|
|
@@ -85,6 +86,7 @@ export interface SwerveArgs extends IConfig {
|
|
|
85
86
|
appDataRoot?: string;
|
|
86
87
|
serviceArgs?: KeyValue<any>;
|
|
87
88
|
logLevel: string;
|
|
89
|
+
noLogFile: boolean;
|
|
88
90
|
[key: string]: any;
|
|
89
91
|
}
|
|
90
92
|
|
|
@@ -96,6 +98,7 @@ function getDefaultArgs(): SwerveArgs {
|
|
|
96
98
|
services: {},
|
|
97
99
|
port: 3005,
|
|
98
100
|
serviceArgs: {},
|
|
101
|
+
noLogFile: false,
|
|
99
102
|
};
|
|
100
103
|
}
|
|
101
104
|
const ARG_PREFIX = "--";
|
|
@@ -139,6 +142,11 @@ function tryParseNumberArg(val): number | boolean {
|
|
|
139
142
|
|
|
140
143
|
function parseArgValue(val: string, logger: ILogger<any>) {
|
|
141
144
|
try {
|
|
145
|
+
if (`${val}`.toLocaleLowerCase() == "true") {
|
|
146
|
+
return true;
|
|
147
|
+
} else if (`${val}`.toLocaleLowerCase() == "false") {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
142
150
|
return JSON.parse(val);
|
|
143
151
|
} catch (e) {
|
|
144
152
|
logger.warn(
|
|
@@ -155,7 +163,8 @@ export async function getArgs(
|
|
|
155
163
|
logger: ILogger<any>,
|
|
156
164
|
): Promise<SwerveArgs> {
|
|
157
165
|
let argKey = undefined;
|
|
158
|
-
let
|
|
166
|
+
let defaultArgs = getDefaultArgs();
|
|
167
|
+
let swerveArgs = defaultArgs;
|
|
159
168
|
let configFromFile: IConfig;
|
|
160
169
|
const serviceCounts = new Map<string, number>();
|
|
161
170
|
for (let i = 2; i < args.length; i++) {
|
|
@@ -171,8 +180,12 @@ export async function getArgs(
|
|
|
171
180
|
argKey = undefined;
|
|
172
181
|
continue;
|
|
173
182
|
}
|
|
183
|
+
if (Object.keys(defaultArgs).includes(argKey)) {
|
|
184
|
+
swerveArgs[argKey] = parseArgValue(nextVal, logger);
|
|
185
|
+
}
|
|
174
186
|
swerveArgs.serviceArgs[argKey] = parseArgValue(nextVal, logger);
|
|
175
187
|
argKey = undefined;
|
|
188
|
+
|
|
176
189
|
continue;
|
|
177
190
|
}
|
|
178
191
|
if (nextVal.startsWith(ARG_PREFIX)) {
|
|
@@ -202,9 +215,17 @@ export async function getArgs(
|
|
|
202
215
|
// serviceEntry[1].servicePath ?? serviceEntry[1].packageName;
|
|
203
216
|
if (!servicePath) {
|
|
204
217
|
serviceEntry[1].servicePath = packageName!;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
218
|
+
const localPackage = path.join(cwd(), "node_modules", packageName);
|
|
219
|
+
const packageJsonPath = path.join(localPackage, "package.json");
|
|
220
|
+
if (existsSync(path.join(packageJsonPath))) {
|
|
221
|
+
const json = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
222
|
+
const main = json.main;
|
|
223
|
+
serviceEntry[1].servicePath = path.join(localPackage, main);
|
|
224
|
+
} else {
|
|
225
|
+
serviceEntry[1].servicePath = getPackageJson(
|
|
226
|
+
packageName!,
|
|
227
|
+
).servicePath;
|
|
228
|
+
}
|
|
208
229
|
} else {
|
|
209
230
|
const serviceData = getService(servicePath, logger);
|
|
210
231
|
serviceEntry[1].packageName = serviceData.packageJson?.name;
|
|
@@ -105,7 +105,7 @@ export function getLoggerForService(
|
|
|
105
105
|
const hostName = os.hostname();
|
|
106
106
|
const logDir = serviceArgs.logDir;
|
|
107
107
|
const appDataRoot = serviceArgs.appDataRoot;
|
|
108
|
-
|
|
108
|
+
const noLogFile = serviceArgs.noLogFile ?? gLogger.getLoggerProps().noLogFile;
|
|
109
109
|
return gLogger.clone({
|
|
110
110
|
port,
|
|
111
111
|
appName,
|
|
@@ -116,5 +116,6 @@ export function getLoggerForService(
|
|
|
116
116
|
logLevel,
|
|
117
117
|
ownerName,
|
|
118
118
|
logFileName,
|
|
119
|
+
noLogFile,
|
|
119
120
|
});
|
|
120
121
|
}
|