@faasjs/dev 8.0.0-beta.6 → 8.0.0-beta.8

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/README.md CHANGED
@@ -14,7 +14,6 @@ npm install @faasjs/dev
14
14
  ## Features
15
15
 
16
16
  - Vite integration for in-process FaasJS API during local development.
17
- - PGlite helpers for lightweight database setup in tests.
18
17
  - Test helpers to invoke and assert FaasJS functions.
19
18
 
20
19
  ## Usage: Vite integration
@@ -27,24 +26,6 @@ export default defineConfig({
27
26
  })
28
27
  ```
29
28
 
30
- ## Usage: PGlite helpers
31
-
32
- ```ts
33
- import {
34
- createPgliteKnex,
35
- mountFaasKnex,
36
- unmountFaasKnex,
37
- } from '@faasjs/dev'
38
-
39
- const db = createPgliteKnex()
40
- mountFaasKnex(db)
41
-
42
- // run tests...
43
-
44
- await db.destroy()
45
- unmountFaasKnex()
46
- ```
47
-
48
29
  ## Usage: Test helpers
49
30
 
50
31
  ```ts
@@ -61,21 +42,17 @@ expect(response.data).toEqual({ message: 'Hello, FaasJS' })
61
42
  ## API
62
43
 
63
44
  - Vite: [viteFaasJsServer](functions/viteFaasJsServer.md)
64
- - PGlite: [createPgliteKnex](functions/createPgliteKnex.md), [mountFaasKnex](functions/mountFaasKnex.md), [unmountFaasKnex](functions/unmountFaasKnex.md), [MountFaasKnexOptions](type-aliases/MountFaasKnexOptions.md)
65
- - Test: [test](functions/test.md), [FuncWarper](classes/FuncWarper.md), [streamToString](functions/streamToString.md)
45
+ - Test: [test](functions/test.md), [FuncWarper](classes/FuncWarper.md), [streamToText](functions/streamToText.md), [streamToObject](functions/streamToObject.md), [streamToString](variables/streamToString.md)
66
46
 
67
47
  ## Functions
68
48
 
69
- - [createPgliteKnex](functions/createPgliteKnex.md)
70
- - [defineFunc](functions/defineFunc.md)
71
49
  - [generateFaasTypes](functions/generateFaasTypes.md)
72
50
  - [isTypegenSourceFile](functions/isTypegenSourceFile.md)
73
- - [mountFaasKnex](functions/mountFaasKnex.md)
74
51
  - [nameFunc](functions/nameFunc.md)
75
52
  - [parseFuncFilenameFromStack](functions/parseFuncFilenameFromStack.md)
76
- - [streamToString](functions/streamToString.md)
53
+ - [streamToObject](functions/streamToObject.md)
54
+ - [streamToText](functions/streamToText.md)
77
55
  - [test](functions/test.md)
78
- - [unmountFaasKnex](functions/unmountFaasKnex.md)
79
56
  - [useFunc](functions/useFunc.md)
80
57
  - [usePlugin](functions/usePlugin.md)
81
58
  - [viteFaasJsServer](functions/viteFaasJsServer.md)
@@ -103,7 +80,6 @@ expect(response.data).toEqual({ message: 'Hello, FaasJS' })
103
80
  - [InvokeData](type-aliases/InvokeData.md)
104
81
  - [LifeCycleKey](type-aliases/LifeCycleKey.md)
105
82
  - [MountData](type-aliases/MountData.md)
106
- - [MountFaasKnexOptions](type-aliases/MountFaasKnexOptions.md)
107
83
  - [Next](type-aliases/Next.md)
108
84
  - [NormalizePluginType](type-aliases/NormalizePluginType.md)
109
85
  - [Plugin](type-aliases/Plugin.md)
@@ -111,3 +87,7 @@ expect(response.data).toEqual({ message: 'Hello, FaasJS' })
111
87
  - [Simplify](type-aliases/Simplify.md)
112
88
  - [UnionToIntersection](type-aliases/UnionToIntersection.md)
113
89
  - [UseifyPlugin](type-aliases/UseifyPlugin.md)
