arri 0.57.0 → 0.57.3
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/dist/cli.cjs
CHANGED
|
@@ -11,7 +11,7 @@ const esbuild = require('esbuild');
|
|
|
11
11
|
const esbuildPluginReplace = require('esbuild-plugin-replace');
|
|
12
12
|
const path = require('pathe');
|
|
13
13
|
const prettier = require('prettier');
|
|
14
|
-
const dev = require('./shared/arri.
|
|
14
|
+
const dev = require('./shared/arri.976d7393.cjs');
|
|
15
15
|
const ofetch = require('ofetch');
|
|
16
16
|
const Degit = require('degit');
|
|
17
17
|
const enquirer = require('enquirer');
|
package/dist/cli.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { build as build$1 } from 'esbuild';
|
|
|
9
9
|
import { replace } from 'esbuild-plugin-replace';
|
|
10
10
|
import path from 'pathe';
|
|
11
11
|
import prettier from 'prettier';
|
|
12
|
-
import { d as defaultConfig, l as logger, s as setupWorkingDir, c as createAppWithRoutesModule, O as OUT_CODEGEN, e as OUT_SERVER_ENTRY, G as GEN_APP_FILE, f as OUT_APP_FILE, i as isArriConfig, g as getArriPackageMetadata, h as dev } from './shared/arri.
|
|
12
|
+
import { d as defaultConfig, l as logger, s as setupWorkingDir, c as createAppWithRoutesModule, O as OUT_CODEGEN, e as OUT_SERVER_ENTRY, G as GEN_APP_FILE, f as OUT_APP_FILE, i as isArriConfig, g as getArriPackageMetadata, h as dev } from './shared/arri.1de410ff.mjs';
|
|
13
13
|
import { ofetch } from 'ofetch';
|
|
14
14
|
import Degit from 'degit';
|
|
15
15
|
import enquirer from 'enquirer';
|
package/dist/index.cjs
CHANGED
|
@@ -4,19 +4,19 @@ const codegenDart = require('@arrirpc/codegen-dart');
|
|
|
4
4
|
const codegenKotlin = require('@arrirpc/codegen-kotlin');
|
|
5
5
|
const codegenRust = require('@arrirpc/codegen-rust');
|
|
6
6
|
const codegenTs = require('@arrirpc/codegen-ts');
|
|
7
|
-
const dev = require('./shared/arri.
|
|
7
|
+
const dev = require('./shared/arri.976d7393.cjs');
|
|
8
8
|
const codegenUtils = require('@arrirpc/codegen-utils');
|
|
9
9
|
require('node:fs');
|
|
10
|
-
require('node:fs/promises');
|
|
11
10
|
require('@joshmossas/listhen');
|
|
12
11
|
require('c12');
|
|
13
12
|
require('citty');
|
|
14
13
|
require('esbuild');
|
|
15
14
|
require('h3');
|
|
16
|
-
require('ofetch');
|
|
17
15
|
require('pathe');
|
|
16
|
+
require('node:fs/promises');
|
|
18
17
|
require('@arrirpc/schema');
|
|
19
18
|
require('consola');
|
|
19
|
+
require('ofetch');
|
|
20
20
|
require('prettier');
|
|
21
21
|
|
|
22
22
|
const generators = {
|
package/dist/index.mjs
CHANGED
|
@@ -2,19 +2,19 @@ import { dartClientGenerator } from '@arrirpc/codegen-dart';
|
|
|
2
2
|
import { kotlinClientGenerator } from '@arrirpc/codegen-kotlin';
|
|
3
3
|
import { rustClientGenerator } from '@arrirpc/codegen-rust';
|
|
4
4
|
import { typescriptClientGenerator } from '@arrirpc/codegen-ts';
|
|
5
|
-
export { D as DEV_DEFINITION_ENDPOINT, d as defaultConfig, b as defineConfig, i as isArriConfig, a as isResolvedArriConfig } from './shared/arri.
|
|
5
|
+
export { D as DEV_DEFINITION_ENDPOINT, d as defaultConfig, b as defineConfig, i as isArriConfig, a as isResolvedArriConfig } from './shared/arri.1de410ff.mjs';
|
|
6
6
|
export { createAppDefinition } from '@arrirpc/codegen-utils';
|
|
7
7
|
import 'node:fs';
|
|
8
|
-
import 'node:fs/promises';
|
|
9
8
|
import '@joshmossas/listhen';
|
|
10
9
|
import 'c12';
|
|
11
10
|
import 'citty';
|
|
12
11
|
import 'esbuild';
|
|
13
12
|
import 'h3';
|
|
14
|
-
import 'ofetch';
|
|
15
13
|
import 'pathe';
|
|
14
|
+
import 'node:fs/promises';
|
|
16
15
|
import '@arrirpc/schema';
|
|
17
16
|
import 'consola';
|
|
17
|
+
import 'ofetch';
|
|
18
18
|
import 'prettier';
|
|
19
19
|
|
|
20
20
|
const generators = {
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
|
-
import
|
|
3
|
-
import { camelCase, removeDisallowedChars, kebabCase, isAppDefinition } from '@arrirpc/codegen-utils';
|
|
4
|
-
import { listenAndWatch } from '@joshmossas/listhen';
|
|
2
|
+
import { listen } from '@joshmossas/listhen';
|
|
5
3
|
import { loadConfig } from 'c12';
|
|
6
4
|
import { defineCommand } from 'citty';
|
|
7
5
|
import * as esbuild from 'esbuild';
|
|
8
|
-
import 'h3';
|
|
9
|
-
import { ofetch } from 'ofetch';
|
|
6
|
+
import { dynamicEventHandler, toNodeListener, fromNodeMiddleware } from 'h3';
|
|
10
7
|
import path from 'pathe';
|
|
8
|
+
import fs from 'node:fs/promises';
|
|
9
|
+
import { camelCase, removeDisallowedChars, kebabCase } from '@arrirpc/codegen-utils';
|
|
11
10
|
import { a, ValidationError } from '@arrirpc/schema';
|
|
12
11
|
import { createConsola } from 'consola';
|
|
12
|
+
import { ofetch } from 'ofetch';
|
|
13
13
|
import prettier from 'prettier';
|
|
14
14
|
|
|
15
15
|
const logger = createConsola().withTag("arri");
|
|
16
16
|
const GEN_APP_FILE = "__arri_app.ts";
|
|
17
|
-
const GEN_SERVER_ENTRY_FILE = "__arri_server.ts";
|
|
18
17
|
const OUT_APP_FILE = "app.mjs";
|
|
19
18
|
const OUT_SERVER_ENTRY = "server.mjs";
|
|
20
19
|
const OUT_CODEGEN = "codegen.mjs";
|
|
@@ -290,7 +289,6 @@ const dev = defineCommand({
|
|
|
290
289
|
}
|
|
291
290
|
},
|
|
292
291
|
async run({ args }) {
|
|
293
|
-
process.env.ARRI_DEV_MODE = "true";
|
|
294
292
|
const { config } = await loadConfig({
|
|
295
293
|
configFile: path.resolve(args.config)
|
|
296
294
|
});
|
|
@@ -308,23 +306,7 @@ const dev = defineCommand({
|
|
|
308
306
|
await startDevServer(config);
|
|
309
307
|
}
|
|
310
308
|
});
|
|
311
|
-
const startListener = (config, showQr = false) => listenAndWatch(path.resolve(config.rootDir, ".output", OUT_SERVER_ENTRY), {
|
|
312
|
-
public: true,
|
|
313
|
-
port: config.port,
|
|
314
|
-
logger,
|
|
315
|
-
qr: showQr,
|
|
316
|
-
https: config.https,
|
|
317
|
-
http2: config.http2,
|
|
318
|
-
ws: true
|
|
319
|
-
});
|
|
320
309
|
async function bundleFilesContext(config) {
|
|
321
|
-
const serverContent = `import app from './${OUT_APP_FILE}';
|
|
322
|
-
|
|
323
|
-
export default app.h3App;`;
|
|
324
|
-
await fs.writeFile(
|
|
325
|
-
path.resolve(config.rootDir, ".output", OUT_SERVER_ENTRY),
|
|
326
|
-
serverContent
|
|
327
|
-
);
|
|
328
310
|
return await esbuild.context({
|
|
329
311
|
...config.esbuild,
|
|
330
312
|
entryPoints: [
|
|
@@ -339,29 +321,67 @@ export default app.h3App;`;
|
|
|
339
321
|
platform: config.esbuild.platform ?? "node"
|
|
340
322
|
});
|
|
341
323
|
}
|
|
324
|
+
async function createDevServer(config) {
|
|
325
|
+
const h3 = await import('h3');
|
|
326
|
+
const app = h3.createApp();
|
|
327
|
+
const dynamicHandler = dynamicEventHandler(
|
|
328
|
+
() => "<div>initializing server...</div>"
|
|
329
|
+
);
|
|
330
|
+
app.use(dynamicHandler);
|
|
331
|
+
let ws;
|
|
332
|
+
const listener = await listen(toNodeListener(app), {
|
|
333
|
+
port: config.port,
|
|
334
|
+
https: config.https,
|
|
335
|
+
http2: config.http2,
|
|
336
|
+
public: true,
|
|
337
|
+
ws: {
|
|
338
|
+
resolve(info) {
|
|
339
|
+
if (ws?.resolve) {
|
|
340
|
+
return ws.resolve(info);
|
|
341
|
+
}
|
|
342
|
+
return {};
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
async function reload() {
|
|
347
|
+
const appEntry = (await import(path.resolve(
|
|
348
|
+
config.rootDir,
|
|
349
|
+
".output",
|
|
350
|
+
`${OUT_APP_FILE}?version=${Date.now()}`
|
|
351
|
+
))).default;
|
|
352
|
+
dynamicHandler.set(fromNodeMiddleware(appEntry.h3App.handler));
|
|
353
|
+
ws = appEntry.h3App.websocket;
|
|
354
|
+
return appEntry.getAppDefinition();
|
|
355
|
+
}
|
|
356
|
+
await reload();
|
|
357
|
+
return {
|
|
358
|
+
h3App: app,
|
|
359
|
+
listener,
|
|
360
|
+
reload,
|
|
361
|
+
ws
|
|
362
|
+
};
|
|
363
|
+
}
|
|
342
364
|
async function startDevServer(config) {
|
|
343
365
|
await setupWorkingDir(config);
|
|
344
366
|
const watcher = await import('chokidar');
|
|
345
367
|
let fileWatcher;
|
|
346
|
-
await
|
|
347
|
-
createEntryModule(config),
|
|
348
|
-
createAppWithRoutesModule(config)
|
|
349
|
-
]);
|
|
368
|
+
await createAppWithRoutesModule(config);
|
|
350
369
|
const context = await bundleFilesContext(config);
|
|
351
370
|
await context.rebuild();
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
371
|
+
const devServer = await createDevServer(config);
|
|
372
|
+
let appDef = await devServer.reload();
|
|
373
|
+
let appDefStr = JSON.stringify(appDef);
|
|
374
|
+
if (config.generators.length) {
|
|
375
|
+
logger.info(`Running generators...`);
|
|
376
|
+
await generateClientsFromDefinition(appDef, config);
|
|
377
|
+
} else {
|
|
378
|
+
logger.warn(`No generators specified in config. Skipping codegen.`);
|
|
379
|
+
}
|
|
356
380
|
const cleanExit = async () => {
|
|
357
381
|
process.exit();
|
|
358
382
|
};
|
|
359
383
|
process.on("exit", async () => {
|
|
360
|
-
await Promise.allSettled([
|
|
361
|
-
listener.close(),
|
|
362
|
-
fileWatcher?.close(),
|
|
363
|
-
context.dispose()
|
|
364
|
-
]);
|
|
384
|
+
await Promise.allSettled([fileWatcher?.close(), context.dispose()]);
|
|
365
385
|
});
|
|
366
386
|
process.on("SIGINT", cleanExit);
|
|
367
387
|
process.on("SIGTERM", cleanExit);
|
|
@@ -404,65 +424,47 @@ async function startDevServer(config) {
|
|
|
404
424
|
return;
|
|
405
425
|
}
|
|
406
426
|
await createAppWithRoutesModule(config);
|
|
407
|
-
let bundleCreated = false;
|
|
408
427
|
try {
|
|
428
|
+
const reloadStart = (/* @__PURE__ */ new Date()).getTime();
|
|
409
429
|
logger.log(
|
|
410
430
|
"Change detected. Bundling files and restarting server...."
|
|
411
431
|
);
|
|
412
432
|
await context.rebuild();
|
|
413
|
-
|
|
433
|
+
const newAppDef = await devServer.reload();
|
|
434
|
+
const newAppDefStr = JSON.stringify(newAppDef);
|
|
435
|
+
logger.log(
|
|
436
|
+
`Server restarted in ${( new Date()).getTime() - reloadStart}ms`
|
|
437
|
+
);
|
|
438
|
+
if (config.generators.length && newAppDefStr !== appDefStr) {
|
|
439
|
+
logger.info(
|
|
440
|
+
`App Definition updated. Regenerating clients...`
|
|
441
|
+
);
|
|
442
|
+
await generateClientsFromDefinition(newAppDef, config);
|
|
443
|
+
appDef = newAppDef;
|
|
444
|
+
appDefStr = newAppDefStr;
|
|
445
|
+
}
|
|
414
446
|
} catch (err) {
|
|
415
447
|
logger.error("ERROR", err);
|
|
416
|
-
bundleCreated = false;
|
|
417
|
-
}
|
|
418
|
-
if (bundleCreated && config.generators.length) {
|
|
419
|
-
setTimeout(async () => {
|
|
420
|
-
await generateClients(config);
|
|
421
|
-
bundleCreated = false;
|
|
422
|
-
}, 1e3);
|
|
423
448
|
}
|
|
424
449
|
});
|
|
425
450
|
}
|
|
426
451
|
await load();
|
|
427
452
|
}
|
|
428
|
-
async function
|
|
453
|
+
async function generateClientsFromDefinition(appDef, config) {
|
|
454
|
+
const startTime = (/* @__PURE__ */ new Date()).getTime();
|
|
429
455
|
try {
|
|
430
|
-
const protocol = config.https === true || typeof config.https === "object" ? "https" : "http";
|
|
431
|
-
if (protocol === "https") {
|
|
432
|
-
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
433
|
-
}
|
|
434
|
-
const result = await ofetch(
|
|
435
|
-
`${protocol}://127.0.0.1:${config.port}${DEV_DEFINITION_ENDPOINT}`
|
|
436
|
-
);
|
|
437
|
-
if (!isAppDefinition(result)) {
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
|
-
logger.log(`Generating client code...`);
|
|
441
456
|
const clientCount = config.generators.length;
|
|
442
457
|
await Promise.allSettled(
|
|
443
458
|
config.generators.map(
|
|
444
|
-
(generator) => generator.generator(
|
|
459
|
+
(generator) => generator.generator(appDef, true)
|
|
445
460
|
)
|
|
446
461
|
);
|
|
447
462
|
logger.success(
|
|
448
|
-
`Generated ${clientCount} client${clientCount === 1 ? "" : "s"}`
|
|
463
|
+
`Generated ${clientCount} client${clientCount === 1 ? "" : "s"} in ${( new Date()).getTime() - startTime}ms`
|
|
449
464
|
);
|
|
450
465
|
} catch (err) {
|
|
451
466
|
logger.error(err);
|
|
452
467
|
}
|
|
453
468
|
}
|
|
454
|
-
async function createEntryModule(config) {
|
|
455
|
-
const appModule = path.resolve(config.rootDir, config.srcDir, config.entry);
|
|
456
|
-
const appImportParts = path.relative(path.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
457
|
-
appImportParts.pop();
|
|
458
|
-
const virtualEntry = `import { toNodeListener } from '@arrirpc/server';
|
|
459
|
-
import app from './${GEN_APP_FILE}';
|
|
460
|
-
|
|
461
|
-
export default app.h3App;`;
|
|
462
|
-
await fs.writeFile(
|
|
463
|
-
path.resolve(config.rootDir, config.buildDir, GEN_SERVER_ENTRY_FILE),
|
|
464
|
-
virtualEntry
|
|
465
|
-
);
|
|
466
|
-
}
|
|
467
469
|
|
|
468
470
|
export { DEV_DEFINITION_ENDPOINT as D, GEN_APP_FILE as G, OUT_CODEGEN as O, isResolvedArriConfig as a, defineConfig as b, createAppWithRoutesModule as c, defaultConfig as d, OUT_SERVER_ENTRY as e, OUT_APP_FILE as f, getArriPackageMetadata as g, dev as h, isArriConfig as i, logger as l, setupWorkingDir as s };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const fs = require('node:fs');
|
|
4
|
-
const fs$1 = require('node:fs/promises');
|
|
5
|
-
const codegenUtils = require('@arrirpc/codegen-utils');
|
|
6
4
|
const listhen = require('@joshmossas/listhen');
|
|
7
5
|
const c12 = require('c12');
|
|
8
6
|
const citty = require('citty');
|
|
9
7
|
const esbuild = require('esbuild');
|
|
10
|
-
require('h3');
|
|
11
|
-
const ofetch = require('ofetch');
|
|
8
|
+
const h3 = require('h3');
|
|
12
9
|
const path = require('pathe');
|
|
10
|
+
const fs$1 = require('node:fs/promises');
|
|
11
|
+
const codegenUtils = require('@arrirpc/codegen-utils');
|
|
13
12
|
const schema = require('@arrirpc/schema');
|
|
14
13
|
const consola = require('consola');
|
|
14
|
+
const ofetch = require('ofetch');
|
|
15
15
|
const prettier = require('prettier');
|
|
16
16
|
|
|
17
17
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
|
|
@@ -28,14 +28,13 @@ function _interopNamespaceCompat(e) {
|
|
|
28
28
|
return n;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
const fs__default = /*#__PURE__*/_interopDefaultCompat(fs$1);
|
|
32
31
|
const esbuild__namespace = /*#__PURE__*/_interopNamespaceCompat(esbuild);
|
|
33
32
|
const path__default = /*#__PURE__*/_interopDefaultCompat(path);
|
|
33
|
+
const fs__default = /*#__PURE__*/_interopDefaultCompat(fs$1);
|
|
34
34
|
const prettier__default = /*#__PURE__*/_interopDefaultCompat(prettier);
|
|
35
35
|
|
|
36
36
|
const logger = consola.createConsola().withTag("arri");
|
|
37
37
|
const GEN_APP_FILE = "__arri_app.ts";
|
|
38
|
-
const GEN_SERVER_ENTRY_FILE = "__arri_server.ts";
|
|
39
38
|
const OUT_APP_FILE = "app.mjs";
|
|
40
39
|
const OUT_SERVER_ENTRY = "server.mjs";
|
|
41
40
|
const OUT_CODEGEN = "codegen.mjs";
|
|
@@ -311,7 +310,6 @@ const dev = citty.defineCommand({
|
|
|
311
310
|
}
|
|
312
311
|
},
|
|
313
312
|
async run({ args }) {
|
|
314
|
-
process.env.ARRI_DEV_MODE = "true";
|
|
315
313
|
const { config } = await c12.loadConfig({
|
|
316
314
|
configFile: path__default.resolve(args.config)
|
|
317
315
|
});
|
|
@@ -329,23 +327,7 @@ const dev = citty.defineCommand({
|
|
|
329
327
|
await startDevServer(config);
|
|
330
328
|
}
|
|
331
329
|
});
|
|
332
|
-
const startListener = (config, showQr = false) => listhen.listenAndWatch(path__default.resolve(config.rootDir, ".output", OUT_SERVER_ENTRY), {
|
|
333
|
-
public: true,
|
|
334
|
-
port: config.port,
|
|
335
|
-
logger,
|
|
336
|
-
qr: showQr,
|
|
337
|
-
https: config.https,
|
|
338
|
-
http2: config.http2,
|
|
339
|
-
ws: true
|
|
340
|
-
});
|
|
341
330
|
async function bundleFilesContext(config) {
|
|
342
|
-
const serverContent = `import app from './${OUT_APP_FILE}';
|
|
343
|
-
|
|
344
|
-
export default app.h3App;`;
|
|
345
|
-
await fs__default.writeFile(
|
|
346
|
-
path__default.resolve(config.rootDir, ".output", OUT_SERVER_ENTRY),
|
|
347
|
-
serverContent
|
|
348
|
-
);
|
|
349
331
|
return await esbuild__namespace.context({
|
|
350
332
|
...config.esbuild,
|
|
351
333
|
entryPoints: [
|
|
@@ -360,29 +342,67 @@ export default app.h3App;`;
|
|
|
360
342
|
platform: config.esbuild.platform ?? "node"
|
|
361
343
|
});
|
|
362
344
|
}
|
|
345
|
+
async function createDevServer(config) {
|
|
346
|
+
const h3$1 = await import('h3');
|
|
347
|
+
const app = h3$1.createApp();
|
|
348
|
+
const dynamicHandler = h3.dynamicEventHandler(
|
|
349
|
+
() => "<div>initializing server...</div>"
|
|
350
|
+
);
|
|
351
|
+
app.use(dynamicHandler);
|
|
352
|
+
let ws;
|
|
353
|
+
const listener = await listhen.listen(h3.toNodeListener(app), {
|
|
354
|
+
port: config.port,
|
|
355
|
+
https: config.https,
|
|
356
|
+
http2: config.http2,
|
|
357
|
+
public: true,
|
|
358
|
+
ws: {
|
|
359
|
+
resolve(info) {
|
|
360
|
+
if (ws?.resolve) {
|
|
361
|
+
return ws.resolve(info);
|
|
362
|
+
}
|
|
363
|
+
return {};
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
async function reload() {
|
|
368
|
+
const appEntry = (await import(path__default.resolve(
|
|
369
|
+
config.rootDir,
|
|
370
|
+
".output",
|
|
371
|
+
`${OUT_APP_FILE}?version=${Date.now()}`
|
|
372
|
+
))).default;
|
|
373
|
+
dynamicHandler.set(h3.fromNodeMiddleware(appEntry.h3App.handler));
|
|
374
|
+
ws = appEntry.h3App.websocket;
|
|
375
|
+
return appEntry.getAppDefinition();
|
|
376
|
+
}
|
|
377
|
+
await reload();
|
|
378
|
+
return {
|
|
379
|
+
h3App: app,
|
|
380
|
+
listener,
|
|
381
|
+
reload,
|
|
382
|
+
ws
|
|
383
|
+
};
|
|
384
|
+
}
|
|
363
385
|
async function startDevServer(config) {
|
|
364
386
|
await setupWorkingDir(config);
|
|
365
387
|
const watcher = await import('chokidar');
|
|
366
388
|
let fileWatcher;
|
|
367
|
-
await
|
|
368
|
-
createEntryModule(config),
|
|
369
|
-
createAppWithRoutesModule(config)
|
|
370
|
-
]);
|
|
389
|
+
await createAppWithRoutesModule(config);
|
|
371
390
|
const context = await bundleFilesContext(config);
|
|
372
391
|
await context.rebuild();
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
392
|
+
const devServer = await createDevServer(config);
|
|
393
|
+
let appDef = await devServer.reload();
|
|
394
|
+
let appDefStr = JSON.stringify(appDef);
|
|
395
|
+
if (config.generators.length) {
|
|
396
|
+
logger.info(`Running generators...`);
|
|
397
|
+
await generateClientsFromDefinition(appDef, config);
|
|
398
|
+
} else {
|
|
399
|
+
logger.warn(`No generators specified in config. Skipping codegen.`);
|
|
400
|
+
}
|
|
377
401
|
const cleanExit = async () => {
|
|
378
402
|
process.exit();
|
|
379
403
|
};
|
|
380
404
|
process.on("exit", async () => {
|
|
381
|
-
await Promise.allSettled([
|
|
382
|
-
listener.close(),
|
|
383
|
-
fileWatcher?.close(),
|
|
384
|
-
context.dispose()
|
|
385
|
-
]);
|
|
405
|
+
await Promise.allSettled([fileWatcher?.close(), context.dispose()]);
|
|
386
406
|
});
|
|
387
407
|
process.on("SIGINT", cleanExit);
|
|
388
408
|
process.on("SIGTERM", cleanExit);
|
|
@@ -425,66 +445,48 @@ async function startDevServer(config) {
|
|
|
425
445
|
return;
|
|
426
446
|
}
|
|
427
447
|
await createAppWithRoutesModule(config);
|
|
428
|
-
let bundleCreated = false;
|
|
429
448
|
try {
|
|
449
|
+
const reloadStart = (/* @__PURE__ */ new Date()).getTime();
|
|
430
450
|
logger.log(
|
|
431
451
|
"Change detected. Bundling files and restarting server...."
|
|
432
452
|
);
|
|
433
453
|
await context.rebuild();
|
|
434
|
-
|
|
454
|
+
const newAppDef = await devServer.reload();
|
|
455
|
+
const newAppDefStr = JSON.stringify(newAppDef);
|
|
456
|
+
logger.log(
|
|
457
|
+
`Server restarted in ${( new Date()).getTime() - reloadStart}ms`
|
|
458
|
+
);
|
|
459
|
+
if (config.generators.length && newAppDefStr !== appDefStr) {
|
|
460
|
+
logger.info(
|
|
461
|
+
`App Definition updated. Regenerating clients...`
|
|
462
|
+
);
|
|
463
|
+
await generateClientsFromDefinition(newAppDef, config);
|
|
464
|
+
appDef = newAppDef;
|
|
465
|
+
appDefStr = newAppDefStr;
|
|
466
|
+
}
|
|
435
467
|
} catch (err) {
|
|
436
468
|
logger.error("ERROR", err);
|
|
437
|
-
bundleCreated = false;
|
|
438
|
-
}
|
|
439
|
-
if (bundleCreated && config.generators.length) {
|
|
440
|
-
setTimeout(async () => {
|
|
441
|
-
await generateClients(config);
|
|
442
|
-
bundleCreated = false;
|
|
443
|
-
}, 1e3);
|
|
444
469
|
}
|
|
445
470
|
});
|
|
446
471
|
}
|
|
447
472
|
await load();
|
|
448
473
|
}
|
|
449
|
-
async function
|
|
474
|
+
async function generateClientsFromDefinition(appDef, config) {
|
|
475
|
+
const startTime = (/* @__PURE__ */ new Date()).getTime();
|
|
450
476
|
try {
|
|
451
|
-
const protocol = config.https === true || typeof config.https === "object" ? "https" : "http";
|
|
452
|
-
if (protocol === "https") {
|
|
453
|
-
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
454
|
-
}
|
|
455
|
-
const result = await ofetch.ofetch(
|
|
456
|
-
`${protocol}://127.0.0.1:${config.port}${DEV_DEFINITION_ENDPOINT}`
|
|
457
|
-
);
|
|
458
|
-
if (!codegenUtils.isAppDefinition(result)) {
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
logger.log(`Generating client code...`);
|
|
462
477
|
const clientCount = config.generators.length;
|
|
463
478
|
await Promise.allSettled(
|
|
464
479
|
config.generators.map(
|
|
465
|
-
(generator) => generator.generator(
|
|
480
|
+
(generator) => generator.generator(appDef, true)
|
|
466
481
|
)
|
|
467
482
|
);
|
|
468
483
|
logger.success(
|
|
469
|
-
`Generated ${clientCount} client${clientCount === 1 ? "" : "s"}`
|
|
484
|
+
`Generated ${clientCount} client${clientCount === 1 ? "" : "s"} in ${( new Date()).getTime() - startTime}ms`
|
|
470
485
|
);
|
|
471
486
|
} catch (err) {
|
|
472
487
|
logger.error(err);
|
|
473
488
|
}
|
|
474
489
|
}
|
|
475
|
-
async function createEntryModule(config) {
|
|
476
|
-
const appModule = path__default.resolve(config.rootDir, config.srcDir, config.entry);
|
|
477
|
-
const appImportParts = path__default.relative(path__default.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
478
|
-
appImportParts.pop();
|
|
479
|
-
const virtualEntry = `import { toNodeListener } from '@arrirpc/server';
|
|
480
|
-
import app from './${GEN_APP_FILE}';
|
|
481
|
-
|
|
482
|
-
export default app.h3App;`;
|
|
483
|
-
await fs__default.writeFile(
|
|
484
|
-
path__default.resolve(config.rootDir, config.buildDir, GEN_SERVER_ENTRY_FILE),
|
|
485
|
-
virtualEntry
|
|
486
|
-
);
|
|
487
|
-
}
|
|
488
490
|
|
|
489
491
|
exports.DEV_DEFINITION_ENDPOINT = DEV_DEFINITION_ENDPOINT;
|
|
490
492
|
exports.GEN_APP_FILE = GEN_APP_FILE;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arri",
|
|
3
|
-
"version": "0.57.
|
|
3
|
+
"version": "0.57.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
"ofetch": "^1.3.4",
|
|
40
40
|
"pathe": "^1.1.2",
|
|
41
41
|
"prettier": "^3.3.3",
|
|
42
|
-
"@arrirpc/codegen-dart": "0.57.
|
|
43
|
-
"@arrirpc/codegen-
|
|
44
|
-
"@arrirpc/codegen-
|
|
45
|
-
"@arrirpc/codegen-ts": "0.57.
|
|
46
|
-
"@arrirpc/
|
|
47
|
-
"@arrirpc/
|
|
42
|
+
"@arrirpc/codegen-dart": "0.57.3",
|
|
43
|
+
"@arrirpc/codegen-rust": "0.57.3",
|
|
44
|
+
"@arrirpc/codegen-kotlin": "0.57.3",
|
|
45
|
+
"@arrirpc/codegen-ts": "0.57.3",
|
|
46
|
+
"@arrirpc/schema": "0.57.3",
|
|
47
|
+
"@arrirpc/codegen-utils": "0.57.3"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/degit": "^2.8.6"
|