@0xobelisk/sui-common 1.1.6 ā 1.1.7
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/index.d.ts +18 -1
- package/dist/index.js +54 -54
- package/dist/index.js.map +1 -1
- package/package.json +10 -4
- package/src/codegen/debug.ts +3 -3
- package/src/codegen/index.ts +2 -2
- package/src/codegen/modules.d.ts +1 -1
- package/src/codegen/types/index.ts +26 -11
- package/src/codegen/utils/config.ts +14 -24
- package/src/codegen/utils/errors.ts +3 -4
- package/src/codegen/utils/format.ts +29 -32
- package/src/codegen/utils/formatAndWrite.ts +22 -19
- package/src/codegen/utils/posixPath.ts +1 -1
- package/src/codegen/utils/renderMove/common.ts +33 -41
- package/src/codegen/utils/renderMove/generateDappKey.ts +12 -15
- package/src/codegen/utils/renderMove/generateDefaultSchema.ts +20 -36
- package/src/codegen/utils/renderMove/generateError.ts +30 -33
- package/src/codegen/utils/renderMove/generateEvent.ts +66 -77
- package/src/codegen/utils/renderMove/generateInit.ts +17 -22
- package/src/codegen/utils/renderMove/generateSchema.ts +160 -196
- package/src/codegen/utils/renderMove/generateSchemaHub.ts +12 -15
- package/src/codegen/utils/renderMove/generateScript.ts +20 -31
- package/src/codegen/utils/renderMove/generateSystem.ts +7 -13
- package/src/codegen/utils/renderMove/generateToml.ts +10 -15
- package/src/codegen/utils/renderMove/schemaGen.ts +39 -47
- package/src/debug.ts +3 -3
- package/src/index.ts +3 -2
- package/src/modules.d.ts +2 -2
- package/src/parseData/index.ts +1 -1
- package/src/parseData/parser/index.ts +42 -42
- package/src/primitives/index.ts +8 -0
|
@@ -1,110 +1,99 @@
|
|
|
1
|
-
import {BaseType, EventData, SchemaData, SchemaType} from '../../types';
|
|
1
|
+
import { BaseType, EventData, SchemaData, SchemaType } from '../../types';
|
|
2
2
|
import { formatAndWriteMove } from '../formatAndWrite';
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
getStructAttrsWithType,
|
|
5
|
+
getStructAttrs,
|
|
6
|
+
getStructTypes,
|
|
7
|
+
getStructAttrsQuery
|
|
8
8
|
} from './common';
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
17
|
-
})
|
|
18
|
-
.join('');
|
|
10
|
+
// account_not_found => AccountNotFound,
|
|
11
|
+
function toPascalCase(str: string): string {
|
|
12
|
+
return str
|
|
13
|
+
.split('_')
|
|
14
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
15
|
+
.join('');
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
function convertToSnakeCase(input: string): string {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
return input
|
|
20
|
+
.replace(/([A-Z])/g, '_$1')
|
|
21
|
+
.toLowerCase()
|
|
22
|
+
.replace(/^_/, '');
|
|
26
23
|
}
|
|
27
24
|
|
|
28
|
-
function generateImport(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
})
|
|
40
|
-
.join('\n');
|
|
41
|
-
} else {
|
|
42
|
-
return '';
|
|
43
|
-
}
|
|
25
|
+
function generateImport(projectName: string, data: Record<string, SchemaData> | null) {
|
|
26
|
+
if (data != null) {
|
|
27
|
+
const names = Object.keys(data);
|
|
28
|
+
return names
|
|
29
|
+
.map((name) => {
|
|
30
|
+
return `use ${projectName}::${projectName}_${convertToSnakeCase(name)}::${name};`;
|
|
31
|
+
})
|
|
32
|
+
.join('\n');
|
|
33
|
+
} else {
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
44
36
|
}
|
|
45
37
|
|
|
46
38
|
export async function generateSchemaEvent(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
39
|
+
projectName: string,
|
|
40
|
+
data: Record<string, SchemaData> | null,
|
|
41
|
+
events: Record<string, EventData>,
|
|
42
|
+
path: string
|
|
51
43
|
) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
` āā Generating ${name} event: ${fields}`
|
|
58
|
-
);
|
|
44
|
+
console.log('\nš¦ Starting Schema Event Generation...');
|
|
45
|
+
for (const key of Object.keys(events)) {
|
|
46
|
+
const name = key;
|
|
47
|
+
const fields = events[key];
|
|
48
|
+
console.log(` āā Generating ${name} event: ${fields}`);
|
|
59
49
|
|
|
60
|
-
|
|
50
|
+
let code = `module ${projectName}::${projectName}_${name}_event {
|
|
61
51
|
use sui::event;
|
|
62
52
|
use std::ascii::String;
|
|
63
53
|
${generateImport(projectName, data)}
|
|
64
54
|
|
|
65
|
-
public struct ${name}Event has copy, drop {
|
|
55
|
+
public struct ${toPascalCase(name)}Event has copy, drop {
|
|
66
56
|
${getStructAttrsWithType(fields as Record<string, string>)}
|
|
67
57
|
}
|
|
68
58
|
|
|
69
|
-
public fun new(${getStructAttrsWithType(fields as Record<string, string>)}): ${name}Event {
|
|
70
|
-
${name}Event {
|
|
59
|
+
public fun new(${getStructAttrsWithType(fields as Record<string, string>)}): ${toPascalCase(name)}Event {
|
|
60
|
+
${toPascalCase(name)}Event {
|
|
71
61
|
${getStructAttrs(fields as Record<string, string>)}
|
|
72
62
|
}
|
|
73
63
|
}
|
|
74
64
|
}`;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
);
|
|
82
|
-
}
|
|
65
|
+
await formatAndWriteMove(
|
|
66
|
+
code,
|
|
67
|
+
`${path}/contracts/${projectName}/sources/codegen/data/${name}_event.move`,
|
|
68
|
+
'formatAndWriteMove'
|
|
69
|
+
);
|
|
70
|
+
}
|
|
83
71
|
|
|
84
|
-
|
|
72
|
+
let code = `module ${projectName}::${projectName}_events {
|
|
85
73
|
use std::ascii::{String, string};
|
|
86
74
|
${generateImport(projectName, data)}
|
|
87
|
-
${Object.entries(events)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
use ${projectName}::${projectName}_${
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
75
|
+
${Object.entries(events)
|
|
76
|
+
.map(([name, fields]) => {
|
|
77
|
+
return `
|
|
78
|
+
use ${projectName}::${projectName}_${name}_event::${toPascalCase(name)}Event;
|
|
79
|
+
use ${projectName}::${projectName}_${name}_event;
|
|
80
|
+
public fun ${name}_event(${getStructAttrsWithType(fields as Record<string, string>)}) {
|
|
81
|
+
dubhe::storage_event::emit_set_record<${toPascalCase(name)}Event, ${toPascalCase(name)}Event, ${toPascalCase(name)}Event>(
|
|
82
|
+
string(b"${name}_event"),
|
|
94
83
|
option::none(),
|
|
95
84
|
option::none(),
|
|
96
|
-
option::some(${projectName}_${
|
|
85
|
+
option::some(${projectName}_${name}_event::new(${getStructAttrs(fields as Record<string, string>)}))
|
|
97
86
|
)
|
|
98
87
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
`;
|
|
89
|
+
})
|
|
90
|
+
.join('\n')}
|
|
91
|
+
}`;
|
|
102
92
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
93
|
+
await formatAndWriteMove(
|
|
94
|
+
code,
|
|
95
|
+
`${path}/contracts/${projectName}/sources/codegen/events.move`,
|
|
96
|
+
'formatAndWriteMove'
|
|
97
|
+
);
|
|
98
|
+
console.log('ā
Schema Event Generation Complete\n');
|
|
99
|
+
}
|
|
@@ -3,16 +3,11 @@ import { formatAndWriteMove } from '../formatAndWrite';
|
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { capitalizeAndRemoveUnderscores } from './generateSchema';
|
|
5
5
|
|
|
6
|
-
export async function generateInit(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
) {
|
|
10
|
-
console.log('\nš Starting Init Generation...');
|
|
11
|
-
console.log(
|
|
12
|
-
` āā Output path: ${srcPrefix}/contracts/${config.name}/sources/tests/init.move`
|
|
13
|
-
);
|
|
6
|
+
export async function generateInit(config: DubheConfig, srcPrefix: string) {
|
|
7
|
+
console.log('\nš Starting Init Generation...');
|
|
8
|
+
console.log(` āā Output path: ${srcPrefix}/contracts/${config.name}/sources/tests/init.move`);
|
|
14
9
|
|
|
15
|
-
|
|
10
|
+
let init_test_code = `module ${config.name}::${config.name}_init_test {
|
|
16
11
|
use ${config.name}::${config.name}_dapp_schema::Dapp;
|
|
17
12
|
use sui::clock;
|
|
18
13
|
use sui::test_scenario;
|
|
@@ -30,13 +25,13 @@ export async function generateInit(
|
|
|
30
25
|
}
|
|
31
26
|
}
|
|
32
27
|
`;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
await formatAndWriteMove(
|
|
29
|
+
init_test_code,
|
|
30
|
+
`${srcPrefix}/contracts/${config.name}/sources/tests/init.move`,
|
|
31
|
+
'formatAndWriteMove'
|
|
32
|
+
);
|
|
38
33
|
|
|
39
|
-
|
|
34
|
+
let init_code = `module ${config.name}::${config.name}_genesis {
|
|
40
35
|
use std::ascii::string;
|
|
41
36
|
|
|
42
37
|
use sui::clock::Clock;
|
|
@@ -56,11 +51,11 @@ export async function generateInit(
|
|
|
56
51
|
}
|
|
57
52
|
}
|
|
58
53
|
`;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
54
|
+
await formatAndWriteMove(
|
|
55
|
+
init_code,
|
|
56
|
+
`${srcPrefix}/contracts/${config.name}/sources/codegen/genesis.move`,
|
|
57
|
+
'formatAndWriteMove'
|
|
58
|
+
);
|
|
64
59
|
|
|
65
|
-
|
|
66
|
-
}
|
|
60
|
+
console.log('ā
Init Generation Complete\n');
|
|
61
|
+
}
|