90
+
91
+ ## Variables
92
+
93
+ - [streamToString](variables/streamToString.md)
@@ -0,0 +1,36 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __exportAll = (all, no_symbols) => {
7
+ let target = {};
8
+ for (var name in all) {
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
13
+ }
14
+ if (!no_symbols) {
15
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
16
+ }
17
+ return target;
18
+ };
19
+ var __copyProps = (to, from, except, desc) => {
20
+ if (from && typeof from === "object" || typeof from === "function") {
21
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
22
+ key = keys[i];
23
+ if (!__hasOwnProp.call(to, key) && key !== except) {
24
+ __defProp(to, key, {
25
+ get: ((k) => from[k]).bind(null, key),
26
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
27
+ });
28
+ }
29
+ }
30
+ }
31
+ return to;
32
+ };
33
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
34
+
35
+ //#endregion
36
+ export { __reExport as n, __exportAll as t };
package/dist/cli.cjs CHANGED
@@ -1,278 +1,12 @@
1
- 'use strict';
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_typegen = require('./typegen-C6t9LIyi.cjs');
2
3
 
3
- var fs = require('fs');
4
- var promises = require('fs/promises');
5
- var path = require('path');
6
- var load = require('@faasjs/load');
7
- var logger = require('@faasjs/logger');
4
+ //#region package.json
5
+ var version = "8.0.0-beta.7";
8
6
 
