@haneullabs/codegen 0.1.0 → 0.8.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/CHANGELOG.md +138 -33
- package/README.md +40 -38
- package/dist/bin/bash-complete.d.mts +6 -0
- package/dist/bin/bash-complete.d.mts.map +1 -0
- package/dist/bin/bash-complete.mjs +29 -0
- package/dist/bin/bash-complete.mjs.map +1 -0
- package/dist/bin/cli.d.mts +1 -0
- package/dist/bin/cli.mjs +24 -0
- package/dist/bin/cli.mjs.map +1 -0
- package/dist/cli/cli.mjs +28 -0
- package/dist/cli/cli.mjs.map +1 -0
- package/dist/cli/commands/generate/command.mjs +90 -0
- package/dist/cli/commands/generate/command.mjs.map +1 -0
- package/dist/cli/commands/generate/impl.mjs +72 -0
- package/dist/cli/commands/generate/impl.mjs.map +1 -0
- package/dist/cli/context.mjs +17 -0
- package/dist/cli/context.mjs.map +1 -0
- package/dist/config.d.mts +105 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +70 -0
- package/dist/config.mjs.map +1 -0
- package/dist/file-builder.mjs +66 -0
- package/dist/file-builder.mjs.map +1 -0
- package/dist/{esm/generate-utils.js → generate-utils.mjs} +95 -27
- package/dist/generate-utils.mjs.map +1 -0
- package/dist/index.d.mts +21 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +80 -0
- package/dist/index.mjs.map +1 -0
- package/dist/move-module-builder.mjs +350 -0
- package/dist/move-module-builder.mjs.map +1 -0
- package/dist/render-types.mjs +207 -0
- package/dist/render-types.mjs.map +1 -0
- package/dist/utils.mjs +89 -0
- package/dist/utils.mjs.map +1 -0
- package/docs/index.md +436 -0
- package/docs/llms-index.md +6 -0
- package/package.json +29 -28
- package/src/bin/bash-complete.ts +18 -7
- package/src/bin/cli.ts +3 -9
- package/src/cli/commands/generate/command.ts +32 -0
- package/src/cli/commands/generate/impl.ts +93 -5
- package/src/config.ts +53 -5
- package/src/file-builder.ts +15 -1
- package/src/generate-utils.ts +88 -18
- package/src/index.ts +89 -29
- package/src/move-module-builder.ts +181 -76
- package/src/render-types.ts +82 -29
- package/dist/cjs/bin/bash-complete.d.ts +0 -2
- package/dist/cjs/bin/bash-complete.js +0 -51
- package/dist/cjs/bin/bash-complete.js.map +0 -7
- package/dist/cjs/bin/cli.d.ts +0 -2
- package/dist/cjs/bin/cli.js +0 -34
- package/dist/cjs/bin/cli.js.map +0 -7
- package/dist/cjs/cli/cli.d.ts +0 -1
- package/dist/cjs/cli/cli.js +0 -49
- package/dist/cjs/cli/cli.js.map +0 -7
- package/dist/cjs/cli/commands/generate/command.d.ts +0 -1
- package/dist/cjs/cli/commands/generate/command.js +0 -80
- package/dist/cjs/cli/commands/generate/command.js.map +0 -7
- package/dist/cjs/cli/commands/generate/impl.d.ts +0 -8
- package/dist/cjs/cli/commands/generate/impl.js +0 -66
- package/dist/cjs/cli/commands/generate/impl.js.map +0 -7
- package/dist/cjs/cli/context.d.ts +0 -6
- package/dist/cjs/cli/context.js +0 -45
- package/dist/cjs/cli/context.js.map +0 -7
- package/dist/cjs/config.d.ts +0 -51
- package/dist/cjs/config.js +0 -75
- package/dist/cjs/config.js.map +0 -7
- package/dist/cjs/file-builder.d.ts +0 -13
- package/dist/cjs/file-builder.js +0 -83
- package/dist/cjs/file-builder.js.map +0 -7
- package/dist/cjs/generate-utils.d.ts +0 -1
- package/dist/cjs/generate-utils.js +0 -187
- package/dist/cjs/generate-utils.js.map +0 -7
- package/dist/cjs/index.d.ts +0 -8
- package/dist/cjs/index.js +0 -124
- package/dist/cjs/index.js.map +0 -7
- package/dist/cjs/move-module-builder.d.ts +0 -26
- package/dist/cjs/move-module-builder.js +0 -464
- package/dist/cjs/move-module-builder.js.map +0 -7
- package/dist/cjs/package.json +0 -5
- package/dist/cjs/render-types.d.ts +0 -19
- package/dist/cjs/render-types.js +0 -313
- package/dist/cjs/render-types.js.map +0 -7
- package/dist/cjs/summary.d.ts +0 -3
- package/dist/cjs/summary.js +0 -218
- package/dist/cjs/summary.js.map +0 -7
- package/dist/cjs/types/deserialized.d.ts +0 -89
- package/dist/cjs/types/deserialized.js +0 -17
- package/dist/cjs/types/deserialized.js.map +0 -7
- package/dist/cjs/types/summary.d.ts +0 -105
- package/dist/cjs/types/summary.js +0 -17
- package/dist/cjs/types/summary.js.map +0 -7
- package/dist/cjs/utils.d.ts +0 -22
- package/dist/cjs/utils.js +0 -164
- package/dist/cjs/utils.js.map +0 -7
- package/dist/esm/bin/bash-complete.d.ts +0 -2
- package/dist/esm/bin/bash-complete.js +0 -31
- package/dist/esm/bin/bash-complete.js.map +0 -7
- package/dist/esm/bin/cli.d.ts +0 -2
- package/dist/esm/bin/cli.js +0 -32
- package/dist/esm/bin/cli.js.map +0 -7
- package/dist/esm/cli/cli.d.ts +0 -1
- package/dist/esm/cli/cli.js +0 -29
- package/dist/esm/cli/cli.js.map +0 -7
- package/dist/esm/cli/commands/generate/command.d.ts +0 -1
- package/dist/esm/cli/commands/generate/command.js +0 -50
- package/dist/esm/cli/commands/generate/command.js.map +0 -7
- package/dist/esm/cli/commands/generate/impl.d.ts +0 -8
- package/dist/esm/cli/commands/generate/impl.js +0 -46
- package/dist/esm/cli/commands/generate/impl.js.map +0 -7
- package/dist/esm/cli/context.d.ts +0 -6
- package/dist/esm/cli/context.js +0 -15
- package/dist/esm/cli/context.js.map +0 -7
- package/dist/esm/config.d.ts +0 -51
- package/dist/esm/config.js +0 -45
- package/dist/esm/config.js.map +0 -7
- package/dist/esm/file-builder.d.ts +0 -13
- package/dist/esm/file-builder.js +0 -63
- package/dist/esm/file-builder.js.map +0 -7
- package/dist/esm/generate-utils.d.ts +0 -1
- package/dist/esm/generate-utils.js.map +0 -7
- package/dist/esm/index.d.ts +0 -8
- package/dist/esm/index.js +0 -104
- package/dist/esm/index.js.map +0 -7
- package/dist/esm/move-module-builder.d.ts +0 -26
- package/dist/esm/move-module-builder.js +0 -457
- package/dist/esm/move-module-builder.js.map +0 -7
- package/dist/esm/package.json +0 -5
- package/dist/esm/render-types.d.ts +0 -19
- package/dist/esm/render-types.js +0 -293
- package/dist/esm/render-types.js.map +0 -7
- package/dist/esm/summary.d.ts +0 -3
- package/dist/esm/summary.js +0 -198
- package/dist/esm/summary.js.map +0 -7
- package/dist/esm/types/deserialized.d.ts +0 -89
- package/dist/esm/types/deserialized.js +0 -1
- package/dist/esm/types/deserialized.js.map +0 -7
- package/dist/esm/types/summary.d.ts +0 -105
- package/dist/esm/types/summary.js +0 -1
- package/dist/esm/types/summary.js.map +0 -7
- package/dist/esm/utils.d.ts +0 -22
- package/dist/esm/utils.js +0 -134
- package/dist/esm/utils.js.map +0 -7
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { buildCommand } from "@stricli/core";
|
|
2
|
+
|
|
3
|
+
//#region src/cli/commands/generate/command.ts
|
|
4
|
+
const generateCommand = buildCommand({
|
|
5
|
+
loader: async () => (await import("./impl.mjs")).default,
|
|
6
|
+
parameters: {
|
|
7
|
+
positional: {
|
|
8
|
+
kind: "array",
|
|
9
|
+
parameter: {
|
|
10
|
+
parse: String,
|
|
11
|
+
brief: "package name, mvr name, or path to a move package"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
flags: {
|
|
15
|
+
outputDir: {
|
|
16
|
+
kind: "parsed",
|
|
17
|
+
parse: String,
|
|
18
|
+
brief: "Output directory",
|
|
19
|
+
optional: true
|
|
20
|
+
},
|
|
21
|
+
noPrune: {
|
|
22
|
+
kind: "parsed",
|
|
23
|
+
parse: Boolean,
|
|
24
|
+
optional: true,
|
|
25
|
+
brief: "generate all types and functions in dependencies"
|
|
26
|
+
},
|
|
27
|
+
noSummaries: {
|
|
28
|
+
kind: "parsed",
|
|
29
|
+
parse: Boolean,
|
|
30
|
+
optional: true,
|
|
31
|
+
brief: "Do not generate summaries for packages"
|
|
32
|
+
},
|
|
33
|
+
network: {
|
|
34
|
+
kind: "enum",
|
|
35
|
+
values: ["mainnet", "testnet"],
|
|
36
|
+
optional: true,
|
|
37
|
+
brief: "Network to generate for (default: testnet)"
|
|
38
|
+
},
|
|
39
|
+
importExtension: {
|
|
40
|
+
kind: "enum",
|
|
41
|
+
values: [
|
|
42
|
+
".js",
|
|
43
|
+
".ts",
|
|
44
|
+
"none"
|
|
45
|
+
],
|
|
46
|
+
optional: true,
|
|
47
|
+
brief: "File extension for import statements (default: .js)"
|
|
48
|
+
},
|
|
49
|
+
modules: {
|
|
50
|
+
kind: "parsed",
|
|
51
|
+
parse: String,
|
|
52
|
+
optional: true,
|
|
53
|
+
variadic: ",",
|
|
54
|
+
brief: "Only generate from these modules (comma-separated)"
|
|
55
|
+
},
|
|
56
|
+
noTypes: {
|
|
57
|
+
kind: "parsed",
|
|
58
|
+
parse: Boolean,
|
|
59
|
+
optional: true,
|
|
60
|
+
brief: "Skip type generation"
|
|
61
|
+
},
|
|
62
|
+
noFunctions: {
|
|
63
|
+
kind: "parsed",
|
|
64
|
+
parse: Boolean,
|
|
65
|
+
optional: true,
|
|
66
|
+
brief: "Skip function generation"
|
|
67
|
+
},
|
|
68
|
+
private: {
|
|
69
|
+
kind: "enum",
|
|
70
|
+
values: [
|
|
71
|
+
"none",
|
|
72
|
+
"entry",
|
|
73
|
+
"all"
|
|
74
|
+
],
|
|
75
|
+
optional: true,
|
|
76
|
+
brief: "Which private functions to generate (default: entry)"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
aliases: {
|
|
80
|
+
o: "outputDir",
|
|
81
|
+
n: "network",
|
|
82
|
+
m: "modules"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
docs: { brief: "Generate BCS and moveCall helpers from you Move code" }
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
//#endregion
|
|
89
|
+
export { generateCommand };
|
|
90
|
+
//# sourceMappingURL=command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.mjs","names":[],"sources":["../../../../src/cli/commands/generate/command.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { buildCommand } from '@stricli/core';\n\nexport const generateCommand = buildCommand({\n\tloader: async () => (await import('./impl.js')).default,\n\tparameters: {\n\t\tpositional: {\n\t\t\tkind: 'array',\n\t\t\tparameter: {\n\t\t\t\tparse: String,\n\t\t\t\tbrief: 'package name, mvr name, or path to a move package',\n\t\t\t},\n\t\t},\n\t\tflags: {\n\t\t\toutputDir: {\n\t\t\t\tkind: 'parsed',\n\t\t\t\tparse: String,\n\t\t\t\tbrief: 'Output directory',\n\t\t\t\toptional: true,\n\t\t\t},\n\t\t\tnoPrune: {\n\t\t\t\tkind: 'parsed',\n\t\t\t\tparse: Boolean,\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'generate all types and functions in dependencies',\n\t\t\t},\n\t\t\tnoSummaries: {\n\t\t\t\tkind: 'parsed',\n\t\t\t\tparse: Boolean,\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'Do not generate summaries for packages',\n\t\t\t},\n\t\t\tnetwork: {\n\t\t\t\tkind: 'enum',\n\t\t\t\tvalues: ['mainnet', 'testnet'],\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'Network to generate for (default: testnet)',\n\t\t\t},\n\t\t\timportExtension: {\n\t\t\t\tkind: 'enum',\n\t\t\t\tvalues: ['.js', '.ts', 'none'],\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'File extension for import statements (default: .js)',\n\t\t\t},\n\t\t\tmodules: {\n\t\t\t\tkind: 'parsed',\n\t\t\t\tparse: String,\n\t\t\t\toptional: true,\n\t\t\t\tvariadic: ',',\n\t\t\t\tbrief: 'Only generate from these modules (comma-separated)',\n\t\t\t},\n\t\t\tnoTypes: {\n\t\t\t\tkind: 'parsed',\n\t\t\t\tparse: Boolean,\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'Skip type generation',\n\t\t\t},\n\t\t\tnoFunctions: {\n\t\t\t\tkind: 'parsed',\n\t\t\t\tparse: Boolean,\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'Skip function generation',\n\t\t\t},\n\t\t\tprivate: {\n\t\t\t\tkind: 'enum',\n\t\t\t\tvalues: ['none', 'entry', 'all'],\n\t\t\t\toptional: true,\n\t\t\t\tbrief: 'Which private functions to generate (default: entry)',\n\t\t\t},\n\t\t},\n\t\taliases: {\n\t\t\to: 'outputDir',\n\t\t\tn: 'network',\n\t\t\tm: 'modules',\n\t\t},\n\t},\n\tdocs: {\n\t\tbrief: 'Generate BCS and moveCall helpers from you Move code',\n\t},\n});\n"],"mappings":";;;AAKA,MAAa,kBAAkB,aAAa;CAC3C,QAAQ,aAAa,MAAM,OAAO,eAAc;CAChD,YAAY;EACX,YAAY;GACX,MAAM;GACN,WAAW;IACV,OAAO;IACP,OAAO;IACP;GACD;EACD,OAAO;GACN,WAAW;IACV,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV;GACD,SAAS;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,OAAO;IACP;GACD,aAAa;IACZ,MAAM;IACN,OAAO;IACP,UAAU;IACV,OAAO;IACP;GACD,SAAS;IACR,MAAM;IACN,QAAQ,CAAC,WAAW,UAAU;IAC9B,UAAU;IACV,OAAO;IACP;GACD,iBAAiB;IAChB,MAAM;IACN,QAAQ;KAAC;KAAO;KAAO;KAAO;IAC9B,UAAU;IACV,OAAO;IACP;GACD,SAAS;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,UAAU;IACV,OAAO;IACP;GACD,SAAS;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,OAAO;IACP;GACD,aAAa;IACZ,MAAM;IACN,OAAO;IACP,UAAU;IACV,OAAO;IACP;GACD,SAAS;IACR,MAAM;IACN,QAAQ;KAAC;KAAQ;KAAS;KAAM;IAChC,UAAU;IACV,OAAO;IACP;GACD;EACD,SAAS;GACR,GAAG;GACH,GAAG;GACH,GAAG;GACH;EACD;CACD,MAAM,EACL,OAAO,wDACP;CACD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { generateFromPackageSummary } from "../../../index.mjs";
|
|
2
|
+
import { loadConfig } from "../../../config.mjs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { isValidHaneulObjectId, isValidNamedPackage } from "@haneullabs/haneul/utils";
|
|
5
|
+
import { existsSync, mkdtempSync } from "node:fs";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { execSync } from "node:child_process";
|
|
8
|
+
|
|
9
|
+
//#region src/cli/commands/generate/impl.ts
|
|
10
|
+
async function generate(flags, ...packages) {
|
|
11
|
+
const config = await loadConfig();
|
|
12
|
+
const normalizedPackages = packages.length > 0 ? packages.map((p) => {
|
|
13
|
+
const trimmed = p.trim();
|
|
14
|
+
if (isValidHaneulObjectId(trimmed) || isValidNamedPackage(trimmed)) return {
|
|
15
|
+
network: flags.network ?? "testnet",
|
|
16
|
+
packageName: isValidHaneulObjectId(trimmed) ? trimmed : trimmed.split("/")[1],
|
|
17
|
+
package: trimmed,
|
|
18
|
+
packageId: isValidHaneulObjectId(trimmed) ? trimmed : void 0
|
|
19
|
+
};
|
|
20
|
+
else return {
|
|
21
|
+
package: "@local-pkg/" + trimmed,
|
|
22
|
+
packageName: trimmed,
|
|
23
|
+
path: trimmed
|
|
24
|
+
};
|
|
25
|
+
}) : config.packages;
|
|
26
|
+
const generateSummaries = flags.noSummaries === void 0 ? config.generateSummaries : !flags.noSummaries;
|
|
27
|
+
const cliPrivate = flags.private !== void 0 ? flags.private === "all" ? true : flags.private === "none" ? false : "entry" : void 0;
|
|
28
|
+
const cliGenerate = flags.modules !== void 0 || flags.noTypes !== void 0 || flags.noFunctions !== void 0 || flags.private !== void 0 ? {
|
|
29
|
+
...flags.modules !== void 0 && { modules: flags.modules },
|
|
30
|
+
...flags.noTypes !== void 0 && { types: !flags.noTypes },
|
|
31
|
+
...flags.noFunctions !== void 0 || flags.private !== void 0 ? { functions: flags.noFunctions ? false : cliPrivate !== void 0 ? { private: cliPrivate } : true } : {}
|
|
32
|
+
} : void 0;
|
|
33
|
+
for (const pkg of normalizedPackages) {
|
|
34
|
+
if ("packageId" in pkg && pkg.packageId || "network" in pkg && !("path" in pkg)) {
|
|
35
|
+
const packageId = "packageId" in pkg ? pkg.packageId : pkg.package;
|
|
36
|
+
const tempDir = mkdtempSync(join(tmpdir(), "haneul-codegen-"));
|
|
37
|
+
console.log(`Generating summary for on-chain package ${packageId} to ${tempDir}`);
|
|
38
|
+
execSync(`haneul move summary --package-id ${packageId} --output-directory ${tempDir}`, { stdio: "inherit" });
|
|
39
|
+
pkg.path = tempDir;
|
|
40
|
+
} else if (generateSummaries && pkg.path) {
|
|
41
|
+
if (!existsSync(pkg.path)) throw new Error(`Package path does not exist: ${pkg.path}`);
|
|
42
|
+
execSync("haneul move summary", {
|
|
43
|
+
cwd: pkg.path,
|
|
44
|
+
stdio: "inherit"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const importExtension = flags.importExtension === void 0 ? config.importExtension : flags.importExtension === "none" ? "" : flags.importExtension;
|
|
48
|
+
const pkgWithOverrides = cliGenerate ? {
|
|
49
|
+
...pkg,
|
|
50
|
+
generate: {
|
|
51
|
+
..."generate" in pkg ? pkg.generate : {},
|
|
52
|
+
...cliGenerate
|
|
53
|
+
}
|
|
54
|
+
} : pkg;
|
|
55
|
+
const globalGenerate = config.privateMethods && !config.generate?.functions ? {
|
|
56
|
+
...config.generate,
|
|
57
|
+
functions: { private: config.privateMethods === "all" ? true : config.privateMethods === "none" ? false : "entry" }
|
|
58
|
+
} : config.generate;
|
|
59
|
+
await generateFromPackageSummary({
|
|
60
|
+
package: pkgWithOverrides,
|
|
61
|
+
prune: flags.noPrune === void 0 ? config.prune : !flags.noPrune,
|
|
62
|
+
outputDir: flags.outputDir ?? config.output,
|
|
63
|
+
globalGenerate,
|
|
64
|
+
importExtension,
|
|
65
|
+
includePhantomTypeParameters: config.includePhantomTypeParameters
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
export { generate as default };
|
|
72
|
+
//# sourceMappingURL=impl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impl.mjs","names":[],"sources":["../../../../src/cli/commands/generate/impl.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { LocalContext } from '../../context.js';\nimport { generateFromPackageSummary } from '../../../index.js';\nimport { loadConfig, type GenerateBase, type PackageGenerate } from '../../../config.js';\nimport { isValidNamedPackage, isValidHaneulObjectId } from '@haneullabs/haneul/utils';\nimport { execSync } from 'node:child_process';\nimport { existsSync, mkdtempSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\n\nexport interface SubdirCommandFlags {\n\toutputDir?: string;\n\tnoPrune?: boolean;\n\tnoSummaries?: boolean;\n\tnetwork?: 'mainnet' | 'testnet';\n\timportExtension?: '.js' | '.ts' | 'none';\n\tmodules?: string[];\n\tnoTypes?: boolean;\n\tnoFunctions?: boolean;\n\tprivate?: 'none' | 'entry' | 'all';\n}\n\nexport default async function generate(\n\tthis: LocalContext,\n\tflags: SubdirCommandFlags,\n\t...packages: string[]\n): Promise<void> {\n\tconst config = await loadConfig();\n\n\tconst normalizedPackages =\n\t\tpackages.length > 0\n\t\t\t? packages.map((p) => {\n\t\t\t\t\tconst trimmed = p.trim();\n\t\t\t\t\tif (isValidHaneulObjectId(trimmed) || isValidNamedPackage(trimmed)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnetwork: flags.network ?? 'testnet',\n\t\t\t\t\t\t\tpackageName: isValidHaneulObjectId(trimmed) ? trimmed : trimmed.split('/')[1],\n\t\t\t\t\t\t\tpackage: trimmed,\n\t\t\t\t\t\t\tpackageId: isValidHaneulObjectId(trimmed) ? trimmed : undefined,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tpackage: '@local-pkg/' + trimmed,\n\t\t\t\t\t\t\tpackageName: trimmed,\n\t\t\t\t\t\t\tpath: trimmed,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t: config.packages;\n\n\tconst generateSummaries =\n\t\tflags.noSummaries === undefined ? config.generateSummaries : !flags.noSummaries;\n\n\tconst cliPrivate =\n\t\tflags.private !== undefined\n\t\t\t? flags.private === 'all'\n\t\t\t\t? true\n\t\t\t\t: flags.private === 'none'\n\t\t\t\t\t? false\n\t\t\t\t\t: 'entry'\n\t\t\t: undefined;\n\n\tconst cliGenerate: PackageGenerate | undefined =\n\t\tflags.modules !== undefined ||\n\t\tflags.noTypes !== undefined ||\n\t\tflags.noFunctions !== undefined ||\n\t\tflags.private !== undefined\n\t\t\t? {\n\t\t\t\t\t...(flags.modules !== undefined && { modules: flags.modules }),\n\t\t\t\t\t...(flags.noTypes !== undefined && { types: !flags.noTypes as boolean }),\n\t\t\t\t\t...(flags.noFunctions !== undefined || flags.private !== undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tfunctions: flags.noFunctions\n\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t: cliPrivate !== undefined\n\t\t\t\t\t\t\t\t\t\t? { private: cliPrivate }\n\t\t\t\t\t\t\t\t\t\t: true,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {}),\n\t\t\t\t}\n\t\t\t: undefined;\n\n\tfor (const pkg of normalizedPackages) {\n\t\t// Detect on-chain packages: they have 'network' field and no 'path'\n\t\tconst isOnChainPackage =\n\t\t\t('packageId' in pkg && pkg.packageId) || ('network' in pkg && !('path' in pkg));\n\n\t\t// Generate summaries for on-chain packages using --package-id\n\t\tif (isOnChainPackage) {\n\t\t\tconst packageId = 'packageId' in pkg ? pkg.packageId : pkg.package;\n\t\t\tconst tempDir = mkdtempSync(join(tmpdir(), 'haneul-codegen-'));\n\t\t\tconsole.log(`Generating summary for on-chain package ${packageId} to ${tempDir}`);\n\n\t\t\texecSync(`haneul move summary --package-id ${packageId} --output-directory ${tempDir}`, {\n\t\t\t\tstdio: 'inherit',\n\t\t\t});\n\n\t\t\t// Set the path to use the generated summary directory\n\t\t\t(pkg as { path?: string }).path = tempDir;\n\t\t} else if (generateSummaries && pkg.path) {\n\t\t\tif (!existsSync(pkg.path)) {\n\t\t\t\tthrow new Error(`Package path does not exist: ${pkg.path}`);\n\t\t\t}\n\n\t\t\texecSync('haneul move summary', {\n\t\t\t\tcwd: pkg.path,\n\t\t\t\tstdio: 'inherit',\n\t\t\t});\n\t\t}\n\t\tconst importExtension =\n\t\t\tflags.importExtension === undefined\n\t\t\t\t? config.importExtension\n\t\t\t\t: flags.importExtension === 'none'\n\t\t\t\t\t? ''\n\t\t\t\t\t: flags.importExtension;\n\n\t\tconst pkgWithOverrides = cliGenerate\n\t\t\t? {\n\t\t\t\t\t...pkg,\n\t\t\t\t\tgenerate: {\n\t\t\t\t\t\t...('generate' in pkg ? pkg.generate : {}),\n\t\t\t\t\t\t...cliGenerate,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: pkg;\n\n\t\t// Fold deprecated privateMethods into globalGenerate\n\t\tconst globalGenerate: GenerateBase | undefined =\n\t\t\tconfig.privateMethods && !config.generate?.functions\n\t\t\t\t? {\n\t\t\t\t\t\t...config.generate,\n\t\t\t\t\t\tfunctions: {\n\t\t\t\t\t\t\tprivate:\n\t\t\t\t\t\t\t\tconfig.privateMethods === 'all'\n\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t: config.privateMethods === 'none'\n\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t: 'entry',\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: config.generate;\n\n\t\tawait generateFromPackageSummary({\n\t\t\tpackage: pkgWithOverrides,\n\t\t\tprune: flags.noPrune === undefined ? config.prune : !flags.noPrune,\n\t\t\toutputDir: flags.outputDir ?? config.output,\n\t\t\tglobalGenerate,\n\t\t\timportExtension,\n\t\t\tincludePhantomTypeParameters: config.includePhantomTypeParameters,\n\t\t});\n\t}\n}\n"],"mappings":";;;;;;;;;AAwBA,eAA8B,SAE7B,OACA,GAAG,UACa;CAChB,MAAM,SAAS,MAAM,YAAY;CAEjC,MAAM,qBACL,SAAS,SAAS,IACf,SAAS,KAAK,MAAM;EACpB,MAAM,UAAU,EAAE,MAAM;AACxB,MAAI,sBAAsB,QAAQ,IAAI,oBAAoB,QAAQ,CACjE,QAAO;GACN,SAAS,MAAM,WAAW;GAC1B,aAAa,sBAAsB,QAAQ,GAAG,UAAU,QAAQ,MAAM,IAAI,CAAC;GAC3E,SAAS;GACT,WAAW,sBAAsB,QAAQ,GAAG,UAAU;GACtD;MAED,QAAO;GACN,SAAS,gBAAgB;GACzB,aAAa;GACb,MAAM;GACN;GAED,GACD,OAAO;CAEX,MAAM,oBACL,MAAM,gBAAgB,SAAY,OAAO,oBAAoB,CAAC,MAAM;CAErE,MAAM,aACL,MAAM,YAAY,SACf,MAAM,YAAY,QACjB,OACA,MAAM,YAAY,SACjB,QACA,UACF;CAEJ,MAAM,cACL,MAAM,YAAY,UAClB,MAAM,YAAY,UAClB,MAAM,gBAAgB,UACtB,MAAM,YAAY,SACf;EACA,GAAI,MAAM,YAAY,UAAa,EAAE,SAAS,MAAM,SAAS;EAC7D,GAAI,MAAM,YAAY,UAAa,EAAE,OAAO,CAAC,MAAM,SAAoB;EACvE,GAAI,MAAM,gBAAgB,UAAa,MAAM,YAAY,SACtD,EACA,WAAW,MAAM,cACd,QACA,eAAe,SACd,EAAE,SAAS,YAAY,GACvB,MACJ,GACA,EAAE;EACL,GACA;AAEJ,MAAK,MAAM,OAAO,oBAAoB;AAMrC,MAHE,eAAe,OAAO,IAAI,aAAe,aAAa,OAAO,EAAE,UAAU,MAGrD;GACrB,MAAM,YAAY,eAAe,MAAM,IAAI,YAAY,IAAI;GAC3D,MAAM,UAAU,YAAY,KAAK,QAAQ,EAAE,kBAAkB,CAAC;AAC9D,WAAQ,IAAI,2CAA2C,UAAU,MAAM,UAAU;AAEjF,YAAS,oCAAoC,UAAU,sBAAsB,WAAW,EACvF,OAAO,WACP,CAAC;AAGF,GAAC,IAA0B,OAAO;aACxB,qBAAqB,IAAI,MAAM;AACzC,OAAI,CAAC,WAAW,IAAI,KAAK,CACxB,OAAM,IAAI,MAAM,gCAAgC,IAAI,OAAO;AAG5D,YAAS,uBAAuB;IAC/B,KAAK,IAAI;IACT,OAAO;IACP,CAAC;;EAEH,MAAM,kBACL,MAAM,oBAAoB,SACvB,OAAO,kBACP,MAAM,oBAAoB,SACzB,KACA,MAAM;EAEX,MAAM,mBAAmB,cACtB;GACA,GAAG;GACH,UAAU;IACT,GAAI,cAAc,MAAM,IAAI,WAAW,EAAE;IACzC,GAAG;IACH;GACD,GACA;EAGH,MAAM,iBACL,OAAO,kBAAkB,CAAC,OAAO,UAAU,YACxC;GACA,GAAG,OAAO;GACV,WAAW,EACV,SACC,OAAO,mBAAmB,QACvB,OACA,OAAO,mBAAmB,SACzB,QACA,SACL;GACD,GACA,OAAO;AAEX,QAAM,2BAA2B;GAChC,SAAS;GACT,OAAO,MAAM,YAAY,SAAY,OAAO,QAAQ,CAAC,MAAM;GAC3D,WAAW,MAAM,aAAa,OAAO;GACrC;GACA;GACA,8BAA8B,OAAO;GACrC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
|
|
5
|
+
//#region src/cli/context.ts
|
|
6
|
+
function buildContext(process) {
|
|
7
|
+
return {
|
|
8
|
+
process,
|
|
9
|
+
os,
|
|
10
|
+
fs,
|
|
11
|
+
path
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { buildContext };
|
|
17
|
+
//# sourceMappingURL=context.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.mjs","names":[],"sources":["../../src/cli/context.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { CommandContext } from '@stricli/core';\nimport type { StricliAutoCompleteContext } from '@stricli/auto-complete';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nexport interface LocalContext extends CommandContext, StricliAutoCompleteContext {\n\treadonly process: NodeJS.Process;\n}\n\nexport function buildContext(process: NodeJS.Process): LocalContext {\n\treturn {\n\t\tprocess,\n\t\tos,\n\t\tfs,\n\t\tpath,\n\t};\n}\n"],"mappings":";;;;;AAaA,SAAgB,aAAa,SAAuC;AACnE,QAAO;EACN;EACA;EACA;EACA;EACA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
//#region src/config.d.ts
|
|
4
|
+
declare const globalGenerateSchema: z.ZodObject<{
|
|
5
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
6
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
7
|
+
}, z.core.$strip>]>>;
|
|
8
|
+
types: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
declare const packageConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
11
|
+
package: z.ZodString;
|
|
12
|
+
packageName: z.ZodString;
|
|
13
|
+
path: z.ZodOptional<z.ZodNever>;
|
|
14
|
+
network: z.ZodEnum<{
|
|
15
|
+
mainnet: "mainnet";
|
|
16
|
+
testnet: "testnet";
|
|
17
|
+
}>;
|
|
18
|
+
generate: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
20
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
21
|
+
}, z.core.$strip>]>>;
|
|
22
|
+
types: z.ZodOptional<z.ZodBoolean>;
|
|
23
|
+
modules: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodObject<{
|
|
24
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodObject<{
|
|
25
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
26
|
+
}, z.core.$strip>]>>;
|
|
27
|
+
types: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>>;
|
|
28
|
+
}, z.core.$strip>]>>]>>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
31
|
+
path: z.ZodString;
|
|
32
|
+
package: z.ZodString;
|
|
33
|
+
packageName: z.ZodOptional<z.ZodString>;
|
|
34
|
+
generate: z.ZodOptional<z.ZodObject<{
|
|
35
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
36
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
37
|
+
}, z.core.$strip>]>>;
|
|
38
|
+
types: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
modules: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodObject<{
|
|
40
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodObject<{
|
|
41
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
42
|
+
}, z.core.$strip>]>>;
|
|
43
|
+
types: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>>;
|
|
44
|
+
}, z.core.$strip>]>>]>>;
|
|
45
|
+
}, z.core.$strip>>;
|
|
46
|
+
}, z.core.$strip>]>;
|
|
47
|
+
declare const importExtensionSchema: z.ZodUnion<readonly [z.ZodLiteral<".js">, z.ZodLiteral<".ts">, z.ZodLiteral<"">]>;
|
|
48
|
+
type ImportExtension = z.infer<typeof importExtensionSchema>;
|
|
49
|
+
type GenerateBase = z.infer<typeof globalGenerateSchema>;
|
|
50
|
+
declare const configSchema: z.ZodObject<{
|
|
51
|
+
output: z.ZodString;
|
|
52
|
+
prune: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
53
|
+
generateSummaries: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
54
|
+
packages: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
55
|
+
package: z.ZodString;
|
|
56
|
+
packageName: z.ZodString;
|
|
57
|
+
path: z.ZodOptional<z.ZodNever>;
|
|
58
|
+
network: z.ZodEnum<{
|
|
59
|
+
mainnet: "mainnet";
|
|
60
|
+
testnet: "testnet";
|
|
61
|
+
}>;
|
|
62
|
+
generate: z.ZodOptional<z.ZodObject<{
|
|
63
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
64
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
65
|
+
}, z.core.$strip>]>>;
|
|
66
|
+
types: z.ZodOptional<z.ZodBoolean>;
|
|
67
|
+
modules: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodObject<{
|
|
68
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodObject<{
|
|
69
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
70
|
+
}, z.core.$strip>]>>;
|
|
71
|
+
types: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>>;
|
|
72
|
+
}, z.core.$strip>]>>]>>;
|
|
73
|
+
}, z.core.$strip>>;
|
|
74
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
75
|
+
path: z.ZodString;
|
|
76
|
+
package: z.ZodString;
|
|
77
|
+
packageName: z.ZodOptional<z.ZodString>;
|
|
78
|
+
generate: z.ZodOptional<z.ZodObject<{
|
|
79
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
80
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
81
|
+
}, z.core.$strip>]>>;
|
|
82
|
+
types: z.ZodOptional<z.ZodBoolean>;
|
|
83
|
+
modules: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodObject<{
|
|
84
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>, z.ZodObject<{
|
|
85
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
86
|
+
}, z.core.$strip>]>>;
|
|
87
|
+
types: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>>;
|
|
88
|
+
}, z.core.$strip>]>>]>>;
|
|
89
|
+
}, z.core.$strip>>;
|
|
90
|
+
}, z.core.$strip>]>>;
|
|
91
|
+
generate: z.ZodOptional<z.ZodObject<{
|
|
92
|
+
functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
93
|
+
private: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"entry">]>>;
|
|
94
|
+
}, z.core.$strip>]>>;
|
|
95
|
+
types: z.ZodOptional<z.ZodBoolean>;
|
|
96
|
+
}, z.core.$strip>>;
|
|
97
|
+
privateMethods: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"entry">, z.ZodLiteral<"all">]>>;
|
|
98
|
+
importExtension: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<".js">, z.ZodLiteral<".ts">, z.ZodLiteral<"">]>>>;
|
|
99
|
+
includePhantomTypeParameters: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
type PackageConfig = z.infer<typeof packageConfigSchema>;
|
|
102
|
+
type HaneulCodegenConfig = z.input<typeof configSchema>;
|
|
103
|
+
//#endregion
|
|
104
|
+
export { GenerateBase, HaneulCodegenConfig, ImportExtension, PackageConfig };
|
|
105
|
+
//# sourceMappingURL=config.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../src/config.ts"],"mappings":";;;cAwBa,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;cAoCpB,mBAAA,EAAmB,CAAA,CAAA,QAAA,WAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEnB,qBAAA,EAAqB,CAAA,CAAA,QAAA,WAAA,CAAA,CAAA,UAAA,SAAA,CAAA,CAAA,UAAA,SAAA,CAAA,CAAA,UAAA;AAAA,KACtB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,KAEjC,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,cAK7B,YAAA,EAAY,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAYb,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KAC/B,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,YAAA"}
|
package/dist/config.mjs
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { isValidHaneulObjectId, isValidNamedPackage } from "@haneullabs/haneul/utils";
|
|
2
|
+
import { cosmiconfig } from "cosmiconfig";
|
|
3
|
+
import * as z from "zod/v4";
|
|
4
|
+
|
|
5
|
+
//#region src/config.ts
|
|
6
|
+
const globalFunctionsOptionSchema = z.union([z.boolean(), z.object({ private: z.union([z.boolean(), z.literal("entry")]).optional() })]);
|
|
7
|
+
const functionsOptionSchema = z.union([
|
|
8
|
+
z.boolean(),
|
|
9
|
+
z.array(z.string()),
|
|
10
|
+
z.object({ private: z.union([z.boolean(), z.literal("entry")]).optional() })
|
|
11
|
+
]);
|
|
12
|
+
const typesOptionSchema = z.union([z.boolean(), z.array(z.string())]);
|
|
13
|
+
const globalGenerateSchema = z.object({
|
|
14
|
+
functions: globalFunctionsOptionSchema.optional(),
|
|
15
|
+
types: z.boolean().optional()
|
|
16
|
+
});
|
|
17
|
+
const moduleGenerateSchema = z.object({
|
|
18
|
+
functions: functionsOptionSchema.optional(),
|
|
19
|
+
types: typesOptionSchema.optional()
|
|
20
|
+
});
|
|
21
|
+
const packageGenerateSchema = globalGenerateSchema.extend({ modules: z.union([z.array(z.string()), z.record(z.string(), z.union([z.literal(true), moduleGenerateSchema]))]).optional() });
|
|
22
|
+
const onChainPackageSchema = z.object({
|
|
23
|
+
package: z.string().refine((name) => isValidNamedPackage(name) || isValidHaneulObjectId(name), { message: "Invalid package name or package ID" }),
|
|
24
|
+
packageName: z.string(),
|
|
25
|
+
path: z.never().optional(),
|
|
26
|
+
network: z.enum(["mainnet", "testnet"]),
|
|
27
|
+
generate: packageGenerateSchema.optional()
|
|
28
|
+
});
|
|
29
|
+
const localPackageSchema = z.object({
|
|
30
|
+
path: z.string(),
|
|
31
|
+
package: z.string(),
|
|
32
|
+
packageName: z.string().optional(),
|
|
33
|
+
generate: packageGenerateSchema.optional()
|
|
34
|
+
});
|
|
35
|
+
const packageConfigSchema = z.union([onChainPackageSchema, localPackageSchema]);
|
|
36
|
+
const importExtensionSchema = z.union([
|
|
37
|
+
z.literal(".js"),
|
|
38
|
+
z.literal(".ts"),
|
|
39
|
+
z.literal("")
|
|
40
|
+
]);
|
|
41
|
+
const configSchema = z.object({
|
|
42
|
+
output: z.string(),
|
|
43
|
+
prune: z.boolean().optional().default(true),
|
|
44
|
+
generateSummaries: z.boolean().optional().default(true),
|
|
45
|
+
packages: z.array(packageConfigSchema),
|
|
46
|
+
generate: globalGenerateSchema.optional(),
|
|
47
|
+
privateMethods: z.union([
|
|
48
|
+
z.literal("none"),
|
|
49
|
+
z.literal("entry"),
|
|
50
|
+
z.literal("all")
|
|
51
|
+
]).optional(),
|
|
52
|
+
importExtension: importExtensionSchema.optional().default(".js"),
|
|
53
|
+
includePhantomTypeParameters: z.boolean().optional().default(false)
|
|
54
|
+
});
|
|
55
|
+
async function loadConfig() {
|
|
56
|
+
const config = await cosmiconfig("haneul-codegen").search();
|
|
57
|
+
if (!config) return {
|
|
58
|
+
output: "./generated",
|
|
59
|
+
packages: [],
|
|
60
|
+
prune: true,
|
|
61
|
+
generateSummaries: true,
|
|
62
|
+
importExtension: ".js",
|
|
63
|
+
includePhantomTypeParameters: false
|
|
64
|
+
};
|
|
65
|
+
return configSchema.parse(config.config);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
export { loadConfig };
|
|
70
|
+
//# sourceMappingURL=config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isValidNamedPackage, isValidHaneulObjectId } from '@haneullabs/haneul/utils';\nimport { cosmiconfig } from 'cosmiconfig';\nimport * as z from 'zod/v4';\n\nexport const globalFunctionsOptionSchema = z.union([\n\tz.boolean(),\n\tz.object({\n\t\tprivate: z.union([z.boolean(), z.literal('entry')]).optional(),\n\t}),\n]);\n\nexport const functionsOptionSchema = z.union([\n\tz.boolean(),\n\tz.array(z.string()),\n\tz.object({\n\t\tprivate: z.union([z.boolean(), z.literal('entry')]).optional(),\n\t}),\n]);\n\nexport const typesOptionSchema = z.union([z.boolean(), z.array(z.string())]);\n\nexport const globalGenerateSchema = z.object({\n\tfunctions: globalFunctionsOptionSchema.optional(),\n\ttypes: z.boolean().optional(),\n});\n\nexport const moduleGenerateSchema = z.object({\n\tfunctions: functionsOptionSchema.optional(),\n\ttypes: typesOptionSchema.optional(),\n});\n\nexport const packageGenerateSchema = globalGenerateSchema.extend({\n\tmodules: z\n\t\t.union([\n\t\t\tz.array(z.string()),\n\t\t\tz.record(z.string(), z.union([z.literal(true), moduleGenerateSchema])),\n\t\t])\n\t\t.optional(),\n});\n\nexport const onChainPackageSchema = z.object({\n\tpackage: z.string().refine((name) => isValidNamedPackage(name) || isValidHaneulObjectId(name), {\n\t\tmessage: 'Invalid package name or package ID',\n\t}),\n\tpackageName: z.string(),\n\tpath: z.never().optional(),\n\tnetwork: z.enum(['mainnet', 'testnet']),\n\tgenerate: packageGenerateSchema.optional(),\n});\n\nexport const localPackageSchema = z.object({\n\tpath: z.string(),\n\tpackage: z.string(),\n\tpackageName: z.string().optional(),\n\tgenerate: packageGenerateSchema.optional(),\n});\n\nexport const packageConfigSchema = z.union([onChainPackageSchema, localPackageSchema]);\n\nexport const importExtensionSchema = z.union([z.literal('.js'), z.literal('.ts'), z.literal('')]);\nexport type ImportExtension = z.infer<typeof importExtensionSchema>;\n\nexport type GenerateBase = z.infer<typeof globalGenerateSchema>;\nexport type PackageGenerate = z.infer<typeof packageGenerateSchema>;\nexport type FunctionsOption = z.infer<typeof functionsOptionSchema>;\nexport type TypesOption = z.infer<typeof typesOptionSchema>;\n\nexport const configSchema = z.object({\n\toutput: z.string(),\n\tprune: z.boolean().optional().default(true),\n\tgenerateSummaries: z.boolean().optional().default(true),\n\tpackages: z.array(packageConfigSchema),\n\tgenerate: globalGenerateSchema.optional(),\n\t/** @deprecated Use `generate: { functions: { private: 'entry' } }` instead */\n\tprivateMethods: z.union([z.literal('none'), z.literal('entry'), z.literal('all')]).optional(),\n\timportExtension: importExtensionSchema.optional().default('.js'),\n\tincludePhantomTypeParameters: z.boolean().optional().default(false),\n});\n\nexport type PackageConfig = z.infer<typeof packageConfigSchema>;\nexport type HaneulCodegenConfig = z.input<typeof configSchema>;\nexport type ParsedHaneulCodegenConfig = z.infer<typeof configSchema>;\n\nexport async function loadConfig(): Promise<ParsedHaneulCodegenConfig> {\n\tconst config = await cosmiconfig('haneul-codegen').search();\n\n\tif (!config) {\n\t\treturn {\n\t\t\toutput: './generated',\n\t\t\tpackages: [],\n\t\t\tprune: true,\n\t\t\tgenerateSummaries: true,\n\t\t\timportExtension: '.js',\n\t\t\tincludePhantomTypeParameters: false,\n\t\t};\n\t}\n\n\treturn configSchema.parse(config.config);\n}\n"],"mappings":";;;;;AAOA,MAAa,8BAA8B,EAAE,MAAM,CAClD,EAAE,SAAS,EACX,EAAE,OAAO,EACR,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC,UAAU,EAC9D,CAAC,CACF,CAAC;AAEF,MAAa,wBAAwB,EAAE,MAAM;CAC5C,EAAE,SAAS;CACX,EAAE,MAAM,EAAE,QAAQ,CAAC;CACnB,EAAE,OAAO,EACR,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC,UAAU,EAC9D,CAAC;CACF,CAAC;AAEF,MAAa,oBAAoB,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE5E,MAAa,uBAAuB,EAAE,OAAO;CAC5C,WAAW,4BAA4B,UAAU;CACjD,OAAO,EAAE,SAAS,CAAC,UAAU;CAC7B,CAAC;AAEF,MAAa,uBAAuB,EAAE,OAAO;CAC5C,WAAW,sBAAsB,UAAU;CAC3C,OAAO,kBAAkB,UAAU;CACnC,CAAC;AAEF,MAAa,wBAAwB,qBAAqB,OAAO,EAChE,SAAS,EACP,MAAM,CACN,EAAE,MAAM,EAAE,QAAQ,CAAC,EACnB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,KAAK,EAAE,qBAAqB,CAAC,CAAC,CACtE,CAAC,CACD,UAAU,EACZ,CAAC;AAEF,MAAa,uBAAuB,EAAE,OAAO;CAC5C,SAAS,EAAE,QAAQ,CAAC,QAAQ,SAAS,oBAAoB,KAAK,IAAI,sBAAsB,KAAK,EAAE,EAC9F,SAAS,sCACT,CAAC;CACF,aAAa,EAAE,QAAQ;CACvB,MAAM,EAAE,OAAO,CAAC,UAAU;CAC1B,SAAS,EAAE,KAAK,CAAC,WAAW,UAAU,CAAC;CACvC,UAAU,sBAAsB,UAAU;CAC1C,CAAC;AAEF,MAAa,qBAAqB,EAAE,OAAO;CAC1C,MAAM,EAAE,QAAQ;CAChB,SAAS,EAAE,QAAQ;CACnB,aAAa,EAAE,QAAQ,CAAC,UAAU;CAClC,UAAU,sBAAsB,UAAU;CAC1C,CAAC;AAEF,MAAa,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,mBAAmB,CAAC;AAEtF,MAAa,wBAAwB,EAAE,MAAM;CAAC,EAAE,QAAQ,MAAM;CAAE,EAAE,QAAQ,MAAM;CAAE,EAAE,QAAQ,GAAG;CAAC,CAAC;AAQjG,MAAa,eAAe,EAAE,OAAO;CACpC,QAAQ,EAAE,QAAQ;CAClB,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,KAAK;CAC3C,mBAAmB,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,KAAK;CACvD,UAAU,EAAE,MAAM,oBAAoB;CACtC,UAAU,qBAAqB,UAAU;CAEzC,gBAAgB,EAAE,MAAM;EAAC,EAAE,QAAQ,OAAO;EAAE,EAAE,QAAQ,QAAQ;EAAE,EAAE,QAAQ,MAAM;EAAC,CAAC,CAAC,UAAU;CAC7F,iBAAiB,sBAAsB,UAAU,CAAC,QAAQ,MAAM;CAChE,8BAA8B,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,MAAM;CACnE,CAAC;AAMF,eAAsB,aAAiD;CACtE,MAAM,SAAS,MAAM,YAAY,iBAAiB,CAAC,QAAQ;AAE3D,KAAI,CAAC,OACJ,QAAO;EACN,QAAQ;EACR,UAAU,EAAE;EACZ,OAAO;EACP,mBAAmB;EACnB,iBAAiB;EACjB,8BAA8B;EAC9B;AAGF,QAAO,aAAa,MAAM,OAAO,OAAO"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getSafeName } from "./render-types.mjs";
|
|
2
|
+
import { parseTS, printNodes } from "./utils.mjs";
|
|
3
|
+
import { relative, resolve } from "path";
|
|
4
|
+
|
|
5
|
+
//#region src/file-builder.ts
|
|
6
|
+
var FileBuilder = class {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.statements = [];
|
|
9
|
+
this.exports = [];
|
|
10
|
+
this.imports = /* @__PURE__ */ new Map();
|
|
11
|
+
this.starImports = /* @__PURE__ */ new Map();
|
|
12
|
+
this.reservedNames = /* @__PURE__ */ new Set();
|
|
13
|
+
}
|
|
14
|
+
addImport(module, name) {
|
|
15
|
+
if (!this.imports.has(module)) this.imports.set(module, /* @__PURE__ */ new Set());
|
|
16
|
+
const isTypeImport = name.startsWith("type ");
|
|
17
|
+
const baseName = isTypeImport ? name.slice(5) : name;
|
|
18
|
+
if (this.reservedNames.has(baseName)) {
|
|
19
|
+
const alias = this.getUnusedName(baseName);
|
|
20
|
+
const aliasedImport = isTypeImport ? `type ${baseName} as ${alias}` : `${baseName} as ${alias}`;
|
|
21
|
+
this.imports.get(module).add(aliasedImport);
|
|
22
|
+
return alias;
|
|
23
|
+
}
|
|
24
|
+
this.imports.get(module).add(name);
|
|
25
|
+
return baseName;
|
|
26
|
+
}
|
|
27
|
+
addStarImport(module, name) {
|
|
28
|
+
const importName = this.getUnusedName(name);
|
|
29
|
+
this.starImports.set(importName, module);
|
|
30
|
+
return importName;
|
|
31
|
+
}
|
|
32
|
+
getUnusedName(name) {
|
|
33
|
+
let deConflictedName = getSafeName(name);
|
|
34
|
+
let i = 1;
|
|
35
|
+
while (this.reservedNames.has(deConflictedName)) {
|
|
36
|
+
deConflictedName = `${name}_${i}`;
|
|
37
|
+
i++;
|
|
38
|
+
}
|
|
39
|
+
this.reservedNames.add(deConflictedName);
|
|
40
|
+
return deConflictedName;
|
|
41
|
+
}
|
|
42
|
+
async getHeader() {
|
|
43
|
+
return [
|
|
44
|
+
"/**************************************************************",
|
|
45
|
+
" * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *",
|
|
46
|
+
" **************************************************************/",
|
|
47
|
+
""
|
|
48
|
+
].join("\n");
|
|
49
|
+
}
|
|
50
|
+
async toString(modDir, filePath) {
|
|
51
|
+
const importStatements = [...this.imports.entries()].flatMap(([module, names]) => parseTS`import { ${[...names].join(", ")} } from '${modulePath(module)}'`);
|
|
52
|
+
const starImportStatements = [...this.starImports.entries()].flatMap(([name, module]) => parseTS`import * as ${name} from '${modulePath(module)}'`);
|
|
53
|
+
return `${await this.getHeader()}${printNodes(...importStatements, ...starImportStatements, ...this.statements)}`;
|
|
54
|
+
function modulePath(mod) {
|
|
55
|
+
if (!mod.startsWith("~root/")) return mod;
|
|
56
|
+
const sourcePath = resolve(modDir, filePath);
|
|
57
|
+
const destPath = resolve(modDir, mod.replace("~root/", "./"));
|
|
58
|
+
const relativePath = relative(sourcePath.split("/").slice(0, -1).join("/"), destPath);
|
|
59
|
+
return relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { FileBuilder };
|
|
66
|
+
//# sourceMappingURL=file-builder.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-builder.mjs","names":[],"sources":["../src/file-builder.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type ts from 'typescript';\nimport { parseTS, printNodes } from './utils.js';\nimport { relative, resolve } from 'path';\nimport { getSafeName } from './render-types.js';\n\nexport class FileBuilder {\n\tstatements: ts.Statement[] = [];\n\texports: string[] = [];\n\timports: Map<string, Set<string>> = new Map();\n\tstarImports: Map<string, string> = new Map();\n\tprotected reservedNames: Set<string> = new Set();\n\n\taddImport(module: string, name: string): string {\n\t\tif (!this.imports.has(module)) {\n\t\t\tthis.imports.set(module, new Set());\n\t\t}\n\n\t\tconst isTypeImport = name.startsWith('type ');\n\t\tconst baseName = isTypeImport ? name.slice(5) : name;\n\n\t\tif (this.reservedNames.has(baseName)) {\n\t\t\tconst alias = this.getUnusedName(baseName);\n\t\t\tconst aliasedImport = isTypeImport\n\t\t\t\t? `type ${baseName} as ${alias}`\n\t\t\t\t: `${baseName} as ${alias}`;\n\t\t\tthis.imports.get(module)!.add(aliasedImport);\n\t\t\treturn alias;\n\t\t}\n\n\t\tthis.imports.get(module)!.add(name);\n\t\treturn baseName;\n\t}\n\n\taddStarImport(module: string, name: string) {\n\t\tconst importName = this.getUnusedName(name);\n\t\tthis.starImports.set(importName, module);\n\t\treturn importName;\n\t}\n\n\tgetUnusedName(name: string) {\n\t\tlet deConflictedName = getSafeName(name);\n\n\t\tlet i = 1;\n\t\twhile (this.reservedNames.has(deConflictedName)) {\n\t\t\tdeConflictedName = `${name}_${i}`;\n\t\t\ti++;\n\t\t}\n\n\t\tthis.reservedNames.add(deConflictedName);\n\t\treturn deConflictedName;\n\t}\n\n\tasync getHeader() {\n\t\treturn [\n\t\t\t'/**************************************************************',\n\t\t\t' * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *',\n\t\t\t' **************************************************************/',\n\t\t\t'',\n\t\t].join('\\n');\n\t}\n\n\tasync toString(modDir: string, filePath: string) {\n\t\tconst importStatements = [...this.imports.entries()].flatMap(\n\t\t\t([module, names]) =>\n\t\t\t\tparseTS`import { ${[...names].join(', ')} } from '${modulePath(module)}'`,\n\t\t);\n\t\tconst starImportStatements = [...this.starImports.entries()].flatMap(\n\t\t\t([name, module]) => parseTS`import * as ${name} from '${modulePath(module)}'`,\n\t\t);\n\n\t\treturn `${await this.getHeader()}${printNodes(...importStatements, ...starImportStatements, ...this.statements)}`;\n\n\t\tfunction modulePath(mod: string) {\n\t\t\tif (!mod.startsWith('~root/')) {\n\t\t\t\treturn mod;\n\t\t\t}\n\n\t\t\tconst sourcePath = resolve(modDir, filePath);\n\t\t\tconst destPath = resolve(modDir, mod.replace('~root/', './'));\n\t\t\tconst sourceDirectory = sourcePath.split('/').slice(0, -1).join('/');\n\t\t\tconst relativePath = relative(sourceDirectory, destPath);\n\t\t\treturn relativePath.startsWith('.') ? relativePath : `./${relativePath}`;\n\t\t}\n\t}\n}\n"],"mappings":";;;;;AAQA,IAAa,cAAb,MAAyB;;oBACK,EAAE;iBACX,EAAE;iCACc,IAAI,KAAK;qCACV,IAAI,KAAK;uCACL,IAAI,KAAK;;CAEhD,UAAU,QAAgB,MAAsB;AAC/C,MAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,CAC5B,MAAK,QAAQ,IAAI,wBAAQ,IAAI,KAAK,CAAC;EAGpC,MAAM,eAAe,KAAK,WAAW,QAAQ;EAC7C,MAAM,WAAW,eAAe,KAAK,MAAM,EAAE,GAAG;AAEhD,MAAI,KAAK,cAAc,IAAI,SAAS,EAAE;GACrC,MAAM,QAAQ,KAAK,cAAc,SAAS;GAC1C,MAAM,gBAAgB,eACnB,QAAQ,SAAS,MAAM,UACvB,GAAG,SAAS,MAAM;AACrB,QAAK,QAAQ,IAAI,OAAO,CAAE,IAAI,cAAc;AAC5C,UAAO;;AAGR,OAAK,QAAQ,IAAI,OAAO,CAAE,IAAI,KAAK;AACnC,SAAO;;CAGR,cAAc,QAAgB,MAAc;EAC3C,MAAM,aAAa,KAAK,cAAc,KAAK;AAC3C,OAAK,YAAY,IAAI,YAAY,OAAO;AACxC,SAAO;;CAGR,cAAc,MAAc;EAC3B,IAAI,mBAAmB,YAAY,KAAK;EAExC,IAAI,IAAI;AACR,SAAO,KAAK,cAAc,IAAI,iBAAiB,EAAE;AAChD,sBAAmB,GAAG,KAAK,GAAG;AAC9B;;AAGD,OAAK,cAAc,IAAI,iBAAiB;AACxC,SAAO;;CAGR,MAAM,YAAY;AACjB,SAAO;GACN;GACA;GACA;GACA;GACA,CAAC,KAAK,KAAK;;CAGb,MAAM,SAAS,QAAgB,UAAkB;EAChD,MAAM,mBAAmB,CAAC,GAAG,KAAK,QAAQ,SAAS,CAAC,CAAC,SACnD,CAAC,QAAQ,WACT,OAAO,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,KAAK,CAAC,WAAW,WAAW,OAAO,CAAC,GACxE;EACD,MAAM,uBAAuB,CAAC,GAAG,KAAK,YAAY,SAAS,CAAC,CAAC,SAC3D,CAAC,MAAM,YAAY,OAAO,eAAe,KAAK,SAAS,WAAW,OAAO,CAAC,GAC3E;AAED,SAAO,GAAG,MAAM,KAAK,WAAW,GAAG,WAAW,GAAG,kBAAkB,GAAG,sBAAsB,GAAG,KAAK,WAAW;EAE/G,SAAS,WAAW,KAAa;AAChC,OAAI,CAAC,IAAI,WAAW,SAAS,CAC5B,QAAO;GAGR,MAAM,aAAa,QAAQ,QAAQ,SAAS;GAC5C,MAAM,WAAW,QAAQ,QAAQ,IAAI,QAAQ,UAAU,KAAK,CAAC;GAE7D,MAAM,eAAe,SADG,WAAW,MAAM,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EACrB,SAAS;AACxD,UAAO,aAAa,WAAW,IAAI,GAAG,eAAe,KAAK"}
|