@0xobelisk/sui-common 1.2.0-pre.4 → 1.2.0-pre.41
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 +21 -28
- package/dist/index.js +685 -195
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/codegen/types/index.ts +22 -78
- package/src/codegen/utils/index.ts +1 -0
- package/src/codegen/utils/renderMove/dapp.ts +17 -0
- package/src/codegen/utils/renderMove/generateComponents.ts +552 -0
- package/src/codegen/utils/renderMove/generateDappKey.ts +22 -8
- package/src/codegen/utils/renderMove/generateDefaultSchema.ts +2 -2
- package/src/codegen/utils/renderMove/generateEnums.ts +55 -0
- package/src/codegen/utils/renderMove/generateError.ts +2 -2
- package/src/codegen/utils/renderMove/generateEvent.ts +2 -2
- package/src/codegen/utils/renderMove/generateGenesis.ts +51 -0
- package/src/codegen/utils/renderMove/generateInitTest.ts +27 -0
- package/src/codegen/utils/renderMove/generateResources.ts +528 -0
- package/src/codegen/utils/renderMove/generateSchema.ts +2 -2
- package/src/codegen/utils/renderMove/generateSchemaHub.ts +2 -2
- package/src/codegen/utils/renderMove/generateScript.ts +7 -9
- package/src/codegen/utils/renderMove/generateSystem.ts +4 -4
- package/src/codegen/utils/renderMove/generateToml.ts +5 -8
- package/src/codegen/utils/renderMove/schemaGen.ts +51 -26
- package/src/codegen/utils/renderMove/generateInit.ts +0 -79
package/dist/index.js
CHANGED
|
@@ -1,229 +1,719 @@
|
|
|
1
|
-
import
|
|
1
|
+
import G from"prettier";import fe from"prettier-plugin-move-js";async function X(e,t){let s;t&&(s=await G.resolveConfig(t));try{return G.format(e,{plugins:[fe],parser:"move-parse",printWidth:120,semi:!0,tabWidth:2,useTabs:!1,bracketSpacing:!0,...s})}catch(n){let o;return n instanceof Error?o=n.message:o=n,console.log(`Error during output formatting: ${o}`),e}}async function Y(e){return G.format(e,{parser:"typescript"})}import B from"node:fs/promises";import N from"node:path";import q from"debug";var W=q("dubhe:common"),ve=q("dubhe:common");W.log=console.debug.bind(console);ve.log=console.error.bind(console);var L=W.extend("codegen"),he=W.extend("codegen");L.log=console.debug.bind(console);he.log=console.error.bind(console);async function $(e,t,s){let n=await X(e),o=` // Copyright (c) Obelisk Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#[allow(unused_use)]
|
|
4
4
|
|
|
5
5
|
/* Autogenerated file. Do not edit manually. */
|
|
6
6
|
|
|
7
|
-
`,
|
|
8
|
-
\u{1F4C4} Starting Move.toml Generation...`),console.log(` \u2514\u2500 Output path: ${t}/
|
|
7
|
+
`,i="#[test_only]",b=o+n,g="#[allow(lint(share_owned))]";t.includes(".toml")||t.includes("system")||t.includes("migrate")?b=n:t.includes("init")?b=i+n:t.includes("genesis")&&(b=g+n),await B.mkdir(N.dirname(t),{recursive:!0}),await B.writeFile(t,b),L(`${s}: ${t}`)}async function Qe(e,t,s){let n=await Y(e);await B.mkdir(N.dirname(t),{recursive:!0}),await B.writeFile(t,n),L(`${s}: ${t}`)}function Ye(e){return e.replace(/\\/g,"/")}import{existsSync as w}from"fs";import F from"fs";function z(e){F.existsSync(e)&&(F.readdirSync(e).forEach(t=>{let s=`${e}/${t}`;F.lstatSync(s).isDirectory()?z(s):F.unlinkSync(s)}),F.rmdirSync(e))}var ee={name:"@0xobelisk/sui-common",version:"1.2.0-pre.41",description:"Common low level logic shared between packages",keywords:["sui","obelisk labs","move","blockchain"],type:"module",author:"team@obelisk.build",homepage:"https://github.com/0xobelisk/dubhe/tree/main/packages/sui-common#readme",bugs:"https://github.com/0xobelisk/dubhe/issues",repository:{type:"git",url:"https://github.com/0xobelisk/dubhe.git"},license:"Apache-2.0",publishConfig:{access:"public"},engines:{node:">=18"},exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"}},typesVersions:{"*":{index:["./src/index.ts"]}},types:"./dist/index.d.ts",scripts:{build:"pnpm run build:js","build:js":"tsup && chmod +x ./dist/index.js",clean:"pnpm run clean:js","clean:js":"rimraf dist",dev:"tsup --watch",lint:"eslint . --ext .ts",test:"vitest",format:"prettier --write .","format:check":"prettier --check .","type-check":"tsc --noEmit",validate:"pnpm format:check && pnpm type-check"},dependencies:{chalk:"^5.0.1",debug:"^4.3.4",dotenv:"^16.0.3",ejs:"^3.1.8",esbuild:"^0.17.15",execa:"^7.0.0","find-up":"^6.3.0",glob:"^8.0.3",path:"^0.12.7",prettier:"^3.1.1","prettier-plugin-move-js":"^0.0.5","prettier-plugin-rust":"^0.1.9","prettier-plugin-solidity":"^1.1.2",typescript:"5.1.6",yargs:"^17.7.1",zod:"^3.22.3","zod-validation-error":"^1.3.0"},devDependencies:{"@types/debug":"^4.1.12","@types/ejs":"^3.1.1","@types/glob":"^7.2.0","@types/node":"^18.15.11","@types/yargs":"^17.0.10",tsup:"^6.7.0",tsx:"^3.12.6",vitest:"^2.1.3",eslint:"^8.56.0","eslint-config-prettier":"^9.1.0",prettier:"3.3.3"}};async function te(e,t){console.log(`
|
|
8
|
+
\u{1F4C4} Starting Move.toml Generation...`),console.log(` \u2514\u2500 Output path: ${t}/src/${e.name}/Move.toml`);let s=`[package]
|
|
9
9
|
name = "${e.name}"
|
|
10
10
|
version = "1.0.0"
|
|
11
11
|
edition = "2024"
|
|
12
12
|
|
|
13
13
|
[dependencies]
|
|
14
14
|
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.46.3" }
|
|
15
|
-
Dubhe = { git = "https://github.com/0xobelisk/dubhe-
|
|
15
|
+
Dubhe = { git = "https://github.com/0xobelisk/dubhe-wip.git", subdir = "packages/sui-framework/src/dubhe", rev = "v${ee.version}" }
|
|
16
16
|
|
|
17
17
|
[addresses]
|
|
18
18
|
sui = "0x2"
|
|
19
|
-
${e.name} = "
|
|
20
|
-
`;await
|
|
21
|
-
`)}
|
|
22
|
-
|
|
23
|
-
}`).join(`
|
|
24
|
-
`)}function re(e,t){return`public(package) fun set(self: &mut ${e}, ${m(t)}) {
|
|
25
|
-
${Object.entries(t).map(([r])=>`self.${r} = ${r};`).join(`
|
|
26
|
-
`)}
|
|
27
|
-
}`}function ne(e,t){return`public fun get(self: &${e}): ${U(t)} {
|
|
28
|
-
(${O(t)})
|
|
29
|
-
}`}function oe(e,t){return Object.entries(t).map(([r,n])=>`public fun get_${r}(self: &${e}): ${n} {
|
|
30
|
-
self.${r}
|
|
31
|
-
}`).join(`
|
|
32
|
-
`)}function d(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}async function L(e,t,r){console.log(`
|
|
33
|
-
\u{1F4E6} Starting Schema Data Generation...`);for(let n of Object.keys(t)){let a=n,o=t[n];console.log(` \u2514\u2500 ${a} ${Array.isArray(o)?"(enum)":"(struct)"}: ${JSON.stringify(o)}`);let s="",i=Object.keys(t).filter(u=>Array.isArray(t[u])).map(u=>u);if(Array.isArray(o)){let u=ee(o);s=`module ${e}::${e}_${d(a)} {
|
|
34
|
-
public enum ${a} has copy, drop , store {
|
|
35
|
-
${u}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
${u.map(p=>`public fun new_${d(p)}(): ${a} {
|
|
39
|
-
${a}::${p}
|
|
40
|
-
}`).join("")}`}else s=`module ${e}::${e}_${d(a)} {
|
|
41
|
-
use std::ascii::String;
|
|
42
|
-
|
|
43
|
-
${Object.keys(t).map(u=>{if(W(o,u))return`use ${e}::${e}_${d(u)}::${u};`}).filter(Boolean).join(`
|
|
44
|
-
`)}
|
|
45
|
-
|
|
46
|
-
public struct ${a} has copy, drop , store {
|
|
47
|
-
${m(o)}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public fun new(${m(o)}): ${a} {
|
|
51
|
-
${a} {
|
|
52
|
-
${$(o)}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
${ne(a,o)}
|
|
57
|
-
${oe(a,o)}
|
|
58
|
-
${te(a,o)}
|
|
59
|
-
${re(a,o)}
|
|
60
|
-
}`;await c(s,`${r}/contracts/${e}/sources/codegen/data/${d(a)}.move`,"formatAndWriteMove")}}function se(e,t){return t!=null?Object.keys(t).map(n=>`use ${e}::${e}_${d(n)}::${n};`).join(`
|
|
61
|
-
`):""}async function w(e,t,r,n){console.log(`
|
|
62
|
-
\u{1F4E6} Starting Schema Structure Generation...`),Object.entries(r).forEach(([o,s])=>{console.log(` \u2514\u2500 ${o}: ${s}`)});let a=`module ${e}::${e}_schema {
|
|
63
|
-
use std::ascii::String;
|
|
64
|
-
use std::ascii::string;
|
|
65
|
-
use sui::package::UpgradeCap;
|
|
66
|
-
use std::type_name;
|
|
67
|
-
use dubhe::storage;
|
|
68
|
-
use dubhe::${e=="dubhe"?"storage_value_internal":"storage_value"}::{Self, StorageValue};
|
|
69
|
-
use dubhe::${e=="dubhe"?"storage_map_internal":"storage_map"}::{Self, StorageMap};
|
|
70
|
-
use dubhe::${e=="dubhe"?"storage_double_map_internal":"storage_double_map"}::{Self, StorageDoubleMap};
|
|
71
|
-
use sui::dynamic_field as df;
|
|
72
|
-
|
|
73
|
-
${se(e,t)}
|
|
74
|
-
|
|
75
|
-
public struct Schema has key, store { id: UID }
|
|
76
|
-
|
|
77
|
-
${Object.entries(r).map(([o,s])=>`public fun borrow_${o}(self: &Schema) : &${s} {
|
|
78
|
-
storage::borrow_field(&self.id, b"${o}")
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
public(package) fun ${o}(self: &mut Schema): &mut ${s} {
|
|
82
|
-
storage::borrow_mut_field(&mut self.id, b"${o}")
|
|
83
|
-
}
|
|
84
|
-
`).join("")}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
public(package) fun create(ctx: &mut TxContext): Schema {
|
|
88
|
-
let mut id = object::new(ctx);
|
|
89
|
-
${Object.entries(r).map(([o,s])=>{let i="";return s.includes("StorageValue")?i=`${e=="dubhe"?"storage_value_internal":"storage_value"}::new(b"${o}", ctx)`:s.includes("StorageMap")?i=`${e=="dubhe"?"storage_map_internal":"storage_map"}::new(b"${o}", ctx)`:s.includes("StorageDoubleMap")&&(i=`${e=="dubhe"?"storage_double_map_internal":"storage_double_map"}::new(b"${o}", ctx)`),`storage::add_field<${s}>(&mut id, b"${o}", ${i});`}).join(`
|
|
90
|
-
`)}
|
|
91
|
-
|
|
92
|
-
Schema { id }
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public(package) fun id(self: &mut Schema): &mut UID {
|
|
96
|
-
&mut self.id
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
public(package) fun borrow_id(self: &Schema): &UID {
|
|
100
|
-
&self.id
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
public fun migrate(_schema: &mut Schema, _ctx: &mut TxContext) { }
|
|
104
|
-
|
|
105
|
-
// ======================================== View Functions ========================================
|
|
106
|
-
${Object.entries(r).map(([o,s])=>{let i=s.match(/<(.+)>/)[1].split(",").map(X=>X.trim()),u=[],p="",h="";return s.includes("StorageValue")?(u=[],p=`${i[0]}`,h="get()"):s.includes("StorageMap")?(u=[`key: ${i[0]}`],p=`${i[1]}`,h="get(key)"):s.includes("StorageDoubleMap")&&(u=[`key1: ${i[0]}`,`key2: ${i[1]}`],p=`${i[2]}`,h="get(key1, key2)"),`public fun get_${o}(self: &Schema, ${u}) : &${p} {
|
|
107
|
-
self.borrow_${o}().${h}
|
|
108
|
-
}`}).join(`
|
|
109
|
-
`)}
|
|
110
|
-
// =========================================================================================================
|
|
111
|
-
}`;await c(a,`${n}/contracts/${e}/sources/codegen/core/schema.move`,"formatAndWriteMove")}import{existsSync as V}from"fs";async function B(e,t){let r=`${t}/contracts/${e.name}/sources/scripts/deploy_hook.move`;if(!V(r)){let n=`module ${e.name}::${e.name}_deploy_hook {
|
|
112
|
-
use ${e.name}::${e.name}_schema::Schema;
|
|
113
|
-
${e.name!=="dubhe"?"use dubhe::dubhe_schema::Schema as DubheSchema;":""}
|
|
19
|
+
${e.name} = "0x1024"
|
|
20
|
+
`;await $(s,`${t}/src/${e.name}/Move.toml`,"formatAndWriteMove"),console.log(`\u2705 Move.toml Generation Complete
|
|
21
|
+
`)}import{existsSync as se}from"fs";async function ue(e,t){if(!se(t)){let s=`module ${e.name}::deploy_hook {
|
|
22
|
+
use dubhe::dapp_hub::DappHub;
|
|
114
23
|
|
|
115
|
-
public(package) fun run(
|
|
24
|
+
public(package) fun run(_dapp_hub: &mut DappHub, _ctx: &mut TxContext) {
|
|
116
25
|
|
|
117
26
|
}
|
|
118
|
-
}`;await
|
|
27
|
+
}`;await $(s,t,"formatAndWriteMove")}}async function ne(e,t){if(!se(`${t}/src/${e.name}/sources/scripts/migrate.move`)){let s=`module ${e.name}::migrate {
|
|
119
28
|
const ON_CHAIN_VERSION: u32 = 1;
|
|
120
29
|
|
|
121
30
|
public fun on_chain_version(): u32 {
|
|
122
31
|
ON_CHAIN_VERSION
|
|
123
32
|
}
|
|
124
33
|
}
|
|
125
|
-
`;await
|
|
126
|
-
|
|
127
|
-
|
|
34
|
+
`;await $(s,`${t}/src/${e.name}/sources/scripts/migrate.move`,"formatAndWriteMove")}}async function re(e,t){let s=`module ${e.name}::dapp_key {
|
|
35
|
+
use std::type_name;
|
|
36
|
+
use sui::address;
|
|
37
|
+
use std::ascii::String;
|
|
38
|
+
|
|
39
|
+
/// Authorization token for the app.
|
|
128
40
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
41
|
+
public struct DappKey has copy, drop {}
|
|
42
|
+
|
|
43
|
+
public(package) fun new(): DappKey {
|
|
44
|
+
DappKey { }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public fun to_string(): String {
|
|
48
|
+
type_name::get<DappKey>().into_string()
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public fun package_id(): address {
|
|
52
|
+
let package_id_str = type_name::get<DappKey>().get_address();
|
|
53
|
+
address::from_ascii_bytes(package_id_str.as_bytes())
|
|
54
|
+
}
|
|
132
55
|
}
|
|
133
|
-
`;await
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
${G(e,t)}
|
|
139
|
-
|
|
140
|
-
public struct ${l(s)}Event has copy, drop {
|
|
141
|
-
${m(i)}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
public fun new(${m(i)}): ${l(s)}Event {
|
|
145
|
-
${l(s)}Event {
|
|
146
|
-
${$(i)}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}`;await c(u,`${n}/contracts/${e}/sources/codegen/data/${s}_event.move`,"formatAndWriteMove")}let a=`module ${e}::${e}_events {
|
|
150
|
-
use std::ascii::{String, string};
|
|
151
|
-
${G(e,t)}
|
|
152
|
-
${Object.entries(r).map(([o,s])=>`
|
|
153
|
-
use ${e}::${e}_${o}_event::${l(o)}Event;
|
|
154
|
-
use ${e}::${e}_${o}_event;
|
|
155
|
-
public fun ${o}_event(${m(s)}) {
|
|
156
|
-
dubhe::storage_event::emit_set_record<${l(o)}Event, ${l(o)}Event, ${l(o)}Event>(
|
|
157
|
-
string(b"${o}_event"),
|
|
158
|
-
option::none(),
|
|
159
|
-
option::none(),
|
|
160
|
-
option::some(${e}_${o}_event::new(${$(s)}))
|
|
161
|
-
)
|
|
162
|
-
}
|
|
163
|
-
`).join(`
|
|
164
|
-
`)}
|
|
165
|
-
}`;await c(a,`${n}/contracts/${e}/sources/codegen/events.move`,"formatAndWriteMove")}import{existsSync as K}from"fs";import z from"node:fs/promises";async function H(e,t){K(`${t}/contracts/${e.name}/sources/systems`)||await z.mkdir(`${t}/contracts/${e.name}/sources/systems`,{recursive:!0}),K(`${t}/contracts/${e.name}/sources/tests`)||await z.mkdir(`${t}/contracts/${e.name}/sources/tests`,{recursive:!0})}async function Q(e,t,r){console.log(`
|
|
166
|
-
\u{1F4E6} Starting Schema Error Generation...`);let n=`module ${e}::${e}_errors {
|
|
167
|
-
${Object.entries(t).map(([a,o])=>(console.log(` \u2514\u2500 ${a}: ${o}`),`#[error]
|
|
168
|
-
const ${a.toUpperCase()}: vector<u8> = b"${o}";
|
|
169
|
-
public fun ${a}_error(condition: bool) { assert!(condition, ${a.toUpperCase()}) }
|
|
56
|
+
`;await $(s,t,"formatAndWriteMove")}import{existsSync as pe}from"fs";import oe from"node:fs/promises";async function ae(e,t){pe(`${t}/src/${e.name}/sources/systems`)||await oe.mkdir(`${t}/src/${e.name}/sources/systems`,{recursive:!0}),pe(`${t}/src/${e.name}/sources/tests`)||await oe.mkdir(`${t}/src/${e.name}/sources/tests`,{recursive:!0})}async function ie(e,t,s){console.log(`
|
|
57
|
+
\u{1F4E6} Starting Schema Error Generation...`);let n=`module ${e}::errors {
|
|
58
|
+
${Object.entries(t).map(([o,i])=>(console.log(` \u2514\u2500 ${o}: ${i}`),`#[error]
|
|
59
|
+
const ${o.toUpperCase()}: vector<u8> = b"${i}";
|
|
60
|
+
public fun ${o}_error(condition: bool) { assert!(condition, ${o.toUpperCase()}) }
|
|
170
61
|
`)).join(`
|
|
171
62
|
`)}
|
|
172
|
-
}`;await
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
${e.name!=="dubhe"?`
|
|
187
|
-
let schema = test_scenario::take_shared<Schema>(scenario);
|
|
188
|
-
(dubhe_schema, schema)
|
|
189
|
-
`:"test_scenario::take_shared<DubheSchema>(scenario)"}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
${e.name=="dubhe"?`
|
|
193
|
-
public fun create_dubhe_schema_for_other_contract(scenario: &mut Scenario): DubheSchema {
|
|
194
|
-
let ctx = test_scenario::ctx(scenario);
|
|
195
|
-
let mut schema = dubhe::dubhe_schema::create(ctx);
|
|
196
|
-
dubhe::dubhe_deploy_hook::run(&mut schema, ctx);
|
|
197
|
-
sui::transfer::public_share_object(schema);
|
|
198
|
-
test_scenario::next_tx(scenario, ctx.sender());
|
|
199
|
-
test_scenario::take_shared<DubheSchema>(scenario)
|
|
63
|
+
}`;await $(n,`${s}/src/${e}/sources/codegen/errors.move`,"formatAndWriteMove")}async function ce(e,t){let s=`module ${e.name}::init_test {
|
|
64
|
+
use sui::clock;
|
|
65
|
+
use sui::test_scenario;
|
|
66
|
+
use sui::test_scenario::Scenario;
|
|
67
|
+
use dubhe::dapp_hub::{DappHub, Self};
|
|
68
|
+
|
|
69
|
+
public fun deploy_dapp_for_testing(scenario: &mut Scenario): DappHub {
|
|
70
|
+
let ctx = test_scenario::ctx(scenario);
|
|
71
|
+
let clock = clock::create_for_testing(ctx);
|
|
72
|
+
let mut dapp_hub = dapp_hub::create_dapp_hub_for_testing(ctx);
|
|
73
|
+
${e.name}::genesis::run(&mut dapp_hub, &clock, ctx);
|
|
74
|
+
clock::destroy_for_testing(clock);
|
|
75
|
+
test_scenario::next_tx(scenario, ctx.sender());
|
|
76
|
+
dapp_hub
|
|
200
77
|
}
|
|
201
|
-
`:""}
|
|
202
78
|
}
|
|
203
|
-
`;await
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
)
|
|
79
|
+
`;await $(s,t,"formatAndWriteMove")}async function V(e,t){console.log(`
|
|
80
|
+
\u{1F4E6} Starting Components Generation...`);for(let[s,n]of Object.entries(e.components)){if(console.log(` \u2514\u2500 ${s}: ${JSON.stringify(n)}`),typeof n=="string"){let i=De(e.name,s,n,"Onchain");await $(i,`${t}/${s}.move`,"formatAndWriteMove");continue}if(Object.keys(n).length===0){let i=le(e.name,s,{fields:{entity_id:"address"},keys:["entity_id"],offchain:!1});await $(i,`${t}/${s}.move`,"formatAndWriteMove");continue}if(n.keys||(n.keys=["entity_id"],n.fields.entity_id||(n.fields={entity_id:"address",...n.fields})),n.keys&&n.keys.length>1)throw new Error(`Component '${s}' can only have one key, but found ${n.keys.length} keys: ${n.keys.join(", ")}`);let o=le(e.name,s,n);await $(o,`${t}/${s}.move`,"formatAndWriteMove")}}function De(e,t,s,n="Onchain"){let o=!C(s),i=o?`${de(s)}`:"";return`module ${e}::${t} {
|
|
81
|
+
use sui::bcs::{to_bytes};
|
|
82
|
+
use dubhe::table_id;
|
|
83
|
+
use dubhe::dapp_state;
|
|
84
|
+
use dubhe::dapp_service;
|
|
85
|
+
use dubhe::dapp_hub;
|
|
86
|
+
use dubhe::dapp_hub::DappHub;
|
|
87
|
+
use ${e}::dapp_key;
|
|
88
|
+
use ${e}::dapp_key::DappKey;
|
|
89
|
+
${o?` use ${e}::${i};
|
|
90
|
+
use ${e}::${i}::{${s}};`:""}
|
|
91
|
+
|
|
92
|
+
const TABLE_NAME: vector<u8> = b"${t}";
|
|
93
|
+
|
|
94
|
+
public fun get_table_id(): vector<u8> {
|
|
95
|
+
table_id::encode(table_id::${n==="Offchain"?"offchain_table_type":"onchain_table_type"}(), TABLE_NAME)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public fun get_key_schemas(): vector<vector<u8>> {
|
|
99
|
+
vector[b"address"]
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public fun get_value_schemas(): vector<vector<u8>> {
|
|
103
|
+
vector[b"${s}"]
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public fun get_key_names(): vector<vector<u8>> {
|
|
107
|
+
vector[b"entity_id"]
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public fun get_value_names(): vector<vector<u8>> {
|
|
111
|
+
vector[b"value"]
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public(package) fun register_table(dapp_hub: &mut DappHub, ctx: &mut TxContext) {
|
|
115
|
+
let dapp_key = dapp_key::new();
|
|
116
|
+
dapp_service::register_table(
|
|
117
|
+
dapp_hub,
|
|
118
|
+
dapp_key,
|
|
119
|
+
get_table_id(),
|
|
120
|
+
TABLE_NAME,
|
|
121
|
+
get_key_schemas(),
|
|
122
|
+
get_key_names(),
|
|
123
|
+
get_value_schemas(),
|
|
124
|
+
get_value_names(),
|
|
125
|
+
ctx
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public fun has(dapp_hub: &DappHub, entity_id: address): bool {
|
|
130
|
+
let mut key_tuple = vector::empty();
|
|
131
|
+
key_tuple.push_back(to_bytes(&entity_id));
|
|
132
|
+
dapp_service::has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public(package) fun delete(dapp_hub: &mut DappHub, entity_id: address) {
|
|
136
|
+
let mut key_tuple = vector::empty();
|
|
137
|
+
key_tuple.push_back(to_bytes(&entity_id));
|
|
138
|
+
dapp_service::delete_record<DappKey>(dapp_hub, dapp_key::new(), get_table_id(), key_tuple);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
public fun get(dapp_hub: &DappHub, entity_id: address): (${s}) {
|
|
142
|
+
let mut key_tuple = vector::empty();
|
|
143
|
+
key_tuple.push_back(to_bytes(&entity_id));
|
|
144
|
+
let value_tuple = dapp_service::get_record<DappKey>(dapp_hub, get_table_id(), key_tuple);
|
|
145
|
+
let mut bsc_type = sui::bcs::new(value_tuple);
|
|
146
|
+
${o?`let value = ${e}::${i}::decode(&mut bsc_type);`:`let value = sui::bcs::peel_${M(s)}(&mut bsc_type);`}
|
|
147
|
+
(value)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
public(package) fun set(dapp_hub: &mut DappHub, entity_id: address, value: ${s}) {
|
|
151
|
+
let mut key_tuple = vector::empty();
|
|
152
|
+
key_tuple.push_back(to_bytes(&entity_id));
|
|
153
|
+
let value_tuple = encode(value);
|
|
154
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public fun encode(value: ${s}): vector<vector<u8>> {
|
|
158
|
+
let mut value_tuple = vector::empty();
|
|
159
|
+
value_tuple.push_back(${o?`${e}::${i}::encode(value)`:"to_bytes(&value)"});
|
|
160
|
+
value_tuple
|
|
161
|
+
}
|
|
162
|
+
}`}function de(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}function le(e,t,s){let n=s.fields,o=s.keys||["entity_id"],b=s.offchain||!1?"Offchain":"Onchain",g=Object.keys(n).every(r=>o.includes(r)),m=Object.entries(n).filter(([r])=>!o.includes(r)).map(([r])=>r),c=m.length===1,h=Object.entries(n).filter(([r,f])=>!C(f)).map(([r,f])=>({type:f,module:`${de(f)}`})).filter((r,f,H)=>H.findIndex(T=>T.type===r.type)===f),k=xe(e,t,n,o,!g&&!c,h,b);if(g||c)return`module ${e}::${t} {
|
|
163
|
+
use sui::bcs::{to_bytes};
|
|
164
|
+
use dubhe::table_id;
|
|
165
|
+
use dubhe::dapp_state;
|
|
166
|
+
use dubhe::dapp_service;
|
|
167
|
+
use dubhe::dapp_hub;
|
|
168
|
+
use dubhe::dapp_hub::DappHub;
|
|
169
|
+
use ${e}::dapp_key;
|
|
170
|
+
use ${e}::dapp_key::DappKey;
|
|
171
|
+
${h.length>0?h.map(r=>` use ${e}::${r.module};
|
|
172
|
+
use ${e}::${r.module}::{${r.type}};`).join(`
|
|
173
|
+
`):""}
|
|
174
|
+
|
|
175
|
+
const TABLE_NAME: vector<u8> = b"${t}";
|
|
176
|
+
|
|
177
|
+
${k}
|
|
178
|
+
}`;let p=m.map(r=>` ${r}: ${n[r]},`).join(`
|
|
179
|
+
`),l=m.map(r=>`${r}: ${n[r]}`).join(", "),O=m.map(r=>` ${r},`).join(`
|
|
180
|
+
`),S=m.map(r=>` public fun ${r}(self: &${D(t)}): ${n[r]} {
|
|
181
|
+
self.${r}
|
|
182
|
+
}`).join(`
|
|
183
|
+
|
|
184
|
+
`),E=m.map(r=>` public fun update_${r}(self: &mut ${D(t)}, ${r}: ${n[r]}) {
|
|
185
|
+
self.${r} = ${r}
|
|
186
|
+
}`).join(`
|
|
187
|
+
|
|
188
|
+
`);return`module ${e}::${t} {
|
|
189
|
+
use sui::bcs::{to_bytes};
|
|
190
|
+
use dubhe::table_id;
|
|
191
|
+
use dubhe::dapp_state;
|
|
192
|
+
use dubhe::dapp_service;
|
|
193
|
+
use dubhe::dapp_hub;
|
|
194
|
+
use dubhe::dapp_hub::DappHub;
|
|
195
|
+
use ${e}::dapp_key;
|
|
196
|
+
use ${e}::dapp_key::DappKey;
|
|
197
|
+
${h.length>0?h.map(r=>` use ${e}::${r.module};
|
|
198
|
+
use ${e}::${r.module}::{${r.type}};`).join(`
|
|
199
|
+
`):""}
|
|
200
|
+
|
|
201
|
+
const TABLE_NAME: vector<u8> = b"${t}";
|
|
202
|
+
|
|
203
|
+
public struct ${D(t)} has copy, drop, store {
|
|
204
|
+
${p}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
public fun new(${l}): ${D(t)} {
|
|
208
|
+
${D(t)} {
|
|
209
|
+
${O}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
${S}
|
|
214
|
+
|
|
215
|
+
${E}
|
|
216
|
+
|
|
217
|
+
${k}
|
|
218
|
+
}`}function C(e){return["address","bool","u8","u32","u64","u128","u256","vector<address>","vector<bool>","vector<u8>","vector<vector<u8>>","vector<u32>","vector<u64>","vector<u128>","vector<u256>"].includes(e)}function xe(e,t,s,n,o=!0,i=[],b="Onchain"){let g=n.reduce((u,a)=>({...u,[a]:s[a]}),{}),_=Object.entries(s).filter(([u])=>!n.includes(u)).reduce((u,[a,d])=>({...u,[a]:d}),{}),m=Object.keys(g),c=Object.keys(_),h=Object.keys(s).every(u=>n.includes(u)),k=c.length===1,p=n.length>0?n.map(u=>`${u}: ${s[u]}`).join(", "):"",l=n.length>0?`let mut key_tuple = vector::empty();
|
|
219
|
+
${n.map(u=>`key_tuple.push_back(to_bytes(&${u}));`).join(`
|
|
220
|
+
`)}`:"let key_tuple = vector::empty();",O=` public fun get_table_id(): vector<u8> {
|
|
221
|
+
table_id::encode(table_id::${b==="Offchain"?"offchain_table_type":"onchain_table_type"}(), TABLE_NAME)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
public fun get_key_schemas(): vector<vector<u8>> {
|
|
225
|
+
vector[${n.map(u=>`b"${s[u]}"`).join(", ")}]
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public fun get_value_schemas(): vector<vector<u8>> {
|
|
229
|
+
vector[${Object.values(_).map(u=>`b"${u}"`).join(", ")}]
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
public fun get_key_names(): vector<vector<u8>> {
|
|
233
|
+
vector[${n.map(u=>`b"${u}"`).join(", ")}]
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
public fun get_value_names(): vector<vector<u8>> {
|
|
237
|
+
vector[${c.map(u=>`b"${u}"`).join(", ")}]
|
|
238
|
+
}`,S=` public(package) fun register_table(dapp_hub: &mut DappHub, ctx: &mut TxContext) {
|
|
239
|
+
let dapp_key = dapp_key::new();
|
|
240
|
+
dapp_service::register_table(
|
|
241
|
+
dapp_hub,
|
|
242
|
+
dapp_key,
|
|
243
|
+
get_table_id(),
|
|
244
|
+
TABLE_NAME,
|
|
245
|
+
get_key_schemas(),
|
|
246
|
+
get_key_names(),
|
|
247
|
+
get_value_schemas(),
|
|
248
|
+
get_value_names(),
|
|
249
|
+
ctx
|
|
250
|
+
);
|
|
251
|
+
}`,E=` public fun has(dapp_hub: &DappHub${p?", "+p:""}): bool {
|
|
252
|
+
${l}
|
|
253
|
+
dapp_service::has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
public fun ensure_has(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
257
|
+
${l}
|
|
258
|
+
dapp_service::ensure_has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
public fun ensure_not_has(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
262
|
+
${l}
|
|
263
|
+
dapp_service::ensure_not_has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
${k?"":c.map((u,a)=>` public fun has_${u}(dapp_hub: &DappHub${p?", "+p:""}): bool {
|
|
267
|
+
${l}
|
|
268
|
+
dapp_service::has_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a})
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
public fun ensure_has_${u}(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
272
|
+
${l}
|
|
273
|
+
dapp_service::ensure_has_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a})
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
public fun ensure_not_has_${u}(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
277
|
+
${l}
|
|
278
|
+
dapp_service::ensure_not_has_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a})
|
|
279
|
+
}`).join(`
|
|
280
|
+
|
|
281
|
+
`)}`,r=` public(package) fun delete(dapp_hub: &mut DappHub${p?", "+p:""}) {
|
|
282
|
+
${l}
|
|
283
|
+
dapp_service::delete_record<DappKey>(dapp_hub, dapp_key::new(), get_table_id(), key_tuple);
|
|
284
|
+
}`,f=k?"":c.map(u=>{let a=c.indexOf(u),d=s[u],y=!C(d),v=y?i.find(P=>P.type===d):null;return` public fun get_${u}(dapp_hub: &DappHub${p?", "+p:""}): ${d} {
|
|
285
|
+
${l}
|
|
286
|
+
let value = dapp_service::get_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a});
|
|
287
|
+
let mut bsc_type = sui::bcs::new(value);
|
|
288
|
+
${y?`let ${u} = ${e}::${v?.module}::decode(&mut bsc_type);`:`let ${u} = sui::bcs::peel_${M(d)}(&mut bsc_type);`}
|
|
289
|
+
${u}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
public(package) fun set_${u}(dapp_hub: &mut DappHub${p?", "+p:""}, ${u}: ${d}) {
|
|
293
|
+
${l}
|
|
294
|
+
let value = ${y?`${e}::${v?.module}::encode(${u})`:`to_bytes(&${u})`};
|
|
295
|
+
dapp_service::set_field(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, ${a}, value);
|
|
296
|
+
}`}).join(`
|
|
297
|
+
|
|
298
|
+
`),H=h?` public(package) fun set(dapp_hub: &mut DappHub${p?", "+p:""}) {
|
|
299
|
+
${l}
|
|
300
|
+
let value_tuple = vector::empty();
|
|
301
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
302
|
+
}`:k?` public fun get(dapp_hub: &DappHub${p?", "+p:""}): ${Object.values(_)[0]} {
|
|
303
|
+
${l}
|
|
304
|
+
let value = dapp_service::get_field<DappKey>(dapp_hub, get_table_id(), key_tuple, 0);
|
|
305
|
+
let mut bsc_type = sui::bcs::new(value);
|
|
306
|
+
${C(Object.values(_)[0])?`let value = sui::bcs::peel_${M(Object.values(_)[0])}(&mut bsc_type);`:`let value = ${e}::${i.find(u=>u.type===Object.values(_)[0])?.module}::decode(&mut bsc_type);`}
|
|
307
|
+
value
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
public(package) fun set(dapp_hub: &mut DappHub${p?", "+p:""}, value: ${Object.values(_)[0]}) {
|
|
311
|
+
${l}
|
|
312
|
+
let value_tuple = encode(value);
|
|
313
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
314
|
+
}`:` public fun get(dapp_hub: &DappHub${p?", "+p:""}): (${Object.values(_).join(", ")}) {
|
|
315
|
+
${l}
|
|
316
|
+
let value_tuple = dapp_service::get_record<DappKey>(dapp_hub, get_table_id(), key_tuple);
|
|
317
|
+
let mut bsc_type = sui::bcs::new(value_tuple);
|
|
318
|
+
${c.map(u=>{let a=s[u],d=!C(a),y=d?i.find(v=>v.type===a):null;return`let ${u} = ${d?`${e}::${y?.module}::decode(&mut bsc_type)`:`sui::bcs::peel_${M(a)}(&mut bsc_type)`};`}).join(`
|
|
319
|
+
`)}
|
|
320
|
+
(${c.join(", ")})
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
public(package) fun set(dapp_hub: &mut DappHub${p?", "+p:""}, ${c.map(u=>`${u}: ${s[u]}`).join(", ")}) {
|
|
324
|
+
${l}
|
|
325
|
+
let value_tuple = encode(${c.join(", ")});
|
|
326
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
327
|
+
}`,T=o?` public fun get_struct(dapp_hub: &DappHub${p?", "+p:""}): ${D(t)} {
|
|
328
|
+
${l}
|
|
329
|
+
let value_tuple = dapp_service::get_record<DappKey>(dapp_hub, get_table_id(), key_tuple);
|
|
330
|
+
decode(value_tuple)
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
public(package) fun set_struct(dapp_hub: &mut DappHub${p?", "+p:""}, ${t}: ${D(t)}) {
|
|
334
|
+
${l}
|
|
335
|
+
let value_tuple = encode_struct(${t});
|
|
336
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
337
|
+
}`:"",I=k?` public fun encode(value: ${Object.values(_)[0]}): vector<vector<u8>> {
|
|
338
|
+
let mut value_tuple = vector::empty();
|
|
339
|
+
value_tuple.push_back(${C(Object.values(_)[0])?"to_bytes(&value)":`${e}::${i.find(u=>u.type===Object.values(_)[0])?.module}::encode(value)`});
|
|
340
|
+
value_tuple
|
|
341
|
+
}`:o?` public fun encode(${c.map(u=>`${u}: ${s[u]}`).join(", ")}): vector<vector<u8>> {
|
|
342
|
+
let mut value_tuple = vector::empty();
|
|
343
|
+
${c.map(u=>{let a=s[u],d=!C(a),y=d?i.find(v=>v.type===a):null;return`value_tuple.push_back(${d?`${e}::${y?.module}::encode(${u})`:`to_bytes(&${u})`});`}).join(`
|
|
344
|
+
`)}
|
|
345
|
+
value_tuple
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
public fun encode_struct(${t}: ${D(t)}): vector<vector<u8>> {
|
|
349
|
+
encode(${c.map(u=>`${t}.${u}`).join(", ")})
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
public fun decode(data: vector<u8>): ${D(t)} {
|
|
353
|
+
let mut bsc_type = sui::bcs::new(data);
|
|
354
|
+
${c.map(u=>{let a=s[u],d=!C(a),y=d?i.find(v=>v.type===a):null;return`let ${u} = ${d?`${e}::${y?.module}::decode(&mut bsc_type)`:`sui::bcs::peel_${M(a)}(&mut bsc_type)`};`}).join(`
|
|
355
|
+
`)}
|
|
356
|
+
${D(t)} {
|
|
357
|
+
${c.map(u=>`${u},`).join(`
|
|
358
|
+
`)}
|
|
359
|
+
}
|
|
360
|
+
}`:"";return`${O}
|
|
361
|
+
|
|
362
|
+
${S}
|
|
363
|
+
|
|
364
|
+
${E}
|
|
365
|
+
|
|
366
|
+
${r}
|
|
367
|
+
|
|
368
|
+
${f}
|
|
369
|
+
|
|
370
|
+
${H}
|
|
371
|
+
|
|
372
|
+
${T}
|
|
373
|
+
|
|
374
|
+
${I}`}function D(e){return e.split("_").map((t,s)=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function M(e){if(e.startsWith("vector<")){let t=e.slice(7,-1);return t==="vector<u8>"?"vec_vec_u8":`vec_${M(t)}`}switch(e){case"bool":return"bool";case"u8":return"u8";case"u32":return"u32";case"u64":return"u64";case"u128":return"u128";case"u256":return"u256";case"address":return"address";default:return e}}async function _e(e,t){let s=Object.keys(e.components||{}).map(b=>` ${b}::register_table(dapp_hub, ctx);`).join(`
|
|
375
|
+
`),n=Object.keys(e.resources||{}).map(b=>` ${b}::register_table(dapp_hub, ctx);`).join(`
|
|
376
|
+
`),o=[s,n].filter(b=>b.trim()!=="").join(`
|
|
377
|
+
`),i=`module ${e.name}::genesis {
|
|
378
|
+
use sui::clock::Clock;
|
|
379
|
+
use dubhe::dapp_service;
|
|
380
|
+
use dubhe::dapp_hub::DappHub;
|
|
381
|
+
use ${e.name}::dapp_key;
|
|
382
|
+
${Object.keys(e.components||{}).map(b=>`use ${e.name}::${b};`).join(`
|
|
383
|
+
`)}
|
|
384
|
+
${Object.keys(e.resources||{}).map(b=>`use ${e.name}::${b};`).join(`
|
|
385
|
+
`)}
|
|
386
|
+
|
|
387
|
+
public entry fun run(dapp_hub: &mut DappHub, clock: &Clock, ctx: &mut TxContext) {
|
|
388
|
+
// Create Dapp
|
|
389
|
+
let dapp_key = dapp_key::new();
|
|
390
|
+
dapp_service::create_dapp(dapp_hub, dapp_key, b"${e.name}", b"${e.description}", clock, ctx);
|
|
391
|
+
|
|
392
|
+
// Register tables
|
|
393
|
+
${o}
|
|
394
|
+
|
|
219
395
|
// Logic that needs to be automated once the contract is deployed
|
|
220
|
-
${e.name}
|
|
221
|
-
// Authorize schemas and public share objects
|
|
222
|
-
sui::transfer::public_share_object(schema);
|
|
396
|
+
${e.name}::deploy_hook::run(dapp_hub, ctx);
|
|
223
397
|
}
|
|
224
398
|
}
|
|
225
|
-
`;await
|
|
226
|
-
\u{
|
|
399
|
+
`;await $(i,t,"formatAndWriteMove")}function be(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}async function $e(e,t){if(console.log(`
|
|
400
|
+
\u{1F4E6} Starting Enums Generation...`),!!e.enums)for(let[s,n]of Object.entries(e.enums)){console.log(` \u2514\u2500 ${s}: ${JSON.stringify(n)}`);let o=[...n].sort((b,g)=>b.localeCompare(g)),i=we(e.name,s,o);await $(i,`${t}/${be(s)}.move`,"formatAndWriteMove")}}function we(e,t,s){let n=s.map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join(",");return`module ${e}::${be(t)} {
|
|
401
|
+
use sui::bcs::{BCS, to_bytes, peel_enum_tag};
|
|
402
|
+
|
|
403
|
+
public enum ${t} has copy, drop, store {
|
|
404
|
+
${n}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
${s.map(o=>` public fun new_${o.toLowerCase()}(): ${t} {
|
|
408
|
+
${t}::${o.charAt(0).toUpperCase()+o.slice(1)}
|
|
409
|
+
}`).join(`
|
|
410
|
+
|
|
411
|
+
`)}
|
|
412
|
+
|
|
413
|
+
public fun encode(self: ${t}): vector<u8> {
|
|
414
|
+
to_bytes(&self)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
public fun decode(bytes: &mut BCS): ${t} {
|
|
418
|
+
match(peel_enum_tag(bytes)) {
|
|
419
|
+
${s.map((o,i)=>` ${i} => ${t}::${o.charAt(0).toUpperCase()+o.slice(1)},`).join(`
|
|
420
|
+
`)}
|
|
421
|
+
_ => abort,
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}`}async function J(e,t){console.log(`
|
|
425
|
+
\u{1F4E6} Starting Resources Generation...`);for(let[s,n]of Object.entries(e.resources)){if(console.log(` \u2514\u2500 ${s}: ${JSON.stringify(n)}`),typeof n=="string"){let g=Ce(e.name,s,n,"Onchain");await $(g,`${t}/${s}.move`,"formatAndWriteMove");continue}if(!n.fields||Object.keys(n.fields).length===0)throw new Error(`Resource '${s}' must have fields defined, but found empty object`);n.keys||(n.keys=[]);let i=n.offchain||!1?"Offchain":"Onchain",b=Ae(e.name,s,n);await $(b,`${t}/${s}.move`,"formatAndWriteMove")}}function Ce(e,t,s,n="Onchain"){let o=!A(s),i=o?`${me(s)}`:"";return`module ${e}::${t} {
|
|
426
|
+
use sui::bcs::{to_bytes};
|
|
427
|
+
use dubhe::table_id;
|
|
428
|
+
use dubhe::dapp_state;
|
|
429
|
+
use dubhe::dapp_service;
|
|
430
|
+
use dubhe::dapp_hub;
|
|
431
|
+
use dubhe::dapp_hub::DappHub;
|
|
432
|
+
use ${e}::dapp_key;
|
|
433
|
+
use ${e}::dapp_key::DappKey;
|
|
434
|
+
${o?` use ${e}::${i};
|
|
435
|
+
use ${e}::${i}::{${s}};`:""}
|
|
436
|
+
|
|
437
|
+
const TABLE_NAME: vector<u8> = b"${t}";
|
|
438
|
+
|
|
439
|
+
public fun get_table_id(): vector<u8> {
|
|
440
|
+
table_id::encode(table_id::${n==="Offchain"?"offchain_table_type":"onchain_table_type"}(), TABLE_NAME)
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
public fun get_key_schemas(): vector<vector<u8>> {
|
|
444
|
+
vector[]
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
public fun get_value_schemas(): vector<vector<u8>> {
|
|
448
|
+
vector[b"${s}"]
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
public fun get_key_names(): vector<vector<u8>> {
|
|
452
|
+
vector[]
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
public fun get_value_names(): vector<vector<u8>> {
|
|
456
|
+
vector[b"value"]
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
public(package) fun register_table(dapp_hub: &mut DappHub, ctx: &mut TxContext) {
|
|
460
|
+
let dapp_key = dapp_key::new();
|
|
461
|
+
dapp_service::register_table(
|
|
462
|
+
dapp_hub,
|
|
463
|
+
dapp_key,
|
|
464
|
+
get_table_id(),
|
|
465
|
+
TABLE_NAME,
|
|
466
|
+
get_key_schemas(),
|
|
467
|
+
get_key_names(),
|
|
468
|
+
get_value_schemas(),
|
|
469
|
+
get_value_names(),
|
|
470
|
+
ctx
|
|
471
|
+
);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
public fun has(dapp_hub: &DappHub): bool {
|
|
475
|
+
let key_tuple = vector::empty();
|
|
476
|
+
dapp_service::has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
public(package) fun delete(dapp_hub: &mut DappHub) {
|
|
480
|
+
let key_tuple = vector::empty();
|
|
481
|
+
dapp_service::delete_record<DappKey>(dapp_hub, dapp_key::new(), get_table_id(), key_tuple);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
public fun get(dapp_hub: &DappHub): (${s}) {
|
|
485
|
+
let key_tuple = vector::empty();
|
|
486
|
+
let value_tuple = dapp_service::get_record<DappKey>(dapp_hub, get_table_id(), key_tuple);
|
|
487
|
+
let mut bsc_type = sui::bcs::new(value_tuple);
|
|
488
|
+
${o?`let value = ${e}::${i}::decode(&mut bsc_type);`:`let value = sui::bcs::peel_${K(s)}(&mut bsc_type);`}
|
|
489
|
+
(value)
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
public(package) fun set(dapp_hub: &mut DappHub, value: ${s}) {
|
|
493
|
+
let key_tuple = vector::empty();
|
|
494
|
+
let value_tuple = encode(value);
|
|
495
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
public fun encode(value: ${s}): vector<vector<u8>> {
|
|
499
|
+
let mut value_tuple = vector::empty();
|
|
500
|
+
value_tuple.push_back(${o?`${e}::${i}::encode(value)`:"to_bytes(&value)"});
|
|
501
|
+
value_tuple
|
|
502
|
+
}
|
|
503
|
+
}`}function me(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}function Ae(e,t,s){let n=s.fields,o=s.keys||[],b=s.offchain||!1?"Offchain":"Onchain",g=Object.keys(n).every(r=>o.includes(r)),_=Object.entries(n).filter(([r])=>!o.includes(r)),m=_.map(([r])=>r),c=m.length===1,h=_.filter(([r,f])=>!A(f)).map(([r,f])=>({type:f,module:`${me(f)}`})).filter((r,f,H)=>H.findIndex(T=>T.type===r.type)===f),k=je(e,t,n,o,!g&&!c,h,b);if(g||c)return`module ${e}::${t} {
|
|
504
|
+
use sui::bcs::{to_bytes};
|
|
505
|
+
use dubhe::table_id;
|
|
506
|
+
use dubhe::dapp_state;
|
|
507
|
+
use dubhe::dapp_service;
|
|
508
|
+
use dubhe::dapp_hub;
|
|
509
|
+
use dubhe::dapp_hub::DappHub;
|
|
510
|
+
use ${e}::dapp_key;
|
|
511
|
+
use ${e}::dapp_key::DappKey;
|
|
512
|
+
${h.length>0?h.map(r=>` use ${e}::${r.module};
|
|
513
|
+
use ${e}::${r.module}::{${r.type}};`).join(`
|
|
514
|
+
`):""}
|
|
515
|
+
|
|
516
|
+
const TABLE_NAME: vector<u8> = b"${t}";
|
|
517
|
+
|
|
518
|
+
${k}
|
|
519
|
+
}`;let p=m.map(r=>` ${r}: ${n[r]},`).join(`
|
|
520
|
+
`),l=m.map(r=>`${r}: ${n[r]}`).join(", "),O=m.map(r=>` ${r},`).join(`
|
|
521
|
+
`),S=m.map(r=>` public fun ${r}(self: &${x(t)}): ${n[r]} {
|
|
522
|
+
self.${r}
|
|
523
|
+
}`).join(`
|
|
524
|
+
|
|
525
|
+
`),E=m.map(r=>` public fun update_${r}(self: &mut ${x(t)}, ${r}: ${n[r]}) {
|
|
526
|
+
self.${r} = ${r}
|
|
527
|
+
}`).join(`
|
|
528
|
+
|
|
529
|
+
`);return`module ${e}::${t} {
|
|
530
|
+
use sui::bcs::{to_bytes};
|
|
531
|
+
use dubhe::table_id;
|
|
532
|
+
use dubhe::dapp_state;
|
|
533
|
+
use dubhe::dapp_service;
|
|
534
|
+
use dubhe::dapp_hub;
|
|
535
|
+
use dubhe::dapp_hub::DappHub;
|
|
536
|
+
use ${e}::dapp_key;
|
|
537
|
+
use ${e}::dapp_key::DappKey;
|
|
538
|
+
${h.length>0?h.map(r=>` use ${e}::${r.module};
|
|
539
|
+
use ${e}::${r.module}::{${r.type}};`).join(`
|
|
540
|
+
`):""}
|
|
541
|
+
|
|
542
|
+
const TABLE_NAME: vector<u8> = b"${t}";
|
|
543
|
+
|
|
544
|
+
public struct ${x(t)} has copy, drop, store {
|
|
545
|
+
${p}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
public fun new(${l}): ${x(t)} {
|
|
549
|
+
${x(t)} {
|
|
550
|
+
${O}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
${S}
|
|
555
|
+
|
|
556
|
+
${E}
|
|
557
|
+
|
|
558
|
+
${k}
|
|
559
|
+
}`}function A(e){return["address","bool","u8","u32","u64","u128","u256","vector<address>","vector<bool>","vector<u8>","vector<vector<u8>>","vector<u32>","vector<u64>","vector<u128>","vector<u256>"].includes(e)}function je(e,t,s,n,o=!0,i=[],b="Onchain"){let g=n.reduce((u,a)=>({...u,[a]:s[a]}),{}),_=Object.entries(s).filter(([u])=>!n.includes(u)).reduce((u,[a,d])=>({...u,[a]:d}),{}),m=Object.keys(g),c=Object.keys(_),h=Object.keys(s).every(u=>n.includes(u)),k=c.length===1,p=n.length>0?n.map(u=>`${u}: ${s[u]}`).join(", "):"",l=n.length>0?`let mut key_tuple = vector::empty();
|
|
560
|
+
${n.map(u=>`key_tuple.push_back(to_bytes(&${u}));`).join(`
|
|
561
|
+
`)}`:"let key_tuple = vector::empty();",O=` public fun get_table_id(): vector<u8> {
|
|
562
|
+
table_id::encode(table_id::${b==="Offchain"?"offchain_table_type":"onchain_table_type"}(), TABLE_NAME)
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
public fun get_key_schemas(): vector<vector<u8>> {
|
|
566
|
+
vector[${n.map(u=>`b"${s[u]}"`).join(", ")}]
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
public fun get_value_schemas(): vector<vector<u8>> {
|
|
570
|
+
vector[${Object.values(_).map(u=>`b"${u}"`).join(", ")}]
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
public fun get_key_names(): vector<vector<u8>> {
|
|
574
|
+
vector[${n.map(u=>`b"${u}"`).join(", ")}]
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
public fun get_value_names(): vector<vector<u8>> {
|
|
578
|
+
vector[${c.map(u=>`b"${u}"`).join(", ")}]
|
|
579
|
+
}`,S=` public(package) fun register_table(dapp_hub: &mut DappHub, ctx: &mut TxContext) {
|
|
580
|
+
let dapp_key = dapp_key::new();
|
|
581
|
+
dapp_service::register_table(
|
|
582
|
+
dapp_hub,
|
|
583
|
+
dapp_key,
|
|
584
|
+
get_table_id(),
|
|
585
|
+
TABLE_NAME,
|
|
586
|
+
get_key_schemas(),
|
|
587
|
+
get_key_names(),
|
|
588
|
+
get_value_schemas(),
|
|
589
|
+
get_value_names(),
|
|
590
|
+
ctx
|
|
591
|
+
);
|
|
592
|
+
}`,E=` public fun has(dapp_hub: &DappHub${p?", "+p:""}): bool {
|
|
593
|
+
${l}
|
|
594
|
+
dapp_service::has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
public fun ensure_has(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
598
|
+
${l}
|
|
599
|
+
dapp_service::ensure_has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
public fun ensure_not_has(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
603
|
+
${l}
|
|
604
|
+
dapp_service::ensure_not_has_record<DappKey>(dapp_hub, get_table_id(), key_tuple)
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
${k?"":c.map((u,a)=>` public fun has_${u}(dapp_hub: &DappHub${p?", "+p:""}): bool {
|
|
608
|
+
${l}
|
|
609
|
+
dapp_service::has_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a})
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
public fun ensure_has_${u}(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
613
|
+
${l}
|
|
614
|
+
dapp_service::ensure_has_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a})
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
public fun ensure_not_has_${u}(dapp_hub: &DappHub${p?", "+p:""}) {
|
|
618
|
+
${l}
|
|
619
|
+
dapp_service::ensure_not_has_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a})
|
|
620
|
+
}`).join(`
|
|
621
|
+
|
|
622
|
+
`)}`,r=` public(package) fun delete(dapp_hub: &mut DappHub${p?", "+p:""}) {
|
|
623
|
+
${l}
|
|
624
|
+
dapp_service::delete_record<DappKey>(dapp_hub, dapp_key::new(), get_table_id(), key_tuple);
|
|
625
|
+
}`,f=k?"":c.map(u=>{let a=c.indexOf(u),d=s[u],y=!A(d),v=y?i.find(P=>P.type===d):null;return` public fun get_${u}(dapp_hub: &DappHub${p?", "+p:""}): ${d} {
|
|
626
|
+
${l}
|
|
627
|
+
let value = dapp_service::get_field<DappKey>(dapp_hub, get_table_id(), key_tuple, ${a});
|
|
628
|
+
let mut bsc_type = sui::bcs::new(value);
|
|
629
|
+
${y?`let ${u} = ${e}::${v?.module}::decode(&mut bsc_type);`:`let ${u} = sui::bcs::peel_${K(d)}(&mut bsc_type);`}
|
|
630
|
+
${u}
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
public(package) fun set_${u}(dapp_hub: &mut DappHub${p?", "+p:""}, ${u}: ${d}) {
|
|
634
|
+
${l}
|
|
635
|
+
let value = ${y?`${e}::${v?.module}::encode(${u})`:`to_bytes(&${u})`};
|
|
636
|
+
dapp_service::set_field(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, ${a}, value);
|
|
637
|
+
}`}).join(`
|
|
638
|
+
|
|
639
|
+
`),H=h?` public(package) fun set(dapp_hub: &mut DappHub${p?", "+p:""}) {
|
|
640
|
+
${l}
|
|
641
|
+
let value_tuple = vector::empty();
|
|
642
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
643
|
+
}`:k?` public fun get(dapp_hub: &DappHub${p?", "+p:""}): ${Object.values(_)[0]} {
|
|
644
|
+
${l}
|
|
645
|
+
let value = dapp_service::get_field<DappKey>(dapp_hub, get_table_id(), key_tuple, 0);
|
|
646
|
+
let mut bsc_type = sui::bcs::new(value);
|
|
647
|
+
${A(Object.values(_)[0])?`let value = sui::bcs::peel_${K(Object.values(_)[0])}(&mut bsc_type);`:`let value = ${e}::${i.find(u=>u.type===Object.values(_)[0])?.module}::decode(&mut bsc_type);`}
|
|
648
|
+
value
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
public(package) fun set(dapp_hub: &mut DappHub${p?", "+p:""}, value: ${Object.values(_)[0]}) {
|
|
652
|
+
${l}
|
|
653
|
+
let value_tuple = encode(value);
|
|
654
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
655
|
+
}`:` public fun get(dapp_hub: &DappHub${p?", "+p:""}): (${Object.values(_).join(", ")}) {
|
|
656
|
+
${l}
|
|
657
|
+
let value_tuple = dapp_service::get_record<DappKey>(dapp_hub, get_table_id(), key_tuple);
|
|
658
|
+
let mut bsc_type = sui::bcs::new(value_tuple);
|
|
659
|
+
${c.map(u=>{let a=s[u],d=!A(a),y=d?i.find(v=>v.type===a):null;return`let ${u} = ${d?`${e}::${y?.module}::decode(&mut bsc_type)`:`sui::bcs::peel_${K(a)}(&mut bsc_type)`};`}).join(`
|
|
660
|
+
`)}
|
|
661
|
+
(${c.join(", ")})
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
public(package) fun set(dapp_hub: &mut DappHub${p?", "+p:""}, ${c.map(u=>`${u}: ${s[u]}`).join(", ")}) {
|
|
665
|
+
${l}
|
|
666
|
+
let value_tuple = encode(${c.join(", ")});
|
|
667
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
668
|
+
}`,T=o?` public fun get_struct(dapp_hub: &DappHub${p?", "+p:""}): ${x(t)} {
|
|
669
|
+
${l}
|
|
670
|
+
let value_tuple = dapp_service::get_record<DappKey>(dapp_hub, get_table_id(), key_tuple);
|
|
671
|
+
decode(value_tuple)
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
public(package) fun set_struct(dapp_hub: &mut DappHub${p?", "+p:""}, ${t}: ${x(t)}) {
|
|
675
|
+
${l}
|
|
676
|
+
let value_tuple = encode_struct(${t});
|
|
677
|
+
dapp_service::set_record(dapp_hub, dapp_key::new(), get_table_id(), key_tuple, value_tuple);
|
|
678
|
+
}`:"",I=k?` public fun encode(value: ${Object.values(_)[0]}): vector<vector<u8>> {
|
|
679
|
+
let mut value_tuple = vector::empty();
|
|
680
|
+
value_tuple.push_back(${A(Object.values(_)[0])?"to_bytes(&value)":`${e}::${i.find(u=>u.type===Object.values(_)[0])?.module}::encode(value)`});
|
|
681
|
+
value_tuple
|
|
682
|
+
}`:o?` public fun encode(${c.map(u=>`${u}: ${s[u]}`).join(", ")}): vector<vector<u8>> {
|
|
683
|
+
let mut value_tuple = vector::empty();
|
|
684
|
+
${c.map(u=>{let a=s[u],d=!A(a),y=d?i.find(v=>v.type===a):null;return`value_tuple.push_back(${d?`${e}::${y?.module}::encode(${u})`:`to_bytes(&${u})`});`}).join(`
|
|
685
|
+
`)}
|
|
686
|
+
value_tuple
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
public fun encode_struct(${t}: ${x(t)}): vector<vector<u8>> {
|
|
690
|
+
encode(${c.map(u=>`${t}.${u}`).join(", ")})
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
public fun decode(data: vector<u8>): ${x(t)} {
|
|
694
|
+
let mut bsc_type = sui::bcs::new(data);
|
|
695
|
+
${c.map(u=>{let a=s[u],d=!A(a),y=d?i.find(v=>v.type===a):null;return`let ${u} = ${d?`${e}::${y?.module}::decode(&mut bsc_type)`:`sui::bcs::peel_${K(a)}(&mut bsc_type)`};`}).join(`
|
|
696
|
+
`)}
|
|
697
|
+
${x(t)} {
|
|
698
|
+
${c.map(u=>`${u},`).join(`
|
|
699
|
+
`)}
|
|
700
|
+
}
|
|
701
|
+
}`:"";return`${O}
|
|
702
|
+
|
|
703
|
+
${S}
|
|
704
|
+
|
|
705
|
+
${E}
|
|
706
|
+
|
|
707
|
+
${r}
|
|
708
|
+
|
|
709
|
+
${f}
|
|
710
|
+
|
|
711
|
+
${H}
|
|
712
|
+
|
|
713
|
+
${T}
|
|
714
|
+
|
|
715
|
+
${I}`}function x(e){return e.split("_").map((t,s)=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function K(e){if(e.startsWith("vector<")){let t=e.slice(7,-1);return t==="vector<u8>"?"vec_vec_u8":`vec_${K(t)}`}switch(e){case"bool":return"bool";case"u8":return"u8";case"u32":return"u32";case"u64":return"u64";case"u128":return"u128";case"u256":return"u256";case"address":return"address";default:return e}}import j from"node:path";async function Bt(e,t,s){console.log(`
|
|
716
|
+
\u{1F680} Starting Schema Generation Process...`),console.log("\u{1F4CB} Project Configuration:"),console.log(` \u2514\u2500 Name: ${t.name}`),console.log(` \u2514\u2500 Description: ${t.description||"No description provided"}`),console.log(` \u2514\u2500 Network: ${s||"testnet"}`),console.log(e);let n=j.join(e,"src",t.name);w(`${n}`)&&z(`${n}/sources/codegen`),w(`${n}/Move.toml`)||await te(t,e);let o=j.join(n,"sources","codegen","genesis.move");w(o)||await _e(t,o);let i=j.join(n,"sources","codegen","init_test.move");w(i)||await ce(t,i);let b=j.join(n,"sources","codegen","dapp_key.move");w(b)||await re(t,b);let g=j.join(n,"sources","scripts","deploy_hook.move");w(g)||await ue(t,g);let _=j.join(n,"sources","codegen","components");w(_)?await V(t,_):await V(t,_);let m=j.join(n,"sources","codegen","resources");w(m)?await J(t,m):await J(t,m);let c=j.join(n,"sources","codegen","enums");w(c)||await $e(t,c),t.errors&&await ie(t.name,t.errors,e),await ae(t,e),await ne(t,e),console.log(`
|
|
227
717
|
\u2705 Schema Generation Process Complete!
|
|
228
|
-
`)}import{findUp as
|
|
718
|
+
`)}var Oe=e=>{let t=Object.keys(e.components||{}),s=Object.keys(e.resources||{}),n=t.filter(o=>s.includes(o));if(n.length>0)throw new Error(`Duplicate keys found between components and resources: ${n.join(", ")}`)},Ut=e=>(Oe(e),e);import{findUp as Se}from"find-up";import Z from"path";import Ee from"esbuild";var R=class extends Error{name="NotInsideProjectError";message="You are not inside a Dubhe project"};import{rmSync as He}from"fs";import{pathToFileURL as Te}from"url";import Me from"os";var Ke=["dubhe.config.js","dubhe.config.mjs","dubhe.config.ts","dubhe.config.mts"],Q="dubhe.config.example.mjs";async function Yt(e){e=await ye(e);try{return await Ee.build({entryPoints:[e],format:"esm",outfile:Q,platform:"node",bundle:!0,packages:"external"}),e=await ye(Q,!0),(await import(e+`?update=${Date.now()}`)).dubheConfig}finally{He(Q,{force:!0})}}async function ye(e,t){return e===void 0?e=await Fe():Z.isAbsolute(e)||(e=Z.join(process.cwd(),e),e=Z.normalize(e)),t&&Me.platform()==="win32"?Te(e).href:e}async function Fe(){let e=await Se(Ke);if(e===void 0)throw new R;return e}var U=e=>{if(typeof e!="object"||e===null)return e;let t={};for(let s in e)if(e.hasOwnProperty(s)){let n=e[s];typeof n=="object"&&n!==null?Array.isArray(n)?t[s]=ge(n):n.hasOwnProperty("variant")?t[s]={[n.variant]:{}}:n.hasOwnProperty("fields")?t[s]=U(n.fields):t[s]=U(n):t[s]=n}return t},ge=e=>{let t=[];return e.forEach(s=>{typeof s=="object"&&s!==null?Array.isArray(s)?t.push(ge(s)):s.hasOwnProperty("variant")?t.push({[s.variant]:{}}):s.hasOwnProperty("fields")?t.push(U(s.fields)):t.push(U(s)):t.push(s)}),t};var We=(s=>(s.Event="event",s.Schema="schema",s))(We||{});export{We as SubscriptionKind,Ut as defineDapp,$ as formatAndWriteMove,Qe as formatAndWriteTypescript,X as formatMove,Y as formatTypescript,Yt as loadConfig,U as parseData,Ye as posixPath,ye as resolveConfigPath,Bt as schemaGen};
|
|
229
719
|
//# sourceMappingURL=index.js.map
|