9
- // package.json
10
- var package_default = {
11
- name: "@faasjs/dev",
12
- version: "v8.0.0-beta.5",
13
- license: "MIT",
14
- type: "module",
15
- main: "dist/index.cjs",
16
- module: "dist/index.mjs",
17
- types: "dist/index.d.ts",
18
- bin: {
19
- "faas-types": "faas-types.mjs"
20
- },
21
- exports: {
22
- ".": {
23
- types: "./dist/index.d.ts",
24
- import: "./dist/index.mjs",
25
- require: "./dist/index.cjs"
26
- }
27
- },
28
- homepage: "https://faasjs.com/doc/dev",
29
- repository: {
30
- type: "git",
31
- url: "git+https://github.com/faasjs/faasjs.git",
32
- directory: "packages/dev"
33
- },
34
- bugs: {
35
- url: "https://github.com/faasjs/faasjs/issues"
36
- },
37
- funding: "https://github.com/sponsors/faasjs",
38
- scripts: {
39
- build: "tsup-node --entry src/index.ts --entry src/cli.ts --config ../../tsup.config.ts"
40
- },
41
- files: [
42
- "dist",
43
- "faas-types.mjs"
44
- ],
45
- peerDependencies: {
46
- "@electric-sql/pglite": "*",
47
- "@faasjs/deep_merge": ">=v8.0.0-beta.5",
48
- "@faasjs/func": ">=v8.0.0-beta.5",
49
- "@faasjs/http": ">=v8.0.0-beta.5",
50
- "@faasjs/server": ">=v8.0.0-beta.5",
51
- "@faasjs/knex": ">=v8.0.0-beta.5",
52
- "@faasjs/load": ">=v8.0.0-beta.5",
53
- "@faasjs/logger": ">=v8.0.0-beta.5",
54
- "@types/node": "*",
55
- knex: "*",
56
- vite: "*",
57
- vitest: "*",
58
- "knex-pglite": "*"
59
- },
60
- devDependencies: {
61
- "@electric-sql/pglite": "*",
62
- "@faasjs/deep_merge": ">=v8.0.0-beta.5",
63
- "@faasjs/func": ">=v8.0.0-beta.5",
64
- "@faasjs/http": ">=v8.0.0-beta.5",
65
- "@faasjs/server": ">=v8.0.0-beta.5",
66
- "@faasjs/knex": ">=v8.0.0-beta.5",
67
- "@faasjs/load": ">=v8.0.0-beta.5",
68
- "@faasjs/logger": ">=v8.0.0-beta.5",
69
- "@types/node": "*",
70
- knex: "*",
71
- vite: "*",
72
- vitest: "*",
73
- "knex-pglite": "*"
74
- },
75
- engines: {
76
- node: ">=24.0.0",
77
- npm: ">=11.0.0"
78
- }
79
- };
80
- function resolveFaasStaging() {
81
- return process.env.FaasEnv || "development";
82
- }
83
- function resolveServerConfig(root, logger, defaultBase = "/") {
84
- const projectRoot = path.resolve(root);
85
- const staging = resolveFaasStaging();
86
- const srcRoot = path.join(projectRoot, "src");
87
- const config = load.loadConfig(
88
- srcRoot,
89
- path.join(srcRoot, "index.func.ts"),
90
- staging,
91
- logger
92
- );
93
- const server = config && typeof config === "object" ? config.server : void 0;
94
- const resolvedRoot = server && typeof server.root === "string" && server.root.length ? path.resolve(projectRoot, server.root) : projectRoot;
95
- const resolvedBase = server && typeof server.base === "string" && server.base.length ? server.base : defaultBase;
96
- return {
97
- root: resolvedRoot,
98
- base: resolvedBase,
99
- staging
100
- };
101
- }
102
-
103
- // src/typegen.ts
104
- function normalizeSlashes(path) {
105
- return path.replace(/\\/g, "/");
106
- }
107
- function normalizeRoute(path) {
108
- const normalized = path.replace(/\/+/g, "/");
109
- if (!normalized.length || normalized === "/") return "/";
110
- return normalized.endsWith("/") ? normalized.slice(0, -1) : normalized;
111
- }
112
- function toRoute(srcRoot, file) {
113
- const relativePath = normalizeSlashes(path.relative(srcRoot, file));
114
- const noTsPath = relativePath.replace(/\.ts$/, "");
115
- if (noTsPath === "index.func") return { route: "/", priority: 2 };
116
- if (noTsPath === "default.func") return { route: "/*", priority: 1 };
117
- if (noTsPath.endsWith("/index.func"))
118
- return {
119
- route: normalizeRoute(`/${noTsPath.slice(0, -"/index.func".length)}`),
120
- priority: 2
121
- };
122
- if (noTsPath.endsWith("/default.func"))
123
- return {
124
- route: normalizeRoute(`/${noTsPath.slice(0, -"/default.func".length)}/*`),
125
- priority: 1
126
- };
127
- if (noTsPath.endsWith(".func"))
128
- return {
129
- route: normalizeRoute(`/${noTsPath.slice(0, -".func".length)}`),
130
- priority: 3
131
- };
132
- throw Error(`[faas-types] Invalid func filename: ${file}`);
133
- }
134
- function toImportPath(fromFile, targetFile) {
135
- const fromDir = path.dirname(fromFile);
136
- const importPath = normalizeSlashes(path.relative(fromDir, targetFile)).replace(
137
- /\.ts$/,
138
- ""
139
- );
140
- if (importPath.startsWith(".")) return importPath;
141
- return `./${importPath}`;
142
- }
143
- function parsePluginTypes(config) {
144
- const pluginConfig = config.plugins;
145
- if (!pluginConfig || typeof pluginConfig !== "object") return [];
146
- const pluginTypes = /* @__PURE__ */ new Set();
147
- for (const key in pluginConfig) {
148
- const data = pluginConfig[key];
149
- if (typeof data === "string" && data.length) {
150
- pluginTypes.add(data);
151
- continue;
152
- }
153
- if (data && typeof data === "object") {
154
- if (typeof data.type === "string" && data.type.length)
155
- pluginTypes.add(data.type);
156
- else pluginTypes.add(key);
157
- continue;
158
- }
159
- pluginTypes.add(key);
160
- }
161
- return Array.from(pluginTypes).sort((a, b) => a.localeCompare(b));
162
- }
163
- async function readFuncFiles(dir) {
164
- const result = [];
165
- async function walk(currentDir) {
166
- const entries = await promises.readdir(currentDir, {
167
- withFileTypes: true
168
- });
169
- for (const entry of entries) {
170
- if (entry.name === ".faasjs" || entry.name === "node_modules") continue;
171
- const filePath = path.join(currentDir, entry.name);
172
- if (entry.isDirectory()) {
173
- await walk(filePath);
174
- continue;
175
- }
176
- if (entry.isFile() && entry.name.endsWith(".func.ts"))
177
- result.push(filePath);
178
- }
179
- }
180
- await walk(dir);
181
- return result.sort((a, b) => a.localeCompare(b));
182
- }
183
- function formatTypes(items) {
184
- const actionLines = items.map((item) => {
185
- return ` ${JSON.stringify(item.route)}: __FaasFuncAction<__FaasModuleFunc<typeof import(${JSON.stringify(item.importPath)})>>`;
186
- });
187
- const eventLines = items.map((item) => {
188
- const plugins = item.pluginTypes.length ? `[${item.pluginTypes.map((type) => JSON.stringify(type)).join(", ")}]` : "[]";
189
- return ` ${JSON.stringify(item.route)}: InferPluginEvent<${plugins}>`;
190
- });
191
- return `/**
192
- * Generated by @faasjs/dev.
193
- *
194
- * Do not edit this file manually.
195
- */
196
- import type { Func, InferPluginEvent } from '@faasjs/func'
197
-
198
- type __FaasModuleFunc<TModule> = TModule extends { func: infer TFunc }
199
- ? TFunc extends Func
200
- ? TFunc
201
- : never
202
- : TModule extends { default: infer TFunc }
203
- ? TFunc extends Func
204
- ? TFunc
205
- : never
206
- : never
207
-
208
- type __FaasFuncAction<TFunc extends Func> = {
209
- Params: Parameters<ReturnType<TFunc['export']>['handler']>[0]['params']
210
- Data: Awaited<ReturnType<ReturnType<TFunc['export']>['handler']>>
211
- }
212
-
213
- declare module '@faasjs/types' {
214
- interface FaasActions {
215
- ${actionLines.length ? `${actionLines.join("\n")}
216
- ` : ""} }
217
-
218
- interface FaasEvents {
219
- ${eventLines.length ? `${eventLines.join("\n")}
220
- ` : ""} }
221
- }
222
- `;
223
- }
224
- async function generateFaasTypes(options = {}) {
225
- const logger$1 = options.logger || new logger.Logger("FaasJs:Typegen");
226
- const { root: projectRoot, staging } = resolveServerConfig(
227
- options.root || process.cwd(),
228
- logger$1
229
- );
230
- const srcRoot = path.join(projectRoot, "src");
231
- const output = path.join(srcRoot, ".faasjs", "types.d.ts");
232
- if (!fs.existsSync(srcRoot))
233
- throw Error(`[faas-types] Source directory not found: ${srcRoot}`);
234
- const files = await readFuncFiles(srcRoot);
235
- const routeMap = /* @__PURE__ */ new Map();
236
- for (const file of files) {
237
- const { route, priority } = toRoute(srcRoot, file);
238
- const config = load.loadConfig(srcRoot, file, staging, logger$1);
239
- const pluginTypes = parsePluginTypes(config);
240
- const importPath = toImportPath(output, file);
241
- const prev = routeMap.get(route);
242
- if (!prev || priority > prev.priority)
243
- routeMap.set(route, {
244
- route,
245
- importPath,
246
- pluginTypes,
247
- priority
248
- });
249
- }
250
- const items = Array.from(routeMap.values()).sort(
251
- (a, b) => a.route.localeCompare(b.route)
252
- );
253
- const content = formatTypes(items);
254
- let changed = true;
255
- try {
256
- const previous = await promises.readFile(output, "utf8");
257
- if (previous === content) changed = false;
258
- } catch (_error) {
259
- }
260
- if (changed) {
261
- await promises.mkdir(path.dirname(output), {
262
- recursive: true
263
- });
264
- await promises.writeFile(output, content);
265
- }
266
- return {
267
- output,
268
- changed,
269
- fileCount: files.length,
270
- routeCount: items.length
271
- };
272
- }
273
-
274
- // src/cli.ts
275
- var HelpText = `Generate FaasJS API/event type declarations.
7
+ //#endregion
8
+ //#region src/cli.ts
9
+ const HelpText = `Generate FaasJS API/event type declarations.
276
10
 
