@0xobelisk/sui-common 1.2.0-pre.7 → 1.2.0-pre.71

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