arri 0.0.20 → 0.0.22
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/chunks/index.cjs +1 -1
- package/dist/chunks/index.mjs +1 -1
- package/dist/cli.cjs +66 -41
- package/dist/cli.mjs +66 -41
- package/dist/codegen.cjs +6 -1
- package/dist/codegen.mjs +7 -2
- package/dist/shared/{arri.234caf5e.cjs → arri.12a51234.cjs} +33 -5
- package/dist/shared/{arri.c6b92822.mjs → arri.6966fa30.mjs} +33 -5
- package/package.json +1 -1
package/dist/chunks/index.cjs
CHANGED
|
@@ -42,7 +42,7 @@ require('@sinclair/typebox/errors');
|
|
|
42
42
|
require('@sinclair/typebox/value');
|
|
43
43
|
require('../index.cjs');
|
|
44
44
|
require('ofetch');
|
|
45
|
-
require('../shared/arri.
|
|
45
|
+
require('../shared/arri.12a51234.cjs');
|
|
46
46
|
require('child_process');
|
|
47
47
|
require('listhen');
|
|
48
48
|
|
package/dist/chunks/index.mjs
CHANGED
package/dist/cli.cjs
CHANGED
|
@@ -33,7 +33,7 @@ require('@sinclair/typebox');
|
|
|
33
33
|
require('h3');
|
|
34
34
|
require('@sinclair/typebox/errors');
|
|
35
35
|
require('@sinclair/typebox/value');
|
|
36
|
-
const dart = require('./shared/arri.
|
|
36
|
+
const dart = require('./shared/arri.12a51234.cjs');
|
|
37
37
|
const listhen = require('listhen');
|
|
38
38
|
require('child_process');
|
|
39
39
|
|
|
@@ -19823,11 +19823,15 @@ async function setupWorkingDir(config) {
|
|
|
19823
19823
|
}
|
|
19824
19824
|
async function createRoutesModule(config) {
|
|
19825
19825
|
const routes = [];
|
|
19826
|
+
const existingRoutes = [];
|
|
19826
19827
|
await Promise.all(
|
|
19827
19828
|
config.procedureGlobPatterns.map(async (pattern) => {
|
|
19828
19829
|
const results = await getVirtualRouteBatch(pattern, config);
|
|
19829
19830
|
for (const result of results) {
|
|
19830
|
-
|
|
19831
|
+
if (!existingRoutes.includes(result.name)) {
|
|
19832
|
+
routes.push(result);
|
|
19833
|
+
existingRoutes.push(result.name);
|
|
19834
|
+
}
|
|
19831
19835
|
}
|
|
19832
19836
|
})
|
|
19833
19837
|
);
|
|
@@ -19836,7 +19840,7 @@ async function createRoutesModule(config) {
|
|
|
19836
19840
|
`${routes.map(
|
|
19837
19841
|
(route) => `import ${route.importName} from '${route.importPath}';`
|
|
19838
19842
|
).join("\n")}
|
|
19839
|
-
const routes
|
|
19843
|
+
const routes = [${routes.map(
|
|
19840
19844
|
(route) => `{ id: '${route.name}', route: ${route.importName} }`
|
|
19841
19845
|
).join(",\n")}
|
|
19842
19846
|
];
|
|
@@ -19844,7 +19848,7 @@ async function createRoutesModule(config) {
|
|
|
19844
19848
|
{ parser: "typescript", tabWidth: 4 }
|
|
19845
19849
|
);
|
|
19846
19850
|
await fs__default$1.writeFile(
|
|
19847
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "routes.
|
|
19851
|
+
path__default$1.resolve(config.rootDir, config.buildDir, "routes.js"),
|
|
19848
19852
|
module
|
|
19849
19853
|
);
|
|
19850
19854
|
}
|
|
@@ -19860,8 +19864,9 @@ async function getVirtualRouteBatch(globPattern, config) {
|
|
|
19860
19864
|
for (const file of files) {
|
|
19861
19865
|
const meta = getRpcMetaFromPath(config, file);
|
|
19862
19866
|
if (meta) {
|
|
19863
|
-
const importParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.
|
|
19867
|
+
const importParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.srcDir), file).split(".");
|
|
19864
19868
|
importParts.pop();
|
|
19869
|
+
importParts.push("js");
|
|
19865
19870
|
routes.push({
|
|
19866
19871
|
name: meta.id,
|
|
19867
19872
|
importName: app.camelCase(meta.id.split(".").join("_")),
|
|
@@ -19905,6 +19910,25 @@ const getRpcMetaFromPath = (config, filePath) => {
|
|
|
19905
19910
|
httpPath: `/${httpParts.join("/")}`
|
|
19906
19911
|
};
|
|
19907
19912
|
};
|
|
19913
|
+
async function transpileFiles(config) {
|
|
19914
|
+
const outDir = path__default$1.resolve(config.rootDir, config.buildDir);
|
|
19915
|
+
const files = await globby(["**/*.ts"], {
|
|
19916
|
+
cwd: path__default$1.resolve(config.rootDir, config.srcDir)
|
|
19917
|
+
});
|
|
19918
|
+
await esbuild.build({
|
|
19919
|
+
...config.esbuild,
|
|
19920
|
+
entryPoints: [
|
|
19921
|
+
...files.map(
|
|
19922
|
+
(file) => path__default$1.resolve(config.rootDir, config.srcDir, file)
|
|
19923
|
+
)
|
|
19924
|
+
],
|
|
19925
|
+
outdir: outDir,
|
|
19926
|
+
bundle: false,
|
|
19927
|
+
format: "esm",
|
|
19928
|
+
target: "node18",
|
|
19929
|
+
platform: "node"
|
|
19930
|
+
});
|
|
19931
|
+
}
|
|
19908
19932
|
|
|
19909
19933
|
const build = citty.defineCommand({
|
|
19910
19934
|
args: {
|
|
@@ -19937,14 +19961,19 @@ async function startBuild(config) {
|
|
|
19937
19961
|
logger$1.log("Bundling server....");
|
|
19938
19962
|
await setupWorkingDir(config);
|
|
19939
19963
|
await Promise.all([
|
|
19964
|
+
transpileFiles(config),
|
|
19940
19965
|
createRoutesModule(config),
|
|
19941
19966
|
createBuildEntryModule(config),
|
|
19942
19967
|
createBuildCodegenModule(config)
|
|
19943
19968
|
]);
|
|
19944
|
-
await bundleFiles
|
|
19969
|
+
await bundleFiles(config);
|
|
19945
19970
|
logger$1.log("Finished bundling");
|
|
19946
19971
|
const clientCount = config.clientGenerators.length;
|
|
19947
|
-
const codegenModule = path__default$1.resolve(
|
|
19972
|
+
const codegenModule = path__default$1.resolve(
|
|
19973
|
+
config.rootDir,
|
|
19974
|
+
config.buildDir,
|
|
19975
|
+
"codegen.js"
|
|
19976
|
+
);
|
|
19948
19977
|
if (clientCount > 0) {
|
|
19949
19978
|
logger$1.log("Generating clients");
|
|
19950
19979
|
node_child_process.execSync(`node ${codegenModule}`);
|
|
@@ -19969,27 +19998,32 @@ async function startBuild(config) {
|
|
|
19969
19998
|
`Build finished! You can start your server by running "node .output/server.js"`
|
|
19970
19999
|
);
|
|
19971
20000
|
}
|
|
19972
|
-
async function bundleFiles
|
|
20001
|
+
async function bundleFiles(config) {
|
|
19973
20002
|
await esbuild.build({
|
|
19974
20003
|
...config.esbuild,
|
|
19975
20004
|
entryPoints: [
|
|
19976
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "server.
|
|
19977
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "codegen.ts")
|
|
20005
|
+
path__default$1.resolve(config.rootDir, config.buildDir, "server.js")
|
|
19978
20006
|
],
|
|
19979
20007
|
platform: config.esbuild.platform ?? "node",
|
|
19980
20008
|
target: config.esbuild.target ?? "node18",
|
|
19981
20009
|
bundle: true,
|
|
20010
|
+
format: "esm",
|
|
20011
|
+
sourcemap: true,
|
|
20012
|
+
minifyWhitespace: true,
|
|
20013
|
+
banner: {
|
|
20014
|
+
js: "import { createRequire as topLevelCreateRequire } from 'module';\n const require = topLevelCreateRequire(import.meta.url);"
|
|
20015
|
+
},
|
|
19982
20016
|
outdir: path__default$1.resolve(config.rootDir, ".output")
|
|
19983
20017
|
});
|
|
19984
20018
|
}
|
|
19985
20019
|
async function createBuildEntryModule(config) {
|
|
19986
20020
|
const appModule = path__default$1.resolve(config.rootDir, config.srcDir, config.entry);
|
|
19987
|
-
const appImportParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.
|
|
20021
|
+
const appImportParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
19988
20022
|
appImportParts.pop();
|
|
19989
20023
|
const virtualEntry = `import { toNodeListener } from 'h3';
|
|
19990
20024
|
import { listen } from 'listhen';
|
|
19991
|
-
import routes from './routes';
|
|
19992
|
-
import app from './${appImportParts.join(".")}';
|
|
20025
|
+
import routes from './routes.js';
|
|
20026
|
+
import app from './${appImportParts.join(".")}.js';
|
|
19993
20027
|
|
|
19994
20028
|
for (const route of routes) {
|
|
19995
20029
|
app.registerRpc(route.id, route.route);
|
|
@@ -19999,29 +20033,35 @@ void listen(toNodeListener(app.getH3Instance()), {
|
|
|
19999
20033
|
port: process.env.PORT ?? ${config.port},
|
|
20000
20034
|
});`;
|
|
20001
20035
|
await fs__default$1.writeFile(
|
|
20002
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "server.
|
|
20036
|
+
path__default$1.resolve(config.rootDir, config.buildDir, "server.js"),
|
|
20003
20037
|
virtualEntry
|
|
20004
20038
|
);
|
|
20005
20039
|
}
|
|
20006
20040
|
async function createBuildCodegenModule(config) {
|
|
20007
20041
|
const appModule = path__default$1.resolve(config.rootDir, config.srcDir, config.entry);
|
|
20008
|
-
const appImportParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.
|
|
20042
|
+
const appImportParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
20009
20043
|
appImportParts.pop();
|
|
20010
20044
|
const virtualModule = await prettier__default.format(
|
|
20011
20045
|
`
|
|
20012
20046
|
import { writeFileSync } from 'node:fs';
|
|
20013
20047
|
import path from 'pathe';
|
|
20014
|
-
import app from './${appImportParts.join(".")}';
|
|
20048
|
+
import app from './${appImportParts.join(".")}.js';
|
|
20049
|
+
import routes from './routes.js';
|
|
20050
|
+
|
|
20051
|
+
for(const route of routes) {
|
|
20052
|
+
app.registerRpc(route.id, route.route);
|
|
20053
|
+
}
|
|
20015
20054
|
|
|
20055
|
+
const __dirname = new URL(".", import.meta.url).pathname;
|
|
20016
20056
|
const def = app.getAppDefinition();
|
|
20017
20057
|
writeFileSync(
|
|
20018
|
-
path.resolve(__dirname, "__definition.json"),
|
|
20058
|
+
path.resolve(__dirname, "../.output", "__definition.json"),
|
|
20019
20059
|
JSON.stringify(def),
|
|
20020
20060
|
);`,
|
|
20021
20061
|
{ tabWidth: 4, parser: "typescript" }
|
|
20022
20062
|
);
|
|
20023
20063
|
await fs__default$1.writeFile(
|
|
20024
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "codegen.
|
|
20064
|
+
path__default$1.resolve(config.rootDir, config.buildDir, "codegen.js"),
|
|
20025
20065
|
virtualModule
|
|
20026
20066
|
);
|
|
20027
20067
|
}
|
|
@@ -20113,8 +20153,7 @@ const dev = citty.defineCommand({
|
|
|
20113
20153
|
async run({ args }) {
|
|
20114
20154
|
process.env.ARRI_DEV_MODE = "true";
|
|
20115
20155
|
const config = await loadConfig({
|
|
20116
|
-
configFile: path__default$1.resolve(args.config)
|
|
20117
|
-
defaultConfig: index.defaultConfig
|
|
20156
|
+
configFile: path__default$1.resolve(args.config)
|
|
20118
20157
|
});
|
|
20119
20158
|
if (!config) {
|
|
20120
20159
|
throw new Error("Unable to find config");
|
|
@@ -20122,20 +20161,7 @@ const dev = citty.defineCommand({
|
|
|
20122
20161
|
await startDevServer(config.config);
|
|
20123
20162
|
}
|
|
20124
20163
|
});
|
|
20125
|
-
|
|
20126
|
-
const outDir = path__default$1.resolve(config.rootDir, ".output");
|
|
20127
|
-
await esbuild.build({
|
|
20128
|
-
...config.esbuild,
|
|
20129
|
-
entryPoints: [
|
|
20130
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "entry.ts")
|
|
20131
|
-
],
|
|
20132
|
-
outdir: outDir,
|
|
20133
|
-
bundle: true,
|
|
20134
|
-
target: "node18",
|
|
20135
|
-
platform: "node"
|
|
20136
|
-
});
|
|
20137
|
-
}
|
|
20138
|
-
const startListener = (config, showQr = false) => listhen.listenAndWatch(path__default$1.resolve(config.rootDir, ".output", "entry.js"), {
|
|
20164
|
+
const startListener = (config, showQr = false) => listhen.listenAndWatch(path__default$1.resolve(config.rootDir, config.buildDir, "entry.js"), {
|
|
20139
20165
|
public: true,
|
|
20140
20166
|
port: config.port,
|
|
20141
20167
|
logger,
|
|
@@ -20145,8 +20171,8 @@ async function startDevServer(config) {
|
|
|
20145
20171
|
await setupWorkingDir(config);
|
|
20146
20172
|
let fileWatcher;
|
|
20147
20173
|
await Promise.all([createRoutesModule(config), createEntryModule(config)]);
|
|
20148
|
-
await
|
|
20149
|
-
|
|
20174
|
+
await transpileFiles(config);
|
|
20175
|
+
await startListener(config, true);
|
|
20150
20176
|
setTimeout(async () => {
|
|
20151
20177
|
await generateClients(config);
|
|
20152
20178
|
}, 1e3);
|
|
@@ -20166,15 +20192,14 @@ async function startDevServer(config) {
|
|
|
20166
20192
|
ignoreInitial: true
|
|
20167
20193
|
});
|
|
20168
20194
|
fileWatcher.on("all", async (_event, file) => {
|
|
20195
|
+
await transpileFiles(config);
|
|
20169
20196
|
await createRoutesModule(config);
|
|
20170
20197
|
let bundleCreated = false;
|
|
20171
20198
|
try {
|
|
20172
20199
|
logger.log(
|
|
20173
20200
|
"Change detected. Bundling files and restarting server...."
|
|
20174
20201
|
);
|
|
20175
|
-
await
|
|
20176
|
-
await listener.close();
|
|
20177
|
-
listener = await startListener(config);
|
|
20202
|
+
await transpileFiles(config);
|
|
20178
20203
|
bundleCreated = true;
|
|
20179
20204
|
} catch (err) {
|
|
20180
20205
|
logger.error(err);
|
|
@@ -20216,7 +20241,7 @@ async function generateClients(config) {
|
|
|
20216
20241
|
}
|
|
20217
20242
|
async function createEntryModule(config) {
|
|
20218
20243
|
const appModule = path__default$1.resolve(config.rootDir, config.srcDir, config.entry);
|
|
20219
|
-
const appImportParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.
|
|
20244
|
+
const appImportParts = path__default$1.relative(path__default$1.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
20220
20245
|
appImportParts.pop();
|
|
20221
20246
|
const virtualEntry = `import { toNodeListener } from 'h3';
|
|
20222
20247
|
import { listen } from 'listhen';
|
|
@@ -20229,7 +20254,7 @@ for (const route of routes) {
|
|
|
20229
20254
|
|
|
20230
20255
|
export default app.getH3Instance();`;
|
|
20231
20256
|
await fs__default$1.writeFile(
|
|
20232
|
-
path__default$1.resolve(config.rootDir, config.buildDir, "entry.
|
|
20257
|
+
path__default$1.resolve(config.rootDir, config.buildDir, "entry.js"),
|
|
20233
20258
|
virtualEntry
|
|
20234
20259
|
);
|
|
20235
20260
|
}
|
package/dist/cli.mjs
CHANGED
|
@@ -31,7 +31,7 @@ import '@sinclair/typebox';
|
|
|
31
31
|
import 'h3';
|
|
32
32
|
import '@sinclair/typebox/errors';
|
|
33
33
|
import '@sinclair/typebox/value';
|
|
34
|
-
import { a as dartClientGenerator } from './shared/arri.
|
|
34
|
+
import { a as dartClientGenerator } from './shared/arri.6966fa30.mjs';
|
|
35
35
|
import { listenAndWatch } from 'listhen';
|
|
36
36
|
import 'child_process';
|
|
37
37
|
|
|
@@ -19802,11 +19802,15 @@ async function setupWorkingDir(config) {
|
|
|
19802
19802
|
}
|
|
19803
19803
|
async function createRoutesModule(config) {
|
|
19804
19804
|
const routes = [];
|
|
19805
|
+
const existingRoutes = [];
|
|
19805
19806
|
await Promise.all(
|
|
19806
19807
|
config.procedureGlobPatterns.map(async (pattern) => {
|
|
19807
19808
|
const results = await getVirtualRouteBatch(pattern, config);
|
|
19808
19809
|
for (const result of results) {
|
|
19809
|
-
|
|
19810
|
+
if (!existingRoutes.includes(result.name)) {
|
|
19811
|
+
routes.push(result);
|
|
19812
|
+
existingRoutes.push(result.name);
|
|
19813
|
+
}
|
|
19810
19814
|
}
|
|
19811
19815
|
})
|
|
19812
19816
|
);
|
|
@@ -19815,7 +19819,7 @@ async function createRoutesModule(config) {
|
|
|
19815
19819
|
`${routes.map(
|
|
19816
19820
|
(route) => `import ${route.importName} from '${route.importPath}';`
|
|
19817
19821
|
).join("\n")}
|
|
19818
|
-
const routes
|
|
19822
|
+
const routes = [${routes.map(
|
|
19819
19823
|
(route) => `{ id: '${route.name}', route: ${route.importName} }`
|
|
19820
19824
|
).join(",\n")}
|
|
19821
19825
|
];
|
|
@@ -19823,7 +19827,7 @@ async function createRoutesModule(config) {
|
|
|
19823
19827
|
{ parser: "typescript", tabWidth: 4 }
|
|
19824
19828
|
);
|
|
19825
19829
|
await fs$f.writeFile(
|
|
19826
|
-
path$e.resolve(config.rootDir, config.buildDir, "routes.
|
|
19830
|
+
path$e.resolve(config.rootDir, config.buildDir, "routes.js"),
|
|
19827
19831
|
module
|
|
19828
19832
|
);
|
|
19829
19833
|
}
|
|
@@ -19839,8 +19843,9 @@ async function getVirtualRouteBatch(globPattern, config) {
|
|
|
19839
19843
|
for (const file of files) {
|
|
19840
19844
|
const meta = getRpcMetaFromPath(config, file);
|
|
19841
19845
|
if (meta) {
|
|
19842
|
-
const importParts = path$e.relative(path$e.resolve(config.rootDir, config.
|
|
19846
|
+
const importParts = path$e.relative(path$e.resolve(config.rootDir, config.srcDir), file).split(".");
|
|
19843
19847
|
importParts.pop();
|
|
19848
|
+
importParts.push("js");
|
|
19844
19849
|
routes.push({
|
|
19845
19850
|
name: meta.id,
|
|
19846
19851
|
importName: camelCase(meta.id.split(".").join("_")),
|
|
@@ -19884,6 +19889,25 @@ const getRpcMetaFromPath = (config, filePath) => {
|
|
|
19884
19889
|
httpPath: `/${httpParts.join("/")}`
|
|
19885
19890
|
};
|
|
19886
19891
|
};
|
|
19892
|
+
async function transpileFiles(config) {
|
|
19893
|
+
const outDir = path$e.resolve(config.rootDir, config.buildDir);
|
|
19894
|
+
const files = await globby(["**/*.ts"], {
|
|
19895
|
+
cwd: path$e.resolve(config.rootDir, config.srcDir)
|
|
19896
|
+
});
|
|
19897
|
+
await build$1({
|
|
19898
|
+
...config.esbuild,
|
|
19899
|
+
entryPoints: [
|
|
19900
|
+
...files.map(
|
|
19901
|
+
(file) => path$e.resolve(config.rootDir, config.srcDir, file)
|
|
19902
|
+
)
|
|
19903
|
+
],
|
|
19904
|
+
outdir: outDir,
|
|
19905
|
+
bundle: false,
|
|
19906
|
+
format: "esm",
|
|
19907
|
+
target: "node18",
|
|
19908
|
+
platform: "node"
|
|
19909
|
+
});
|
|
19910
|
+
}
|
|
19887
19911
|
|
|
19888
19912
|
const build = defineCommand({
|
|
19889
19913
|
args: {
|
|
@@ -19916,14 +19940,19 @@ async function startBuild(config) {
|
|
|
19916
19940
|
logger$1.log("Bundling server....");
|
|
19917
19941
|
await setupWorkingDir(config);
|
|
19918
19942
|
await Promise.all([
|
|
19943
|
+
transpileFiles(config),
|
|
19919
19944
|
createRoutesModule(config),
|
|
19920
19945
|
createBuildEntryModule(config),
|
|
19921
19946
|
createBuildCodegenModule(config)
|
|
19922
19947
|
]);
|
|
19923
|
-
await bundleFiles
|
|
19948
|
+
await bundleFiles(config);
|
|
19924
19949
|
logger$1.log("Finished bundling");
|
|
19925
19950
|
const clientCount = config.clientGenerators.length;
|
|
19926
|
-
const codegenModule = path$e.resolve(
|
|
19951
|
+
const codegenModule = path$e.resolve(
|
|
19952
|
+
config.rootDir,
|
|
19953
|
+
config.buildDir,
|
|
19954
|
+
"codegen.js"
|
|
19955
|
+
);
|
|
19927
19956
|
if (clientCount > 0) {
|
|
19928
19957
|
logger$1.log("Generating clients");
|
|
19929
19958
|
execSync(`node ${codegenModule}`);
|
|
@@ -19948,27 +19977,32 @@ async function startBuild(config) {
|
|
|
19948
19977
|
`Build finished! You can start your server by running "node .output/server.js"`
|
|
19949
19978
|
);
|
|
19950
19979
|
}
|
|
19951
|
-
async function bundleFiles
|
|
19980
|
+
async function bundleFiles(config) {
|
|
19952
19981
|
await build$1({
|
|
19953
19982
|
...config.esbuild,
|
|
19954
19983
|
entryPoints: [
|
|
19955
|
-
path$e.resolve(config.rootDir, config.buildDir, "server.
|
|
19956
|
-
path$e.resolve(config.rootDir, config.buildDir, "codegen.ts")
|
|
19984
|
+
path$e.resolve(config.rootDir, config.buildDir, "server.js")
|
|
19957
19985
|
],
|
|
19958
19986
|
platform: config.esbuild.platform ?? "node",
|
|
19959
19987
|
target: config.esbuild.target ?? "node18",
|
|
19960
19988
|
bundle: true,
|
|
19989
|
+
format: "esm",
|
|
19990
|
+
sourcemap: true,
|
|
19991
|
+
minifyWhitespace: true,
|
|
19992
|
+
banner: {
|
|
19993
|
+
js: "import { createRequire as topLevelCreateRequire } from 'module';\n const require = topLevelCreateRequire(import.meta.url);"
|
|
19994
|
+
},
|
|
19961
19995
|
outdir: path$e.resolve(config.rootDir, ".output")
|
|
19962
19996
|
});
|
|
19963
19997
|
}
|
|
19964
19998
|
async function createBuildEntryModule(config) {
|
|
19965
19999
|
const appModule = path$e.resolve(config.rootDir, config.srcDir, config.entry);
|
|
19966
|
-
const appImportParts = path$e.relative(path$e.resolve(config.rootDir, config.
|
|
20000
|
+
const appImportParts = path$e.relative(path$e.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
19967
20001
|
appImportParts.pop();
|
|
19968
20002
|
const virtualEntry = `import { toNodeListener } from 'h3';
|
|
19969
20003
|
import { listen } from 'listhen';
|
|
19970
|
-
import routes from './routes';
|
|
19971
|
-
import app from './${appImportParts.join(".")}';
|
|
20004
|
+
import routes from './routes.js';
|
|
20005
|
+
import app from './${appImportParts.join(".")}.js';
|
|
19972
20006
|
|
|
19973
20007
|
for (const route of routes) {
|
|
19974
20008
|
app.registerRpc(route.id, route.route);
|
|
@@ -19978,29 +20012,35 @@ void listen(toNodeListener(app.getH3Instance()), {
|
|
|
19978
20012
|
port: process.env.PORT ?? ${config.port},
|
|
19979
20013
|
});`;
|
|
19980
20014
|
await fs$f.writeFile(
|
|
19981
|
-
path$e.resolve(config.rootDir, config.buildDir, "server.
|
|
20015
|
+
path$e.resolve(config.rootDir, config.buildDir, "server.js"),
|
|
19982
20016
|
virtualEntry
|
|
19983
20017
|
);
|
|
19984
20018
|
}
|
|
19985
20019
|
async function createBuildCodegenModule(config) {
|
|
19986
20020
|
const appModule = path$e.resolve(config.rootDir, config.srcDir, config.entry);
|
|
19987
|
-
const appImportParts = path$e.relative(path$e.resolve(config.rootDir, config.
|
|
20021
|
+
const appImportParts = path$e.relative(path$e.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
19988
20022
|
appImportParts.pop();
|
|
19989
20023
|
const virtualModule = await prettier.format(
|
|
19990
20024
|
`
|
|
19991
20025
|
import { writeFileSync } from 'node:fs';
|
|
19992
20026
|
import path from 'pathe';
|
|
19993
|
-
import app from './${appImportParts.join(".")}';
|
|
20027
|
+
import app from './${appImportParts.join(".")}.js';
|
|
20028
|
+
import routes from './routes.js';
|
|
20029
|
+
|
|
20030
|
+
for(const route of routes) {
|
|
20031
|
+
app.registerRpc(route.id, route.route);
|
|
20032
|
+
}
|
|
19994
20033
|
|
|
20034
|
+
const __dirname = new URL(".", import.meta.url).pathname;
|
|
19995
20035
|
const def = app.getAppDefinition();
|
|
19996
20036
|
writeFileSync(
|
|
19997
|
-
path.resolve(__dirname, "__definition.json"),
|
|
20037
|
+
path.resolve(__dirname, "../.output", "__definition.json"),
|
|
19998
20038
|
JSON.stringify(def),
|
|
19999
20039
|
);`,
|
|
20000
20040
|
{ tabWidth: 4, parser: "typescript" }
|
|
20001
20041
|
);
|
|
20002
20042
|
await fs$f.writeFile(
|
|
20003
|
-
path$e.resolve(config.rootDir, config.buildDir, "codegen.
|
|
20043
|
+
path$e.resolve(config.rootDir, config.buildDir, "codegen.js"),
|
|
20004
20044
|
virtualModule
|
|
20005
20045
|
);
|
|
20006
20046
|
}
|
|
@@ -20092,8 +20132,7 @@ const dev = defineCommand({
|
|
|
20092
20132
|
async run({ args }) {
|
|
20093
20133
|
process.env.ARRI_DEV_MODE = "true";
|
|
20094
20134
|
const config = await loadConfig({
|
|
20095
|
-
configFile: path$e.resolve(args.config)
|
|
20096
|
-
defaultConfig
|
|
20135
|
+
configFile: path$e.resolve(args.config)
|
|
20097
20136
|
});
|
|
20098
20137
|
if (!config) {
|
|
20099
20138
|
throw new Error("Unable to find config");
|
|
@@ -20101,20 +20140,7 @@ const dev = defineCommand({
|
|
|
20101
20140
|
await startDevServer(config.config);
|
|
20102
20141
|
}
|
|
20103
20142
|
});
|
|
20104
|
-
|
|
20105
|
-
const outDir = path$e.resolve(config.rootDir, ".output");
|
|
20106
|
-
await build$1({
|
|
20107
|
-
...config.esbuild,
|
|
20108
|
-
entryPoints: [
|
|
20109
|
-
path$e.resolve(config.rootDir, config.buildDir, "entry.ts")
|
|
20110
|
-
],
|
|
20111
|
-
outdir: outDir,
|
|
20112
|
-
bundle: true,
|
|
20113
|
-
target: "node18",
|
|
20114
|
-
platform: "node"
|
|
20115
|
-
});
|
|
20116
|
-
}
|
|
20117
|
-
const startListener = (config, showQr = false) => listenAndWatch(path$e.resolve(config.rootDir, ".output", "entry.js"), {
|
|
20143
|
+
const startListener = (config, showQr = false) => listenAndWatch(path$e.resolve(config.rootDir, config.buildDir, "entry.js"), {
|
|
20118
20144
|
public: true,
|
|
20119
20145
|
port: config.port,
|
|
20120
20146
|
logger,
|
|
@@ -20124,8 +20150,8 @@ async function startDevServer(config) {
|
|
|
20124
20150
|
await setupWorkingDir(config);
|
|
20125
20151
|
let fileWatcher;
|
|
20126
20152
|
await Promise.all([createRoutesModule(config), createEntryModule(config)]);
|
|
20127
|
-
await
|
|
20128
|
-
|
|
20153
|
+
await transpileFiles(config);
|
|
20154
|
+
await startListener(config, true);
|
|
20129
20155
|
setTimeout(async () => {
|
|
20130
20156
|
await generateClients(config);
|
|
20131
20157
|
}, 1e3);
|
|
@@ -20145,15 +20171,14 @@ async function startDevServer(config) {
|
|
|
20145
20171
|
ignoreInitial: true
|
|
20146
20172
|
});
|
|
20147
20173
|
fileWatcher.on("all", async (_event, file) => {
|
|
20174
|
+
await transpileFiles(config);
|
|
20148
20175
|
await createRoutesModule(config);
|
|
20149
20176
|
let bundleCreated = false;
|
|
20150
20177
|
try {
|
|
20151
20178
|
logger.log(
|
|
20152
20179
|
"Change detected. Bundling files and restarting server...."
|
|
20153
20180
|
);
|
|
20154
|
-
await
|
|
20155
|
-
await listener.close();
|
|
20156
|
-
listener = await startListener(config);
|
|
20181
|
+
await transpileFiles(config);
|
|
20157
20182
|
bundleCreated = true;
|
|
20158
20183
|
} catch (err) {
|
|
20159
20184
|
logger.error(err);
|
|
@@ -20195,7 +20220,7 @@ async function generateClients(config) {
|
|
|
20195
20220
|
}
|
|
20196
20221
|
async function createEntryModule(config) {
|
|
20197
20222
|
const appModule = path$e.resolve(config.rootDir, config.srcDir, config.entry);
|
|
20198
|
-
const appImportParts = path$e.relative(path$e.resolve(config.rootDir, config.
|
|
20223
|
+
const appImportParts = path$e.relative(path$e.resolve(config.rootDir, config.srcDir), appModule).split(".");
|
|
20199
20224
|
appImportParts.pop();
|
|
20200
20225
|
const virtualEntry = `import { toNodeListener } from 'h3';
|
|
20201
20226
|
import { listen } from 'listhen';
|
|
@@ -20208,7 +20233,7 @@ for (const route of routes) {
|
|
|
20208
20233
|
|
|
20209
20234
|
export default app.getH3Instance();`;
|
|
20210
20235
|
await fs$f.writeFile(
|
|
20211
|
-
path$e.resolve(config.rootDir, config.buildDir, "entry.
|
|
20236
|
+
path$e.resolve(config.rootDir, config.buildDir, "entry.js"),
|
|
20212
20237
|
virtualEntry
|
|
20213
20238
|
);
|
|
20214
20239
|
}
|
package/dist/codegen.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const require$$0 = require('fs');
|
|
4
4
|
const prettier = require('prettier');
|
|
5
5
|
const app = require('./shared/arri.38792eb4.cjs');
|
|
6
|
-
const dart = require('./shared/arri.
|
|
6
|
+
const dart = require('./shared/arri.12a51234.cjs');
|
|
7
7
|
require('@sinclair/typebox');
|
|
8
8
|
require('h3');
|
|
9
9
|
require('@sinclair/typebox/errors');
|
|
@@ -20,6 +20,11 @@ const typescriptClientGenerator = dart.defineClientGeneratorPlugin(
|
|
|
20
20
|
if (!options.outputFile) {
|
|
21
21
|
throw new Error("No output file specified");
|
|
22
22
|
}
|
|
23
|
+
if (Object.keys(def.procedures).length <= 0) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
"No procedures found in definition file. Typescript client will not be generated."
|
|
26
|
+
);
|
|
27
|
+
}
|
|
23
28
|
const result = await createTypescriptClient(
|
|
24
29
|
def,
|
|
25
30
|
options.clientName
|
package/dist/codegen.mjs
CHANGED
|
@@ -2,8 +2,8 @@ import { writeFileSync } from 'fs';
|
|
|
2
2
|
import { format } from 'prettier';
|
|
3
3
|
import { u as unflattenObject, i as isServiceDef, p as pascalCase, a as isProcedureDef, b as isJsonSchemaScalarType, c as isJsonSchemaNullType, d as isJsonSchemaObject, e as isJsonSchemaEnum, f as isJsonSchemaArray, g as unflattenProcedures, h as camelCase } from './shared/arri.e547206a.mjs';
|
|
4
4
|
export { l as JsonSchemaComplexTypeValues, k as JsonSchemaNullTypeValues, J as JsonSchemaScalarTypeValues, j as isApplicationDef, n as normalizeWhitespace, r as removeDisallowedChars, s as setNestedObjectProperty } from './shared/arri.e547206a.mjs';
|
|
5
|
-
import { d as defineClientGeneratorPlugin } from './shared/arri.
|
|
6
|
-
export { j as classListTransformer, i as classTransformer, c as createDartClient, a as dartClientGenerator, f as dartModelFromJsonSchema, h as dartParsedJsonField, e as dartProcedureFromServiceDefinition, g as dartPropertyTypeFromSchema, b as dartServiceFromServiceDefinition, k as isDartType, l as isDartTypeWithNullables, t as transformers } from './shared/arri.
|
|
5
|
+
import { d as defineClientGeneratorPlugin } from './shared/arri.6966fa30.mjs';
|
|
6
|
+
export { j as classListTransformer, i as classTransformer, c as createDartClient, a as dartClientGenerator, f as dartModelFromJsonSchema, h as dartParsedJsonField, e as dartProcedureFromServiceDefinition, g as dartPropertyTypeFromSchema, b as dartServiceFromServiceDefinition, k as isDartType, l as isDartTypeWithNullables, t as transformers } from './shared/arri.6966fa30.mjs';
|
|
7
7
|
import '@sinclair/typebox';
|
|
8
8
|
import 'h3';
|
|
9
9
|
import '@sinclair/typebox/errors';
|
|
@@ -20,6 +20,11 @@ const typescriptClientGenerator = defineClientGeneratorPlugin(
|
|
|
20
20
|
if (!options.outputFile) {
|
|
21
21
|
throw new Error("No output file specified");
|
|
22
22
|
}
|
|
23
|
+
if (Object.keys(def.procedures).length <= 0) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
"No procedures found in definition file. Typescript client will not be generated."
|
|
26
|
+
);
|
|
27
|
+
}
|
|
23
28
|
const result = await createTypescriptClient(
|
|
24
29
|
def,
|
|
25
30
|
options.clientName
|
|
@@ -22,6 +22,13 @@ const dartClientGenerator = defineClientGeneratorPlugin(
|
|
|
22
22
|
'Missing "outputFile" cannot generate dart client'
|
|
23
23
|
);
|
|
24
24
|
}
|
|
25
|
+
const numProcedures = Object.keys(def.procedures).length;
|
|
26
|
+
if (numProcedures <= 0) {
|
|
27
|
+
console.warn(
|
|
28
|
+
"No procedures found in definition file. Dart client will not be generated"
|
|
29
|
+
);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
25
32
|
const result = createDartClient(def, {
|
|
26
33
|
clientName: options.clientName
|
|
27
34
|
});
|
|
@@ -448,14 +455,32 @@ function dartParsedJsonField(fieldName, jsonKey, dartType) {
|
|
|
448
455
|
jsonKey,
|
|
449
456
|
"false"
|
|
450
457
|
);
|
|
458
|
+
case "bool?":
|
|
459
|
+
return transformers.bool.fromJsonBody(
|
|
460
|
+
fieldName,
|
|
461
|
+
jsonKey,
|
|
462
|
+
"null"
|
|
463
|
+
);
|
|
451
464
|
case "double":
|
|
452
465
|
return transformers.double.fromJsonBody(
|
|
453
466
|
fieldName,
|
|
454
467
|
jsonKey,
|
|
455
468
|
"0.0"
|
|
456
469
|
);
|
|
470
|
+
case "double?":
|
|
471
|
+
return transformers.double.fromJsonBody(
|
|
472
|
+
fieldName,
|
|
473
|
+
jsonKey,
|
|
474
|
+
"null"
|
|
475
|
+
);
|
|
457
476
|
case "int":
|
|
458
477
|
return transformers.int.fromJsonBody(fieldName, jsonKey, "0");
|
|
478
|
+
case "int?":
|
|
479
|
+
return transformers.int.fromJsonBody(
|
|
480
|
+
fieldName,
|
|
481
|
+
jsonKey,
|
|
482
|
+
"null"
|
|
483
|
+
);
|
|
459
484
|
case "null":
|
|
460
485
|
return transformers.null.fromJsonBody(fieldName, jsonKey, "");
|
|
461
486
|
case "DateTime":
|
|
@@ -524,11 +549,11 @@ const transformers = {
|
|
|
524
549
|
toJsonBody: defaultToJsonBody
|
|
525
550
|
},
|
|
526
551
|
int: {
|
|
527
|
-
fromJsonBody: (key, jsonKey, fallback) =>
|
|
552
|
+
fromJsonBody: (key, jsonKey, fallback) => fallback === "null" ? `${key}: nullableIntFromDynamic(json["${jsonKey}"])` : `${key}: intFromDynamic(json["${jsonKey}"], ${fallback})`,
|
|
528
553
|
toJsonBody: defaultToJsonBody
|
|
529
554
|
},
|
|
530
555
|
double: {
|
|
531
|
-
fromJsonBody: (key, jsonKey, fallback) =>
|
|
556
|
+
fromJsonBody: (key, jsonKey, fallback) => fallback === "null" ? `${key}: nullableDoubleFromDynamic(json["${jsonKey}"])` : `${key}: doubleFromDynamic(json["${jsonKey}"], ${fallback})`,
|
|
532
557
|
toJsonBody: defaultToJsonBody
|
|
533
558
|
},
|
|
534
559
|
String: {
|
|
@@ -540,7 +565,7 @@ const transformers = {
|
|
|
540
565
|
toJsonBody: defaultToJsonBody
|
|
541
566
|
},
|
|
542
567
|
DateTime: {
|
|
543
|
-
fromJsonBody: (key, jsonKey, fallback) => `${key}: json["${jsonKey}"]
|
|
568
|
+
fromJsonBody: (key, jsonKey, fallback) => fallback === "null" ? `${key}: nullableDateTimeFromDynamic(json["${jsonKey}"])` : `${key}: dateTimeFromDynamic(json["${jsonKey}"], ${fallback})`,
|
|
544
569
|
toJsonBody: (key, jsonKey, isNullable) => `"${jsonKey}": ${key}${isNullable ? "?" : ""}.toIso8601String()`
|
|
545
570
|
},
|
|
546
571
|
"List<null>": {
|
|
@@ -579,7 +604,10 @@ const transformers = {
|
|
|
579
604
|
}
|
|
580
605
|
};
|
|
581
606
|
function defaultFromJsonBody(key, jsonKey, typename, fallback) {
|
|
582
|
-
|
|
607
|
+
if (fallback === "null") {
|
|
608
|
+
return `${key}: nullableTypeFromDynamic<${typename}>(json["${jsonKey}"])`;
|
|
609
|
+
}
|
|
610
|
+
return `${key}: typeFromDynamic<${typename}>(json["${jsonKey}"], ${fallback})`;
|
|
583
611
|
}
|
|
584
612
|
function defaultListFromJsonBody(key, jsonKey, typename, fallback) {
|
|
585
613
|
return `${key}: json["${jsonKey}"] is List<${typename}> ? json["${jsonKey}"] : ${fallback}`;
|
|
@@ -604,7 +632,7 @@ const classTransformer = (typename, nullable) => {
|
|
|
604
632
|
const classListTransformer = (typename) => {
|
|
605
633
|
return {
|
|
606
634
|
fromJsonBody: (key, jsonKey, fallback) => {
|
|
607
|
-
return `${key}: json["${jsonKey}"] is List
|
|
635
|
+
return `${key}: json["${jsonKey}"] is List ?
|
|
608
636
|
(json["${jsonKey}"] as List<Map<String, dynamic>>)
|
|
609
637
|
.map((val) => ${typename}.fromJson(val)).toList() : ${fallback}`;
|
|
610
638
|
},
|
|
@@ -20,6 +20,13 @@ const dartClientGenerator = defineClientGeneratorPlugin(
|
|
|
20
20
|
'Missing "outputFile" cannot generate dart client'
|
|
21
21
|
);
|
|
22
22
|
}
|
|
23
|
+
const numProcedures = Object.keys(def.procedures).length;
|
|
24
|
+
if (numProcedures <= 0) {
|
|
25
|
+
console.warn(
|
|
26
|
+
"No procedures found in definition file. Dart client will not be generated"
|
|
27
|
+
);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
23
30
|
const result = createDartClient(def, {
|
|
24
31
|
clientName: options.clientName
|
|
25
32
|
});
|
|
@@ -446,14 +453,32 @@ function dartParsedJsonField(fieldName, jsonKey, dartType) {
|
|
|
446
453
|
jsonKey,
|
|
447
454
|
"false"
|
|
448
455
|
);
|
|
456
|
+
case "bool?":
|
|
457
|
+
return transformers.bool.fromJsonBody(
|
|
458
|
+
fieldName,
|
|
459
|
+
jsonKey,
|
|
460
|
+
"null"
|
|
461
|
+
);
|
|
449
462
|
case "double":
|
|
450
463
|
return transformers.double.fromJsonBody(
|
|
451
464
|
fieldName,
|
|
452
465
|
jsonKey,
|
|
453
466
|
"0.0"
|
|
454
467
|
);
|
|
468
|
+
case "double?":
|
|
469
|
+
return transformers.double.fromJsonBody(
|
|
470
|
+
fieldName,
|
|
471
|
+
jsonKey,
|
|
472
|
+
"null"
|
|
473
|
+
);
|
|
455
474
|
case "int":
|
|
456
475
|
return transformers.int.fromJsonBody(fieldName, jsonKey, "0");
|
|
476
|
+
case "int?":
|
|
477
|
+
return transformers.int.fromJsonBody(
|
|
478
|
+
fieldName,
|
|
479
|
+
jsonKey,
|
|
480
|
+
"null"
|
|
481
|
+
);
|
|
457
482
|
case "null":
|
|
458
483
|
return transformers.null.fromJsonBody(fieldName, jsonKey, "");
|
|
459
484
|
case "DateTime":
|
|
@@ -522,11 +547,11 @@ const transformers = {
|
|
|
522
547
|
toJsonBody: defaultToJsonBody
|
|
523
548
|
},
|
|
524
549
|
int: {
|
|
525
|
-
fromJsonBody: (key, jsonKey, fallback) =>
|
|
550
|
+
fromJsonBody: (key, jsonKey, fallback) => fallback === "null" ? `${key}: nullableIntFromDynamic(json["${jsonKey}"])` : `${key}: intFromDynamic(json["${jsonKey}"], ${fallback})`,
|
|
526
551
|
toJsonBody: defaultToJsonBody
|
|
527
552
|
},
|
|
528
553
|
double: {
|
|
529
|
-
fromJsonBody: (key, jsonKey, fallback) =>
|
|
554
|
+
fromJsonBody: (key, jsonKey, fallback) => fallback === "null" ? `${key}: nullableDoubleFromDynamic(json["${jsonKey}"])` : `${key}: doubleFromDynamic(json["${jsonKey}"], ${fallback})`,
|
|
530
555
|
toJsonBody: defaultToJsonBody
|
|
531
556
|
},
|
|
532
557
|
String: {
|
|
@@ -538,7 +563,7 @@ const transformers = {
|
|
|
538
563
|
toJsonBody: defaultToJsonBody
|
|
539
564
|
},
|
|
540
565
|
DateTime: {
|
|
541
|
-
fromJsonBody: (key, jsonKey, fallback) => `${key}: json["${jsonKey}"]
|
|
566
|
+
fromJsonBody: (key, jsonKey, fallback) => fallback === "null" ? `${key}: nullableDateTimeFromDynamic(json["${jsonKey}"])` : `${key}: dateTimeFromDynamic(json["${jsonKey}"], ${fallback})`,
|
|
542
567
|
toJsonBody: (key, jsonKey, isNullable) => `"${jsonKey}": ${key}${isNullable ? "?" : ""}.toIso8601String()`
|
|
543
568
|
},
|
|
544
569
|
"List<null>": {
|
|
@@ -577,7 +602,10 @@ const transformers = {
|
|
|
577
602
|
}
|
|
578
603
|
};
|
|
579
604
|
function defaultFromJsonBody(key, jsonKey, typename, fallback) {
|
|
580
|
-
|
|
605
|
+
if (fallback === "null") {
|
|
606
|
+
return `${key}: nullableTypeFromDynamic<${typename}>(json["${jsonKey}"])`;
|
|
607
|
+
}
|
|
608
|
+
return `${key}: typeFromDynamic<${typename}>(json["${jsonKey}"], ${fallback})`;
|
|
581
609
|
}
|
|
582
610
|
function defaultListFromJsonBody(key, jsonKey, typename, fallback) {
|
|
583
611
|
return `${key}: json["${jsonKey}"] is List<${typename}> ? json["${jsonKey}"] : ${fallback}`;
|
|
@@ -602,7 +630,7 @@ const classTransformer = (typename, nullable) => {
|
|
|
602
630
|
const classListTransformer = (typename) => {
|
|
603
631
|
return {
|
|
604
632
|
fromJsonBody: (key, jsonKey, fallback) => {
|
|
605
|
-
return `${key}: json["${jsonKey}"] is List
|
|
633
|
+
return `${key}: json["${jsonKey}"] is List ?
|
|
606
634
|
(json["${jsonKey}"] as List<Map<String, dynamic>>)
|
|
607
635
|
.map((val) => ${typename}.fromJson(val)).toList() : ${fallback}`;
|
|
608
636
|
},
|