277
11
  Usage:
278
12
  faas-types [options]
@@ -283,53 +17,51 @@ Options:
283
17
  -v, --version Show version
284
18
  `;
285
19
  function parseCliArgs(argv) {
286
- const args = argv.slice(2);
287
- const options = {};
288
- const readValue = (index, name) => {
289
- const value = args[index + 1];
290
- if (!value || value.startsWith("-"))
291
- throw Error(`[faas-types] Missing value for ${name}`);
292
- return value;
293
- };
294
- for (let i = 0; i < args.length; i++) {
295
- const arg = args[i];
296
- if (arg === "-h" || arg === "--help") return { showHelp: true, options };
297
- if (arg === "-v" || arg === "--version")
298
- return {
299
- showVersion: true,
300
- options
301
- };
302
- if (arg === "--root") {
303
- options.root = readValue(i, arg);
304
- i++;
305
- continue;
306
- }
307
- throw Error(`[faas-types] Unknown option: ${arg}`);
308
- }
309
- return {
310
- options
311
- };
20
+ const args = argv.slice(2);
21
+ const options = {};
22
+ const readValue = (index, name) => {
23
+ const value = args[index + 1];
24
+ if (!value || value.startsWith("-")) throw Error(`[faas-types] Missing value for ${name}`);
25
+ return value;
26
+ };
27
+ for (let i = 0; i < args.length; i++) {
28
+ const arg = args[i];
29
+ if (arg === "-h" || arg === "--help") return {
30
+ showHelp: true,
31
+ options
32
+ };
33
+ if (arg === "-v" || arg === "--version") return {
34
+ showVersion: true,
35
+ options
36
+ };
37
+ if (arg === "--root") {
38
+ options.root = readValue(i, arg);
39
+ i++;
40
+ continue;
41
+ }
42
+ throw Error(`[faas-types] Unknown option: ${arg}`);
43
+ }
44
+ return { options };
312
45
  }
313
46
  async function main(argv = process.argv) {
314
- try {
315
- const parsed = parseCliArgs(argv);
316
- if (parsed.showHelp) {
317
- console.log(HelpText);
318
- return 0;
319
- }
320
- if (parsed.showVersion) {
321
- console.log(package_default.version);
322
- return 0;
323
- }
324
- const result = await generateFaasTypes(parsed.options);
325
- console.log(
326
- `[faas-types] ${result.changed ? "Generated" : "Up to date"} ${result.output} (${result.routeCount} routes from ${result.fileCount} files)`
327
- );
328
- return 0;
329
- } catch (error) {
330
- console.error(error?.message || error);
331
- return 1;
332
- }
47
+ try {
48
+ const parsed = parseCliArgs(argv);
49
+ if (parsed.showHelp) {
50
+ console.log(HelpText);
51
+ return 0;
52
+ }
53
+ if (parsed.showVersion) {
54
+ console.log(version);
55
+ return 0;
56
+ }
57
+ const result = await require_typegen.generateFaasTypes(parsed.options);
58
+ console.log(`[faas-types] ${result.changed ? "Generated" : "Up to date"} ${result.output} (${result.routeCount} routes from ${result.fileCount} files)`);
59
+ return 0;
60
+ } catch (error) {
61
+ console.error(error?.message || error);
62
+ return 1;
63
+ }
333
64
  }
334
65
 
335
- exports.main = main;
66
+ //#endregion
67
+ exports.main = main;
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ //#region src/cli.d.ts
1
2
  declare function main(argv?: string[]): Promise<number>;
2
-
3
- export { main };
3
+ //#endregion
4
+ export { main };
package/dist/cli.mjs CHANGED
@@ -1,79 +1,11 @@
1
- import { generateFaasTypes } from './chunk-3FXFWIBW.mjs';
1
+ import { t as generateFaasTypes } from "./typegen-D5s91_xL.mjs";
2
2
 
3
- // package.json
4
- var package_default = {
5
- name: "@faasjs/dev",
6
- version: "v8.0.0-beta.5",
7
- license: "MIT",
8
- type: "module",
9
- main: "dist/index.cjs",
10
- module: "dist/index.mjs",
11
- types: "dist/index.d.ts",
12
- bin: {
13
- "faas-types": "faas-types.mjs"
14
- },
15
- exports: {
16
- ".": {
17
- types: "./dist/index.d.ts",
18
- import: "./dist/index.mjs",
19
- require: "./dist/index.cjs"
20
- }
21
- },
22
- homepage: "https://faasjs.com/doc/dev",
23
- repository: {
24
- type: "git",
25
- url: "git+https://github.com/faasjs/faasjs.git",
26
- directory: "packages/dev"
27
- },
28
- bugs: {
29
- url: "https://github.com/faasjs/faasjs/issues"
30
- },
31
- funding: "https://github.com/sponsors/faasjs",
32
- scripts: {
33
- build: "tsup-node --entry src/index.ts --entry src/cli.ts --config ../../tsup.config.ts"
34
- },
35
- files: [
36
- "dist",
37
- "faas-types.mjs"
38
- ],
39
- peerDependencies: {
40
- "@electric-sql/pglite": "*",
41
- "@faasjs/deep_merge": ">=v8.0.0-beta.5",
42
- "@faasjs/func": ">=v8.0.0-beta.5",
43
- "@faasjs/http": ">=v8.0.0-beta.5",
44
- "@faasjs/server": ">=v8.0.0-beta.5",
45
- "@faasjs/knex": ">=v8.0.0-beta.5",
46
- "@faasjs/load": ">=v8.0.0-beta.5",
47
- "@faasjs/logger": ">=v8.0.0-beta.5",
48
- "@types/node": "*",
49
- knex: "*",
50
- vite: "*",
51
- vitest: "*",
52
- "knex-pglite": "*"
53
- },
54
- devDependencies: {
55
- "@electric-sql/pglite": "*",
56
- "@faasjs/deep_merge": ">=v8.0.0-beta.5",
57
- "@faasjs/func": ">=v8.0.0-beta.5",
58
- "@faasjs/http": ">=v8.0.0-beta.5",
59
- "@faasjs/server": ">=v8.0.0-beta.5",
60
- "@faasjs/knex": ">=v8.0.0-beta.5",
61
- "@faasjs/load": ">=v8.0.0-beta.5",
62
- "@faasjs/logger": ">=v8.0.0-beta.5",
63
- "@types/node": "*",
64
- knex: "*",
65
- vite: "*",
66
- vitest: "*",
67
- "knex-pglite": "*"
68
- },
69
- engines: {
70
- node: ">=24.0.0",
71
- npm: ">=11.0.0"
72
- }
73
- };
3
+ //#region package.json
4
+ var version = "8.0.0-beta.7";
74
5
 
75
- // src/cli.ts
76
- var HelpText = `Generate FaasJS API/event type declarations.
6
+ //#endregion
7
+ //#region src/cli.ts
8
+ const HelpText = `Generate FaasJS API/event type declarations.
77
9
 
78
10
  Usage:
79
11
  faas-types [options]
@@ -84,53 +16,51 @@ Options:
84
16
  -v, --version Show version
85
17
  `;
