@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
package/src/index.ts
CHANGED
|
@@ -1,40 +1,65 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
5
5
|
import { basename, join } from 'node:path';
|
|
6
6
|
import { MoveModuleBuilder } from './move-module-builder.js';
|
|
7
7
|
import { existsSync, statSync } from 'node:fs';
|
|
8
8
|
import { utilsContent } from './generate-utils.js';
|
|
9
9
|
import { parse } from 'toml';
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
FunctionsOption,
|
|
12
|
+
GenerateBase,
|
|
13
|
+
ImportExtension,
|
|
14
|
+
PackageConfig,
|
|
15
|
+
PackageGenerate,
|
|
16
|
+
TypesOption,
|
|
17
|
+
} from './config.js';
|
|
11
18
|
export { type HaneulCodegenConfig } from './config.js';
|
|
12
19
|
|
|
13
20
|
export async function generateFromPackageSummary({
|
|
14
21
|
package: pkg,
|
|
15
22
|
prune,
|
|
16
23
|
outputDir,
|
|
17
|
-
|
|
24
|
+
globalGenerate,
|
|
25
|
+
importExtension = '.js',
|
|
26
|
+
includePhantomTypeParameters = false,
|
|
18
27
|
}: {
|
|
19
28
|
package: PackageConfig;
|
|
20
29
|
prune: boolean;
|
|
21
30
|
outputDir: string;
|
|
22
|
-
|
|
31
|
+
globalGenerate?: GenerateBase;
|
|
32
|
+
importExtension?: ImportExtension;
|
|
33
|
+
includePhantomTypeParameters?: boolean;
|
|
23
34
|
}) {
|
|
24
35
|
if (!pkg.path) {
|
|
25
|
-
throw new Error(`
|
|
36
|
+
throw new Error(`Package path is required (got ${pkg.package})`);
|
|
26
37
|
}
|
|
27
38
|
|
|
28
|
-
|
|
39
|
+
// Check for on-chain package summary (directly in path) or local package summary (in package_summaries subdirectory)
|
|
40
|
+
const localSummaryDir = join(pkg.path, 'package_summaries');
|
|
41
|
+
const isOnChainPackage = existsSync(join(pkg.path, 'root_package_metadata.json'));
|
|
42
|
+
const summaryDir = isOnChainPackage ? pkg.path : localSummaryDir;
|
|
29
43
|
|
|
30
|
-
if (!existsSync(summaryDir)) {
|
|
44
|
+
if (!existsSync(summaryDir) || !existsSync(join(summaryDir, 'address_mapping.json'))) {
|
|
31
45
|
throw new Error(`Package summary directory not found: ${summaryDir}`);
|
|
32
46
|
}
|
|
33
47
|
|
|
34
48
|
let packageName = pkg.packageName!;
|
|
49
|
+
let mainPackageAddress: string | undefined;
|
|
35
50
|
const mvrNameOrAddress = pkg.package;
|
|
36
51
|
|
|
37
|
-
if (
|
|
52
|
+
if (isOnChainPackage) {
|
|
53
|
+
// For on-chain packages, get the main package address from root_package_metadata.json
|
|
54
|
+
const metadata = JSON.parse(
|
|
55
|
+
await readFile(join(pkg.path, 'root_package_metadata.json'), 'utf-8'),
|
|
56
|
+
);
|
|
57
|
+
mainPackageAddress = metadata.root_package_id;
|
|
58
|
+
// Use the package name provided or fall back to the full address
|
|
59
|
+
if (!packageName) {
|
|
60
|
+
packageName = mainPackageAddress!;
|
|
61
|
+
}
|
|
62
|
+
} else if (!pkg.packageName) {
|
|
38
63
|
try {
|
|
39
64
|
const packageToml = await readFile(join(pkg.path, 'Move.toml'), 'utf-8');
|
|
40
65
|
packageName = parse(packageToml).package.name.toLowerCase();
|
|
@@ -48,10 +73,6 @@ export async function generateFromPackageSummary({
|
|
|
48
73
|
}
|
|
49
74
|
}
|
|
50
75
|
|
|
51
|
-
if (!existsSync(summaryDir)) {
|
|
52
|
-
throw new Error(`Package summary directory not found: ${summaryDir}`);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
76
|
const addressMappings: Record<string, string> = JSON.parse(
|
|
56
77
|
await readFile(join(summaryDir, 'address_mapping.json'), 'utf-8'),
|
|
57
78
|
);
|
|
@@ -59,21 +80,35 @@ export async function generateFromPackageSummary({
|
|
|
59
80
|
const packages = (await readdir(summaryDir)).filter((file) =>
|
|
60
81
|
statSync(join(summaryDir, file)).isDirectory(),
|
|
61
82
|
);
|
|
83
|
+
|
|
84
|
+
// For on-chain packages, the main package is identified by the root_package_id
|
|
85
|
+
// For local packages, it's identified by the packageName
|
|
86
|
+
const isMainPackage = (pkgDir: string) => {
|
|
87
|
+
if (isOnChainPackage) {
|
|
88
|
+
return pkgDir === mainPackageAddress;
|
|
89
|
+
}
|
|
90
|
+
return pkgDir === packageName;
|
|
91
|
+
};
|
|
92
|
+
|
|
62
93
|
const modules = (
|
|
63
94
|
await Promise.all(
|
|
64
|
-
packages.map(async (
|
|
65
|
-
const
|
|
95
|
+
packages.map(async (pkgDir) => {
|
|
96
|
+
const moduleFiles = await readdir(join(summaryDir, pkgDir));
|
|
66
97
|
return Promise.all(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
98
|
+
moduleFiles
|
|
99
|
+
.filter((f) => f.endsWith('.json'))
|
|
100
|
+
.map(async (mod) => ({
|
|
101
|
+
package: pkgDir,
|
|
102
|
+
isMainPackage: isMainPackage(pkgDir),
|
|
103
|
+
module: basename(mod, '.json'),
|
|
104
|
+
builder: await MoveModuleBuilder.fromSummaryFile(
|
|
105
|
+
join(summaryDir, pkgDir, mod),
|
|
106
|
+
addressMappings,
|
|
107
|
+
isMainPackage(pkgDir) ? mvrNameOrAddress : undefined,
|
|
108
|
+
importExtension,
|
|
109
|
+
includePhantomTypeParameters,
|
|
110
|
+
),
|
|
111
|
+
})),
|
|
77
112
|
);
|
|
78
113
|
}),
|
|
79
114
|
)
|
|
@@ -83,15 +118,40 @@ export async function generateFromPackageSummary({
|
|
|
83
118
|
modules.map((mod) => [`${mod.package}::${mod.module}`, mod.builder]),
|
|
84
119
|
);
|
|
85
120
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
121
|
+
const packageGenerate: PackageGenerate | undefined = 'generate' in pkg ? pkg.generate : undefined;
|
|
122
|
+
const pkgModules = packageGenerate?.modules;
|
|
123
|
+
const pkgTypes: TypesOption = packageGenerate?.types ?? globalGenerate?.types ?? true;
|
|
124
|
+
const pkgFunctions: FunctionsOption =
|
|
125
|
+
packageGenerate?.functions ?? globalGenerate?.functions ?? true;
|
|
126
|
+
|
|
127
|
+
for (const mod of modules) {
|
|
128
|
+
if (!mod.isMainPackage && prune) {
|
|
129
|
+
continue;
|
|
90
130
|
}
|
|
91
|
-
|
|
131
|
+
|
|
132
|
+
const moduleGenerate = !pkgModules
|
|
133
|
+
? true
|
|
134
|
+
: Array.isArray(pkgModules)
|
|
135
|
+
? pkgModules.includes(mod.module) || null
|
|
136
|
+
: mod.module in pkgModules
|
|
137
|
+
? pkgModules[mod.module]
|
|
138
|
+
: null;
|
|
139
|
+
|
|
140
|
+
if (!moduleGenerate) continue;
|
|
141
|
+
|
|
142
|
+
const types = moduleGenerate === true ? pkgTypes : (moduleGenerate.types ?? false);
|
|
143
|
+
const functions = moduleGenerate === true ? pkgFunctions : (moduleGenerate.functions ?? false);
|
|
144
|
+
|
|
145
|
+
mod.builder.includeTypes(moduleBuilders, types);
|
|
146
|
+
mod.builder.includeFunctions(functions);
|
|
147
|
+
}
|
|
92
148
|
|
|
93
149
|
await generateUtils({ outputDir });
|
|
94
150
|
|
|
151
|
+
// Clean the package output directory to remove stale files from previous runs
|
|
152
|
+
const packageOutputDir = join(outputDir, packageName);
|
|
153
|
+
await rm(packageOutputDir, { recursive: true, force: true });
|
|
154
|
+
|
|
95
155
|
await Promise.all(
|
|
96
156
|
modules.map(async (mod) => {
|
|
97
157
|
if ((mod.isMainPackage || !prune) && mod.builder.hasTypesOrFunctions()) {
|