86
18
  function parseCliArgs(argv) {
87
- const args = argv.slice(2);
88
- const options = {};
89
- const readValue = (index, name) => {
90
- const value = args[index + 1];
91
- if (!value || value.startsWith("-"))
92
- throw Error(`[faas-types] Missing value for ${name}`);
93
- return value;
94
- };
95
- for (let i = 0; i < args.length; i++) {
96
- const arg = args[i];
97
- if (arg === "-h" || arg === "--help") return { showHelp: true, options };
98
- if (arg === "-v" || arg === "--version")
99
- return {
100
- showVersion: true,
101
- options
102
- };
103
- if (arg === "--root") {
104
- options.root = readValue(i, arg);
105
- i++;
106
- continue;
107
- }
108
- throw Error(`[faas-types] Unknown option: ${arg}`);
109
- }
110
- return {
111
- options
112
- };
19
+ const args = argv.slice(2);
20
+ const options = {};
21
+ const readValue = (index, name) => {
22
+ const value = args[index + 1];
23
+ if (!value || value.startsWith("-")) throw Error(`[faas-types] Missing value for ${name}`);
24
+ return value;
25
+ };
26
+ for (let i = 0; i < args.length; i++) {
27
+ const arg = args[i];
28
+ if (arg === "-h" || arg === "--help") return {
29
+ showHelp: true,
30
+ options
31
+ };
32
+ if (arg === "-v" || arg === "--version") return {
33
+ showVersion: true,
34
+ options
35
+ };
36
+ if (arg === "--root") {
37
+ options.root = readValue(i, arg);
38
+ i++;
39
+ continue;
40
+ }
41
+ throw Error(`[faas-types] Unknown option: ${arg}`);
42
+ }
43
+ return { options };
113
44
  }
114
45
  async function main(argv = process.argv) {
115
- try {
116
- const parsed = parseCliArgs(argv);
117
- if (parsed.showHelp) {
118
- console.log(HelpText);
119
- return 0;
120
- }
121
- if (parsed.showVersion) {
122
- console.log(package_default.version);
123
- return 0;
124
- }
125
- const result = await generateFaasTypes(parsed.options);
126
- console.log(
127
- `[faas-types] ${result.changed ? "Generated" : "Up to date"} ${result.output} (${result.routeCount} routes from ${result.fileCount} files)`
128
- );
129
- return 0;
130
- } catch (error) {
131
- console.error(error?.message || error);
132
- return 1;
133
- }
46
+ try {
47
+ const parsed = parseCliArgs(argv);
48
+ if (parsed.showHelp) {
49
+ console.log(HelpText);
50
+ return 0;
51
+ }
52
+ if (parsed.showVersion) {
53
+ console.log(version);
54
+ return 0;
55
+ }
56
+ const result = await generateFaasTypes(parsed.options);
57
+ console.log(`[faas-types] ${result.changed ? "Generated" : "Up to date"} ${result.output} (${result.routeCount} routes from ${result.fileCount} files)`);
58
+ return 0;
59
+ } catch (error) {
60
+ console.error(error?.message || error);
61
+ return 1;
62
+ }
134
63
  }
135
64
 
136
- export { main };
65
+ //#endregion
66
+ export { main };