@0xobelisk/sui-common 1.2.0-pre.122 → 1.2.0-pre.124

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,11 +1,11 @@
1
- import me from"prettier";import qe from"prettier-plugin-move-js";async function Mt(e,t){let s;t&&(s=await me.resolveConfig(t));try{return me.format(e,{plugins:[qe],parser:"move-parse",printWidth:120,semi:!0,tabWidth:2,useTabs:!1,bracketSpacing:!0,...s})}catch(n){let r;return n instanceof Error?r=n.message:r=n,console.log(`Error during output formatting: ${r}`),e}}import fe from"node:fs/promises";import Ze from"node:path";import be from"debug";var oe=be("dubhe:common"),Je=be("dubhe:common");oe.log=console.debug.bind(console);Je.log=console.error.bind(console);var ie=oe.extend("codegen");ie.log=console.debug.bind(console);async function A(e,t,s){let n=e,r=`// Copyright (c) Obelisk Labs, Inc.
1
+ import be from"prettier";import Je from"prettier-plugin-move-js";async function Ut(e,t){let s;t&&(s=await be.resolveConfig(t));try{return be.format(e,{plugins:[Je],parser:"move-parse",printWidth:120,semi:!0,tabWidth:2,useTabs:!1,bracketSpacing:!0,...s})}catch(n){let r;return n instanceof Error?r=n.message:r=n,console.log(`Error during output formatting: ${r}`),e}}import ye from"node:fs/promises";import Xe from"node:path";import fe from"debug";var ie=fe("dubhe:common"),Ze=fe("dubhe:common");ie.log=console.debug.bind(console);Ze.log=console.error.bind(console);var ae=ie.extend("codegen");ae.log=console.debug.bind(console);async function A(e,t,s){let n=e,r=`// Copyright (c) Obelisk Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  /* Autogenerated file. Do not edit manually. */
5
5
 
6
6
  `,i=`#[test_only]
7
7
  `,d=r+n,l=`#[allow(lint(share_owned))]
8
- `;t.includes(".toml")||t.includes("system")||t.includes("migrate")?d=n:t.includes("init_test")?d=i+n:t.includes("genesis")&&(d=l+n),await fe.mkdir(Ze.dirname(t),{recursive:!0}),await fe.writeFile(t,d),ie(`${s}: ${t}`)}import{existsSync as V}from"fs";import J from"fs";function ae(e){J.existsSync(e)&&(J.readdirSync(e).forEach(t=>{let s=`${e}/${t}`;J.lstatSync(s).isDirectory()?ae(s):J.unlinkSync(s)}),J.rmdirSync(e))}var ye={name:"@0xobelisk/sui-common",version:"1.2.0-pre.122",description:"Common low level logic shared between packages",keywords:["sui","obelisk labs","move","blockchain"],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",author:"team@obelisk.build",type:"module",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"}},types:"./dist/index.d.ts",typesVersions:{"*":{index:["./src/index.ts"]}},scripts:{build:"pnpm run type-check && pnpm run build:js","build:js":"tsup && chmod +x ./dist/index.js",clean:"pnpm run clean:js","clean:js":"rimraf dist",dev:"tsup --watch",format:"prettier --write .","format:check":"prettier --check .",lint:"eslint . --ext .ts",test:"vitest","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:"^10.5.0",path:"^0.12.7",prettier:"^3.1.1","prettier-plugin-move-js":"^0.0.5",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",eslint:"^9.0.0","eslint-config-prettier":"^9.1.0",prettier:"3.3.3",tsup:"^6.7.0",tsx:"^3.12.6",vitest:"^2.1.3"},engines:{node:">=22.0.0"},publishConfig:{access:"public"}};async function he(e,t){console.log(`
8
+ `;t.includes(".toml")||t.includes("system")||t.includes("migrate")?d=n:t.includes("init_test")?d=i+n:t.includes("genesis")&&(d=l+n),await ye.mkdir(Xe.dirname(t),{recursive:!0}),await ye.writeFile(t,d),ae(`${s}: ${t}`)}import{existsSync as V}from"fs";import Z from"fs";function ce(e){Z.existsSync(e)&&(Z.readdirSync(e).forEach(t=>{let s=`${e}/${t}`;Z.lstatSync(s).isDirectory()?ce(s):Z.unlinkSync(s)}),Z.rmdirSync(e))}var he={name:"@0xobelisk/sui-common",version:"1.2.0-pre.124",description:"Common low level logic shared between packages",keywords:["sui","obelisk labs","move","blockchain"],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",author:"team@obelisk.build",type:"module",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"}},types:"./dist/index.d.ts",typesVersions:{"*":{index:["./src/index.ts"]}},scripts:{build:"pnpm run type-check && pnpm run build:js","build:js":"tsup && chmod +x ./dist/index.js",clean:"pnpm run clean:js","clean:js":"rimraf dist",dev:"tsup --watch",format:"prettier --write .","format:check":"prettier --check .",lint:"eslint . --ext .ts",test:"vitest","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:"^10.5.0",path:"^0.12.7",prettier:"^3.1.1","prettier-plugin-move-js":"^0.0.5",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",eslint:"^9.0.0","eslint-config-prettier":"^9.1.0",prettier:"3.3.3",tsup:"^6.7.0",tsx:"^3.12.6",vitest:"^2.1.3"},engines:{node:">=22.0.0"},publishConfig:{access:"public"}};async function ve(e,t){console.log(`
9
9
  \u{1F4C4} Starting Move.toml Generation...`),console.log(` \u2514\u2500 Output path: ${t}/src/${e.name}/Move.toml`);let s=`[package]
10
10
  name = "${e.name}"
11
11
  version = "1.0.0"
@@ -13,13 +13,13 @@ edition = "2024"
13
13
 
14
14
  [dependencies]
15
15
  Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.46.3" }
16
- Dubhe = { git = "https://github.com/0xobelisk/dubhe.git", subdir = "framework/src/dubhe", rev = "v${ye.version}" }
16
+ Dubhe = { git = "https://github.com/0xobelisk/dubhe.git", subdir = "framework/src/dubhe", rev = "v${he.version}" }
17
17
 
18
18
  [addresses]
19
19
  sui = "0x2"
20
20
  ${e.name} = "0x0"
21
21
  `;await A(s,`${t}/src/${e.name}/Move.toml`,"formatAndWriteMove"),console.log(`\u2705 Move.toml Generation Complete
22
- `)}import{existsSync as ve}from"fs";async function ke(e,t,s=1){if(!ve(t)){let n=s===1?`// Settlement mode: USER_PAYS \u2014 users pay transaction fees at settlement time.
22
+ `)}import{existsSync as ke}from"fs";async function Se(e,t,s=1){if(!ke(t)){let n=s===1?`// Settlement mode: USER_PAYS \u2014 users pay transaction fees at settlement time.
23
23
  // The framework admin sets the revenue share via set_dapp_revenue_share.
24
24
  // Initialise any DappStorage-level defaults here (e.g. resource starting values).`:`// Settlement mode: DAPP_SUBSIDIZES \u2014 the DApp pays for user operations.
25
25
  // Recharge the credit pool via dapp_system::recharge_credit before users can write.
@@ -29,22 +29,37 @@ ${e.name} = "0x0"
29
29
  public(package) fun run(_dapp_storage: &mut DappStorage, _ctx: &mut TxContext) {
30
30
  ${n}
31
31
  }
32
- }`;await A(r,t,"formatAndWriteMove")}}async function Se(e,t){if(!ve(`${t}/src/${e.name}/sources/scripts/migrate.move`)){let s=`module ${e.name}::migrate {
32
+ }`;await A(r,t,"formatAndWriteMove")}}async function xe(e,t){if(!ke(`${t}/src/${e.name}/sources/scripts/migrate.move`)){let s=`module ${e.name}::migrate {
33
33
  const ON_CHAIN_VERSION: u32 = 1;
34
34
 
35
35
  public fun on_chain_version(): u32 {
36
36
  ON_CHAIN_VERSION
37
37
  }
38
38
  }
39
- `;await A(s,`${t}/src/${e.name}/sources/scripts/migrate.move`,"formatAndWriteMove")}}async function xe(e,t){let s=`module ${e.name}::dapp_key {
39
+ `;await A(s,`${t}/src/${e.name}/sources/scripts/migrate.move`,"formatAndWriteMove")}}async function Ce(e,t){let s=`module ${e.name}::dapp_key {
40
40
  use std::type_name;
41
41
  use sui::address;
42
42
  use std::ascii::String;
43
43
 
44
- /// Authorization token for the app.
44
+ /// DappKey \u2014 package-level authorization token for this DApp.
45
+ ///
46
+ /// SECURITY: \`new()\` is intentionally \`public(package)\`.
47
+ /// Only code compiled into this package can construct a DappKey instance.
48
+ /// All framework write functions (\`set_record\`, \`set_field\`,
49
+ /// \`take_record\`, \`create_user_storage\`, \u2026) require \`_auth: DappKey\`
50
+ /// as proof that the call originated from inside this package \u2014 an
51
+ /// external PTB cannot fabricate that proof.
52
+ ///
53
+ /// NEVER change \`new()\` to \`public\`, and never accept a DappKey
54
+ /// value as a parameter from an external caller. Either mistake removes
55
+ /// every package-level access guard, allowing any PTB to write arbitrary
56
+ /// user data or register UserStorages without going through the DApp's
57
+ /// own entry functions.
45
58
 
46
59
  public struct DappKey has copy, drop {}
47
60
 
61
+ /// Constructs an authorization token. Callable only from within this package.
62
+ /// Pass the result as \`_auth\` to any framework function that requires it.
48
63
  public(package) fun new(): DappKey {
49
64
  DappKey {}
50
65
  }
@@ -62,14 +77,14 @@ ${e.name} = "0x0"
62
77
  type_name::with_defining_ids<DappKey1>() == type_name::with_defining_ids<DappKey2>()
63
78
  }
64
79
  }
65
- `;await A(s,t,"formatAndWriteMove")}import{existsSync as Ce}from"fs";import we from"node:fs/promises";async function De(e,t){Ce(`${t}/src/${e.name}/sources/systems`)||await we.mkdir(`${t}/src/${e.name}/sources/systems`,{recursive:!0}),Ce(`${t}/src/${e.name}/sources/tests`)||await we.mkdir(`${t}/src/${e.name}/sources/tests`,{recursive:!0})}function Qe(e){return"E"+e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function Ne(e){return typeof e=="string"?e:e.message}async function je(e,t,s){console.log(`
66
- \u{1F4E6} Starting Error Generation...`);let n=Object.entries(t).map(([i,d])=>{let l=Qe(i),u=Ne(d);return console.log(` \u2514\u2500 ${i}: ${u}`),[" #[error]",` const ${l}: vector<u8> = b"${u}";`,` public fun ${i}(condition: bool) { assert!(condition, ${l}) }`].join(`
80
+ `;await A(s,t,"formatAndWriteMove")}import{existsSync as we}from"fs";import De from"node:fs/promises";async function je(e,t){we(`${t}/src/${e.name}/sources/systems`)||await De.mkdir(`${t}/src/${e.name}/sources/systems`,{recursive:!0}),we(`${t}/src/${e.name}/sources/tests`)||await De.mkdir(`${t}/src/${e.name}/sources/tests`,{recursive:!0})}function Ne(e){return"E"+e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}function et(e){return typeof e=="string"?e:e.message}async function Te(e,t,s){console.log(`
81
+ \u{1F4E6} Starting Error Generation...`);let n=Object.entries(t).map(([i,d])=>{let l=Ne(i),u=et(d);return console.log(` \u2514\u2500 ${i}: ${u}`),[" #[error]",` const ${l}: vector<u8> = b"${u}";`,` public fun ${i}(condition: bool) { assert!(condition, ${l}) }`].join(`
67
82
  `)}).join(`
68
83
 
69
84
  `),r=`module ${e}::error {
70
85
  ${n}
71
86
  }
72
- `;await A(r,`${s}/src/${e}/sources/codegen/error.move`,"formatAndWriteMove")}async function Te(e,t){let n=e.name==="dubhe"?"":`
87
+ `;await A(r,`${s}/src/${e}/sources/codegen/error.move`,"formatAndWriteMove")}async function Ae(e,t){let n=e.name==="dubhe"?"":`
73
88
  /// Create a DappStorage for this DApp without sharing it.
74
89
  /// Suitable for unit tests that exercise global-resource functions.
75
90
  public fun create_dapp_storage_for_testing(ctx: &mut TxContext): dubhe::dapp_service::DappStorage {
@@ -91,7 +106,7 @@ module ${e.name}::init_test {
91
106
  }
92
107
  ${n}
93
108
  }
94
- `;await A(r,t,"formatAndWriteMove")}async function Ae(e,t,s=1){let r=e.name==="dubhe"?`module ${e.name}::genesis {
109
+ `;await A(r,t,"formatAndWriteMove")}async function Ee(e,t,s=1){let r=e.name==="dubhe"?`module ${e.name}::genesis {
95
110
  use dubhe::dapp_service::DappHub;
96
111
 
97
112
  // The framework genesis initialises the DappHub state via deploy_hook.
@@ -141,8 +156,8 @@ ${n}
141
156
  // ==========================================
142
157
  }
143
158
  }
144
- `;await A(r,t,"formatAndWriteMove")}function Ee(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}async function Oe(e,t){if(console.log(`
145
- \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 r=[...n].sort((d,l)=>d.localeCompare(l)),i=et(e.name,s,r);await A(i,`${t}/${Ee(s)}.move`,"formatAndWriteMove")}}function et(e,t,s){let n=s.map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(",");return`module ${e}::${Ee(t)} {
159
+ `;await A(r,t,"formatAndWriteMove")}function Oe(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}async function Fe(e,t){if(console.log(`
160
+ \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 r=[...n].sort((d,l)=>d.localeCompare(l)),i=tt(e.name,s,r);await A(i,`${t}/${Oe(s)}.move`,"formatAndWriteMove")}}function tt(e,t,s){let n=s.map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(",");return`module ${e}::${Oe(t)} {
146
161
  use sui::bcs::{BCS, to_bytes, peel_enum_tag};
147
162
 
148
163
  public enum ${t} has copy, drop, store {
@@ -166,38 +181,38 @@ ${s.map((r,i)=>` ${i} => ${t}::${r.charAt(0).toUpperCase()+r.slice(1)
166
181
  _ => abort,
167
182
  }
168
183
  }
169
- }`}function Ke(e){return e==="dubhe"?"dapp_service":"dapp_system"}function L(e){return e!=="dubhe"?"dapp_key::new(), ":""}function B(e,t){return""}function H(e,t){return""}function Ie(e){return e?"DappStorage":"UserStorage"}function Me(e){return e?"dapp_storage":"user_storage"}function ue(e,t){let s=Ke(e);return t?{set_record:`${s}::set_global_record`,set_field:`${s}::set_global_field`,get_field:`${s}::get_global_field`,has_record:`${s}::has_global_record`,ensure_has:`${s}::ensure_has_global_record`,ensure_has_not:`${s}::ensure_has_not_global_record`,delete_record:`${s}::delete_global_record`,delete_field:`${s}::delete_global_field`}:{set_record:`${s}::set_record`,set_field:`${s}::set_field`,get_field:`${s}::get_field`,has_record:`${s}::has_record`,ensure_has:`${s}::ensure_has_record`,ensure_has_not:`${s}::ensure_has_not_record`,delete_record:`${s}::delete_record`,delete_field:`${s}::delete_field`}}async function Ue(e,t){if(console.log(`
170
- \u{1F4E6} Starting Resources Generation...`),!!e.resources)for(let[s,n]of Object.entries(e.resources)){if(console.log(` \u2514\u2500 ${s}: ${JSON.stringify(n)}`),typeof n=="string"){let l=tt(e.name,s,n,"Onchain");await A(l,`${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 r=st(e.name,s,n),i=nt(e,s,n),d=i?r.replace(/^}$/m,`
184
+ }`}function Ie(e){return e==="dubhe"?"dapp_service":"dapp_system"}function R(e){return e!=="dubhe"?"dapp_key::new(), ":""}function B(e,t){return""}function H(e,t){return""}function Me(e){return e?"DappStorage":"UserStorage"}function Ue(e){return e?"dapp_storage":"user_storage"}function pe(e,t){let s=Ie(e);return t?{set_record:`${s}::set_global_record`,set_field:`${s}::set_global_field`,get_field:`${s}::get_global_field`,has_record:`${s}::has_global_record`,ensure_has:`${s}::ensure_has_global_record`,ensure_has_not:`${s}::ensure_has_not_global_record`,delete_record:`${s}::delete_global_record`,delete_field:`${s}::delete_global_field`}:{set_record:`${s}::set_record`,set_field:`${s}::set_field`,get_field:`${s}::get_field`,has_record:`${s}::has_record`,ensure_has:`${s}::ensure_has_record`,ensure_has_not:`${s}::ensure_has_not_record`,delete_record:`${s}::delete_record`,delete_field:`${s}::delete_field`}}async function Pe(e,t){if(console.log(`
185
+ \u{1F4E6} Starting Resources Generation...`),!!e.resources)for(let[s,n]of Object.entries(e.resources)){if(console.log(` \u2514\u2500 ${s}: ${JSON.stringify(n)}`),typeof n=="string"){let l=st(e.name,s,n,"Onchain");await A(l,`${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 r=rt(e.name,s,n),i=ot(e,s,n),d=i?r.replace(/^}$/m,`
171
186
  ${i}
172
- }`):r;await A(d,`${t}/${s}.move`,"formatAndWriteMove")}}function tt(e,t,s,n="Onchain"){let r=!z(s),i=r?`${ce(s)}`:"",d=n==="Offchain",l=!1,u=Ie(l),g=Me(l),$=ue(e,l),f=d?"":`
173
- public fun has(${g}: &${u}): bool {
187
+ }`):r;await A(d,`${t}/${s}.move`,"formatAndWriteMove")}}function st(e,t,s,n="Onchain"){let r=!z(s),i=r?`${ue(s)}`:"",d=n==="Offchain",l=!1,u=Me(l),$=Ue(l),g=pe(e,l),f=d?"":`
188
+ public fun has(${$}: &${u}): bool {
174
189
  let mut key_tuple = vector::empty();
175
190
  key_tuple.push_back(TABLE_NAME);
176
- ${$.has_record}<DappKey>(${g}, key_tuple)
191
+ ${g.has_record}<DappKey>(${$}, key_tuple)
177
192
  }
178
193
 
179
- public fun ensure_has(${g}: &${u}) {
194
+ public fun ensure_has(${$}: &${u}) {
180
195
  let mut key_tuple = vector::empty();
181
196
  key_tuple.push_back(TABLE_NAME);
182
- ${$.ensure_has}<DappKey>(${g}, key_tuple)
197
+ ${g.ensure_has}<DappKey>(${$}, key_tuple)
183
198
  }
184
199
 
185
- public fun ensure_has_not(${g}: &${u}) {
200
+ public fun ensure_has_not(${$}: &${u}) {
186
201
  let mut key_tuple = vector::empty();
187
202
  key_tuple.push_back(TABLE_NAME);
188
- ${$.ensure_has_not}<DappKey>(${g}, key_tuple)
203
+ ${g.ensure_has_not}<DappKey>(${$}, key_tuple)
189
204
  }
190
205
 
191
- public(package) fun delete(${g}: &mut ${u}, ctx: &TxContext) {
206
+ public(package) fun delete(${$}: &mut ${u}, ctx: &TxContext) {
192
207
  let mut key_tuple = vector::empty();
193
208
  key_tuple.push_back(TABLE_NAME);
194
- ${$.delete_record}<DappKey>(${L(e)}${g}, key_tuple, vector[b"value"], ctx);
209
+ ${g.delete_record}<DappKey>(${R(e)}${$}, key_tuple, vector[b"value"], ctx);
195
210
  }
196
211
 
197
- public fun get(${g}: &${u}): (${s==="string"||s==="String"?"String":s}) {
212
+ public fun get(${$}: &${u}): (${s==="string"||s==="String"?"String":s}) {
198
213
  let mut key_tuple = vector::empty();
199
214
  key_tuple.push_back(TABLE_NAME);
200
- let value_raw = ${$.get_field}<DappKey>(${g}, key_tuple, b"value");
215
+ let value_raw = ${g.get_field}<DappKey>(${$}, key_tuple, b"value");
201
216
  let mut value_bcs = sui::bcs::new(value_raw);
202
217
  let value = ${G(e,s,"value_bcs",r?[{type:s,module:i}]:[])};
203
218
  (value)
@@ -216,12 +231,12 @@ ${b?` use ${e}::${i}::{${s}};`:""}
216
231
  const OFFCHAIN: bool = ${n==="Offchain"};
217
232
 
218
233
  ${f}
219
- public(package) fun set(${H(e,l)}${g}: &mut ${u}, value: ${s==="string"||s==="String"?"String":s}, ctx: &mut TxContext) {
234
+ public(package) fun set(${H(e,l)}${$}: &mut ${u}, value: ${s==="string"||s==="String"?"String":s}, ctx: &mut TxContext) {
220
235
  let mut key_tuple = vector::empty();
221
236
  key_tuple.push_back(TABLE_NAME);
222
237
  let field_names = vector[b"value"];
223
238
  let value_tuple = encode(value);
224
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
239
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN, ctx);
225
240
  }
226
241
 
227
242
  public fun encode(value: ${s==="string"||s==="String"?"String":s}): vector<vector<u8>> {
@@ -229,13 +244,14 @@ ${f}
229
244
  value_tuple.push_back(${s==="string"||s==="String"?"to_bytes(&into_bytes(value))":s==="vector<String>"?"to_bytes(&value)":r?`${e}::${i}::encode(value)`:"to_bytes(&value)"});
230
245
  value_tuple
231
246
  }
232
- }`}function ce(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}function st(e,t,s){let n=s.fields,r=s.keys||[],i=s.offchain||!1,d=s.global||!1,l=i?"Offchain":"Onchain",u=d,g=Ie(u),$=Me(u),f=ue(e,u),o=Object.keys(n).every(m=>r.includes(m)),b=Object.entries(n).filter(([m])=>!r.includes(m)),p=b.map(([m])=>m),h=p.length===1,c=b.filter(([m,O])=>!z(O)&&O!=="string"&&O!=="String").map(([m,O])=>({type:O,module:`${ce(O)}`})).filter((m,O,re)=>re.findIndex(ne=>ne.type===m.type)===O),_=Object.entries(n).filter(([m,O])=>!z(O)&&O!=="string"&&O!=="String").map(([m,O])=>({type:O,module:`${ce(O)}`})).filter((m,O,re)=>re.findIndex(ne=>ne.type===m.type)===O),v=rt(e,t,n,r,!o&&!h,c,l,u,g,$,f),k=u?"use dubhe::dapp_service::DappStorage;":s.listable?"use dubhe::dapp_service::{UserStorage, DappStorage};":"use dubhe::dapp_service::UserStorage;",j=Object.values(n),D=p.filter(m=>{let O=n[m];return z(O)||O==="string"||O==="String"}).length>0||r.length>0?`
233
- use sui::bcs::{to_bytes};`:"",E=j.some(m=>m==="string"||m==="String"),x=j.some(m=>m==="vector<String>"),C=p.some(m=>{let O=n[m];return O==="string"||O==="String"}),I=C?`
234
- use std::ascii::{String, into_bytes};`:E||x?`
235
- use std::ascii::String;`:"",P=C?`
236
- use std::ascii::{string, String, into_bytes};`:E||x?`
237
- use std::ascii::String;`:"";if(o||h)return`module ${e}::${t} {${D}${I}
238
- ${k}
247
+ }`}function ue(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`).replace(/^_/,"")}function rt(e,t,s){let n=s.fields,r=s.keys||[],i=s.offchain||!1,d=s.global||!1,l=i?"Offchain":"Onchain",u=d,$=Me(u),g=Ue(u),f=pe(e,u),o=Object.keys(n).every(m=>r.includes(m)),b=Object.entries(n).filter(([m])=>!r.includes(m)),p=b.map(([m])=>m),h=p.length===1,c=b.filter(([m,O])=>!z(O)&&O!=="string"&&O!=="String").map(([m,O])=>({type:O,module:`${ue(O)}`})).filter((m,O,ne)=>ne.findIndex(oe=>oe.type===m.type)===O),_=Object.entries(n).filter(([m,O])=>!z(O)&&O!=="string"&&O!=="String").map(([m,O])=>({type:O,module:`${ue(O)}`})).filter((m,O,ne)=>ne.findIndex(oe=>oe.type===m.type)===O),v=nt(e,t,n,r,!o&&!h,c,l,u,$,g,f),k=u?"use dubhe::dapp_service::DappStorage;":s.listable?"use dubhe::dapp_service::{UserStorage, DappStorage};":"use dubhe::dapp_service::UserStorage;",D=s.reactive?`
248
+ use dubhe::dapp_service::ScenePermit;`:"",w=Object.values(n),E=p.filter(m=>{let O=n[m];return z(O)||O==="string"||O==="String"}).length>0||r.length>0?`
249
+ use sui::bcs::{to_bytes};`:"",x=w.some(m=>m==="string"||m==="String"),C=w.some(m=>m==="vector<String>"),K=p.some(m=>{let O=n[m];return O==="string"||O==="String"}),P=K?`
250
+ use std::ascii::{String, into_bytes};`:x||C?`
251
+ use std::ascii::String;`:"",a=K?`
252
+ use std::ascii::{string, String, into_bytes};`:x||C?`
253
+ use std::ascii::String;`:"";if(o||h)return`module ${e}::${t} {${E}${P}
254
+ ${k}${D}
239
255
  use dubhe::dapp_system;
240
256
  use ${e}::dapp_key;
241
257
  use ${e}::dapp_key::DappKey;
@@ -246,18 +262,18 @@ ${_.length>0?_.map(m=>` use ${e}::${m.module}::{${m.type}};`).join(`
246
262
  const OFFCHAIN: bool = ${i};
247
263
 
248
264
  ${v}
249
- }`;let a=p.map(m=>` ${m}: ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]},`).join(`
250
- `),y=p.map(m=>`${m}: ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]}`).join(", "),S=p.map(m=>` ${m},`).join(`
251
- `),T=p.map(m=>` public fun ${m}(self: &${K(t)}): ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]} {
265
+ }`;let y=p.map(m=>` ${m}: ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]},`).join(`
266
+ `),S=p.map(m=>`${m}: ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]}`).join(", "),T=p.map(m=>` ${m},`).join(`
267
+ `),M=p.map(m=>` public fun ${m}(self: &${I(t)}): ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]} {
252
268
  self.${m}
253
269
  }`).join(`
254
270
 
255
- `),M=p.map(m=>` public fun update_${m}(self: &mut ${K(t)}, ${m}: ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]}) {
271
+ `),J=p.map(m=>` public fun update_${m}(self: &mut ${I(t)}, ${m}: ${n[m]==="string"||n[m]==="String"?"String":n[m]==="vector<String>"?"vector<String>":n[m]}) {
256
272
  self.${m} = ${m}
257
273
  }`).join(`
258
274
 
259
- `);return`module ${e}::${t} {${D}${P}
260
- ${k}
275
+ `);return`module ${e}::${t} {${E}${a}
276
+ ${k}${D}
261
277
  use dubhe::dapp_system;
262
278
  use ${e}::dapp_key;
263
279
  use ${e}::dapp_key::DappKey;
@@ -267,115 +283,115 @@ ${_.length>0?_.map(m=>` use ${e}::${m.module}::{${m.type}};`).join(`
267
283
  const TABLE_NAME: vector<u8> = b"${t}";
268
284
  const OFFCHAIN: bool = ${i};
269
285
 
270
- public struct ${K(t)} has copy, drop, store {
271
- ${a}
286
+ public struct ${I(t)} has copy, drop, store {
287
+ ${y}
272
288
  }
273
289
 
274
- public fun new(${y}): ${K(t)} {
275
- ${K(t)} {
276
- ${S}
290
+ public fun new(${S}): ${I(t)} {
291
+ ${I(t)} {
292
+ ${T}
277
293
  }
278
294
  }
279
295
 
280
- ${T}
281
-
282
296
  ${M}
283
297
 
298
+ ${J}
299
+
284
300
  ${v}
285
- }`}function z(e){return["address","bool","u8","u16","u32","u64","u128","u256","string","String","vector<address>","vector<bool>","vector<u8>","vector<u16>","vector<vector<u8>>","vector<u32>","vector<u64>","vector<u128>","vector<u256>","vector<String>"].includes(e)}function G(e,t,s,n){let r=!z(t),i=r?n.find(d=>d.type===t):null;return t==="string"||t==="String"?`dubhe::bcs::peel_string(&mut ${s})`:t==="vector<String>"?`dubhe::bcs::peel_vec_string(&mut ${s})`:r&&i?`${e}::${i.module}::decode(&mut ${s})`:`sui::bcs::peel_${pe(t)}(&mut ${s})`}function Fe(e,t,s,n,r,i,d){let l=`${n}_raw`,u=`${n}_bcs`;return[`let ${l} = ${t.get_field}<DappKey>(${s}, key_tuple, b"${n}");`,`let mut ${u} = sui::bcs::new(${l});`,`let ${n} = ${G(e,r,u,d)};`].join(`
286
- `)}function rt(e,t,s,n,r=!0,i=[],d="Onchain",l=!1,u="UserStorage",g="user_storage",$=ue("dubhe",!1)){let f=Object.entries(s).filter(([a])=>!n.includes(a)).reduce((a,[y,S])=>({...a,[y]:S}),{}),o=Object.keys(f),b=Object.keys(s).every(a=>n.includes(a)),p=o.length===1,h=d==="Offchain",c=n.length>0?n.map(a=>`${a}: ${s[a]}`).join(", "):"",_=n.length>0?`let mut key_tuple = vector::empty();
301
+ }`}function z(e){return["address","bool","u8","u16","u32","u64","u128","u256","string","String","vector<address>","vector<bool>","vector<u8>","vector<u16>","vector<vector<u8>>","vector<u32>","vector<u64>","vector<u128>","vector<u256>","vector<String>"].includes(e)}function G(e,t,s,n){let r=!z(t),i=r?n.find(d=>d.type===t):null;return t==="string"||t==="String"?`dubhe::bcs::peel_string(&mut ${s})`:t==="vector<String>"?`dubhe::bcs::peel_vec_string(&mut ${s})`:r&&i?`${e}::${i.module}::decode(&mut ${s})`:`sui::bcs::peel_${de(t)}(&mut ${s})`}function Ke(e,t,s,n,r,i,d){let l=`${n}_raw`,u=`${n}_bcs`;return[`let ${l} = ${t.get_field}<DappKey>(${s}, key_tuple, b"${n}");`,`let mut ${u} = sui::bcs::new(${l});`,`let ${n} = ${G(e,r,u,d)};`].join(`
302
+ `)}function nt(e,t,s,n,r=!0,i=[],d="Onchain",l=!1,u="UserStorage",$="user_storage",g=pe("dubhe",!1)){let f=Object.entries(s).filter(([a])=>!n.includes(a)).reduce((a,[y,S])=>({...a,[y]:S}),{}),o=Object.keys(f),b=Object.keys(s).every(a=>n.includes(a)),p=o.length===1,h=d==="Offchain",c=n.length>0?n.map(a=>`${a}: ${s[a]}`).join(", "):"",_=n.length>0?`let mut key_tuple = vector::empty();
287
303
  key_tuple.push_back(TABLE_NAME);
288
304
  ${n.map(a=>`key_tuple.push_back(to_bytes(&${a}));`).join(`
289
305
  `)}`:`let mut key_tuple = vector::empty();
290
- key_tuple.push_back(TABLE_NAME);`,v=l?"":", ctx: &mut TxContext",k=l?"":", ctx",j=h?"":` public fun has(${g}: &${u}${c?", ":""}${c}): bool {
306
+ key_tuple.push_back(TABLE_NAME);`,v=l?"":", ctx: &mut TxContext",k=l?"":", ctx",D=h?"":` public fun has(${$}: &${u}${c?", ":""}${c}): bool {
291
307
  ${_}
292
- ${$.has_record}<DappKey>(${g}, key_tuple)
308
+ ${g.has_record}<DappKey>(${$}, key_tuple)
293
309
  }
294
310
 
295
- public fun ensure_has(${g}: &${u}${c?", ":""}${c}) {
311
+ public fun ensure_has(${$}: &${u}${c?", ":""}${c}) {
296
312
  ${_}
297
- ${$.ensure_has}<DappKey>(${g}, key_tuple)
313
+ ${g.ensure_has}<DappKey>(${$}, key_tuple)
298
314
  }
299
315
 
300
- public fun ensure_has_not(${g}: &${u}${c?", ":""}${c}) {
316
+ public fun ensure_has_not(${$}: &${u}${c?", ":""}${c}) {
301
317
  ${_}
302
- ${$.ensure_has_not}<DappKey>(${g}, key_tuple)
318
+ ${g.ensure_has_not}<DappKey>(${$}, key_tuple)
303
319
  }
304
- `,w=`vector[${o.map(a=>`b"${a}"`).join(", ")}]`,F=h?"":` public(package) fun delete(${g}: &mut ${u}${c?", ":""}${c}${l?"":", ctx: &TxContext"}) {
320
+ `,w=`vector[${o.map(a=>`b"${a}"`).join(", ")}]`,F=h?"":` public(package) fun delete(${$}: &mut ${u}${c?", ":""}${c}${l?"":", ctx: &TxContext"}) {
305
321
  ${_}
306
- ${$.delete_record}<DappKey>(${L(e)}${g}, key_tuple, ${w}${l?"":", ctx"});
307
- }`,D=!p&&!h?o.map(a=>{let y=s[a],S=!z(y),T=S?i.find(M=>M.type===y):null;return` public fun get_${a}(${g}: &${u}${c?", ":""}${c}): ${y==="string"||y==="String"?"String":y==="vector<String>"?"vector<String>":y} {
322
+ ${g.delete_record}<DappKey>(${R(e)}${$}, key_tuple, ${w}${l?"":", ctx"});
323
+ }`,j=!p&&!h?o.map(a=>{let y=s[a],S=!z(y),T=S?i.find(M=>M.type===y):null;return` public fun get_${a}(${$}: &${u}${c?", ":""}${c}): ${y==="string"||y==="String"?"String":y==="vector<String>"?"vector<String>":y} {
308
324
  ${_}
309
- let ${a}_raw = ${$.get_field}<DappKey>(${g}, key_tuple, b"${a}");
325
+ let ${a}_raw = ${g.get_field}<DappKey>(${$}, key_tuple, b"${a}");
310
326
  let mut ${a}_bcs = sui::bcs::new(${a}_raw);
311
327
  let ${a} = ${G(e,y,`${a}_bcs`,i)};
312
328
  ${a}
313
329
  }
314
330
 
315
- public(package) fun set_${a}(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, ${a}: ${y==="string"||y==="String"?"String":y==="vector<String>"?"vector<String>":y}${v}) {
331
+ public(package) fun set_${a}(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, ${a}: ${y==="string"||y==="String"?"String":y==="vector<String>"?"vector<String>":y}${v}) {
316
332
  ${_}
317
333
  let value = ${y==="string"||y==="String"?`to_bytes(&into_bytes(${a}))`:y==="vector<String>"?`to_bytes(&${a})`:S?`${e}::${T?.module}::encode(${a})`:`to_bytes(&${a})`};
318
- ${$.set_field}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, b"${a}", value${k});
334
+ ${g.set_field}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, b"${a}", value${k});
319
335
  }`}).join(`
320
336
 
321
- `):"",E=`vector[${o.map(a=>`b"${a}"`).join(", ")}]`,x=b?` public(package) fun set(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}${v}) {
337
+ `):"",E=`vector[${o.map(a=>`b"${a}"`).join(", ")}]`,x=b?` public(package) fun set(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}${v}) {
322
338
  ${_}
323
339
  let field_names: vector<vector<u8>> = vector[];
324
340
  let value_tuple: vector<vector<u8>> = vector[];
325
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
326
- }`:p?h?` public(package) fun set(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, value: ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]}${v}) {
341
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
342
+ }`:p?h?` public(package) fun set(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, value: ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]}${v}) {
327
343
  ${_}
328
344
  let field_names = vector[b"${o[0]}"];
329
345
  let value_tuple = encode(value);
330
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
331
- }`:` public fun get(${g}: &${u}${c?", ":""}${c}): ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]} {
346
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
347
+ }`:` public fun get(${$}: &${u}${c?", ":""}${c}): ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]} {
332
348
  ${_}
333
- let ${o[0]}_raw = ${$.get_field}<DappKey>(${g}, key_tuple, b"${o[0]}");
349
+ let ${o[0]}_raw = ${g.get_field}<DappKey>(${$}, key_tuple, b"${o[0]}");
334
350
  let mut ${o[0]}_bcs = sui::bcs::new(${o[0]}_raw);
335
351
  let value = ${G(e,Object.values(f)[0],`${o[0]}_bcs`,i)};
336
352
  value
337
353
  }
338
354
 
339
- public(package) fun set(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, value: ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]}${v}) {
355
+ public(package) fun set(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, value: ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]}${v}) {
340
356
  ${_}
341
357
  let field_names = vector[b"${o[0]}"];
342
358
  let value_tuple = encode(value);
343
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
344
- }`:h?` public(package) fun set(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, ${o.map(a=>`${a}: ${s[a]==="string"||s[a]==="String"?"String":s[a]}`).join(", ")}${v}) {
359
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
360
+ }`:h?` public(package) fun set(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, ${o.map(a=>`${a}: ${s[a]==="string"||s[a]==="String"?"String":s[a]}`).join(", ")}${v}) {
345
361
  ${_}
346
362
  let field_names = ${E};
347
363
  let value_tuple = encode(${o.join(", ")});
348
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
349
- }`:` public fun get(${g}: &${u}${c?", ":""}${c}): (${Object.values(f).map(a=>a==="string"||a==="String"?"String":a).join(", ")}) {
364
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
365
+ }`:` public fun get(${$}: &${u}${c?", ":""}${c}): (${Object.values(f).map(a=>a==="string"||a==="String"?"String":a).join(", ")}) {
350
366
  ${_}
351
- ${o.map((a,y)=>Fe(e,$,g,a,s[a],y,i)).join(`
367
+ ${o.map((a,y)=>Ke(e,g,$,a,s[a],y,i)).join(`
352
368
  `)}
353
369
  (${o.join(", ")})
354
370
  }
355
371
 
356
- public(package) fun set(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, ${o.map(a=>`${a}: ${s[a]==="string"||s[a]==="String"?"String":s[a]}`).join(", ")}${v}) {
372
+ public(package) fun set(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, ${o.map(a=>`${a}: ${s[a]==="string"||s[a]==="String"?"String":s[a]}`).join(", ")}${v}) {
357
373
  ${_}
358
374
  let field_names = ${E};
359
375
  let value_tuple = encode(${o.join(", ")});
360
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
361
- }`,C=r?h?` public(package) fun set_struct(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, ${t}: ${K(t)}${v}) {
376
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
377
+ }`,C=r?h?` public(package) fun set_struct(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, ${t}: ${I(t)}${v}) {
362
378
  ${_}
363
379
  let field_names = ${E};
364
380
  let value_tuple = encode_struct(${t});
365
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
366
- }`:` public fun get_struct(${g}: &${u}${c?", ":""}${c}): ${K(t)} {
381
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
382
+ }`:` public fun get_struct(${$}: &${u}${c?", ":""}${c}): ${I(t)} {
367
383
  ${_}
368
- ${o.map((a,y)=>Fe(e,$,g,a,s[a],y,i)).join(`
384
+ ${o.map((a,y)=>Ke(e,g,$,a,s[a],y,i)).join(`
369
385
  `)}
370
- ${K(t)} { ${o.join(", ")} }
386
+ ${I(t)} { ${o.join(", ")} }
371
387
  }
372
388
 
373
- public(package) fun set_struct(${H(e,l)}${g}: &mut ${u}${c?", ":""}${c}, ${t}: ${K(t)}${v}) {
389
+ public(package) fun set_struct(${H(e,l)}${$}: &mut ${u}${c?", ":""}${c}, ${t}: ${I(t)}${v}) {
374
390
  ${_}
375
391
  let field_names = ${E};
376
392
  let value_tuple = encode_struct(${t});
377
- ${$.set_record}<DappKey>(${L(e)}${B(e,l)}${g}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
378
- }`:"",I=p?` public fun encode(value: ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]}): vector<vector<u8>> {
393
+ ${g.set_record}<DappKey>(${R(e)}${B(e,l)}${$}, key_tuple, field_names, value_tuple, OFFCHAIN${k});
394
+ }`:"",K=p?` public fun encode(value: ${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"String":Object.values(f)[0]}): vector<vector<u8>> {
379
395
  let mut value_tuple = vector::empty();
380
396
  value_tuple.push_back(${Object.values(f)[0]==="string"||Object.values(f)[0]==="String"?"to_bytes(&into_bytes(value))":Object.values(f)[0]==="vector<String>"||z(Object.values(f)[0])?"to_bytes(&value)":`${e}::${i.find(a=>a.type===Object.values(f)[0])?.module}::encode(value)`});
381
397
  value_tuple
@@ -386,7 +402,7 @@ ${v}
386
402
  value_tuple
387
403
  }
388
404
 
389
- public fun encode_struct(${t}: ${K(t)}): vector<vector<u8>> {
405
+ public fun encode_struct(${t}: ${I(t)}): vector<vector<u8>> {
390
406
  encode(${o.map(a=>`${t}.${a}`).join(", ")})
391
407
  }`:` public fun encode(${o.map(a=>`${a}: ${s[a]==="string"||s[a]==="String"?"String":s[a]}`).join(", ")}): vector<vector<u8>> {
392
408
  let mut value_tuple = vector::empty();
@@ -395,21 +411,21 @@ ${v}
395
411
  value_tuple
396
412
  }
397
413
 
398
- public fun encode_struct(${t}: ${K(t)}): vector<vector<u8>> {
414
+ public fun encode_struct(${t}: ${I(t)}): vector<vector<u8>> {
399
415
  encode(${o.map(a=>`${t}.${a}`).join(", ")})
400
416
  }
401
417
 
402
- public fun decode(data: vector<u8>): ${K(t)} {
418
+ public fun decode(data: vector<u8>): ${I(t)} {
403
419
  let mut bcs_type = sui::bcs::new(data);
404
- ${o.map(a=>{let y=s[a],S=!z(y),T=S?i.find(M=>M.type===y):null;return`let ${a} = ${y==="string"||y==="String"?"string(sui::bcs::peel_vec_u8(&mut bcs_type))":y==="vector<String>"?"dubhe::bcs::peel_vec_string(&mut bcs_type)":S?`${e}::${T?.module}::decode(&mut bcs_type)`:`sui::bcs::peel_${pe(y)}(&mut bcs_type)`};`}).join(`
420
+ ${o.map(a=>{let y=s[a],S=!z(y),T=S?i.find(M=>M.type===y):null;return`let ${a} = ${y==="string"||y==="String"?"string(sui::bcs::peel_vec_u8(&mut bcs_type))":y==="vector<String>"?"dubhe::bcs::peel_vec_string(&mut bcs_type)":S?`${e}::${T?.module}::decode(&mut bcs_type)`:`sui::bcs::peel_${de(y)}(&mut bcs_type)`};`}).join(`
405
421
  `)}
406
- ${K(t)} {
422
+ ${I(t)} {
407
423
  ${o.map(a=>`${a},`).join(`
408
424
  `)}
409
425
  }
410
- }`:"";return[j,F,D,x,C,I].filter(a=>a.trim().length>0).join(`
426
+ }`:"";return[D,F,j,x,C,K].filter(a=>a.trim().length>0).join(`
411
427
 
412
- `)}function K(e){return e.split("_").map((t,s)=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function pe(e){if(e.startsWith("vector<")){let t=e.slice(7,-1);return t==="vector<u8>"?"vec_vec_u8":t==="String"?"vec_string":`vec_${pe(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}}function nt(e,t,s){let n=[],r=e.name,i=Ke(r),d=L(r),l=s.fields,u=s.keys??[],g=Object.entries(l).filter(([o])=>!u.includes(o)),$=g.map(([o])=>o),f=u.length>0?u.map(o=>`${o}: ${l[o]}`).join(", "):"";if(s.fungible&&$.length===1){let[o,b]=g[0];n.push(`
428
+ `)}function I(e){return e.split("_").map((t,s)=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function de(e){if(e.startsWith("vector<")){let t=e.slice(7,-1);return t==="vector<u8>"?"vec_vec_u8":t==="String"?"vec_string":`vec_${de(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}}function ot(e,t,s){let n=[],r=e.name,i=Ie(r),d=R(r),l=s.fields,u=s.keys??[],$=Object.entries(l).filter(([o])=>!u.includes(o)),g=$.map(([o])=>o),f=u.length>0?u.map(o=>`${o}: ${l[o]}`).join(", "):"";if(s.fungible&&g.length===1){let[o,b]=$[0];n.push(`
413
429
  // \u2500\u2500\u2500 fungible add / sub \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
414
430
  #[error]
415
431
  const EInsufficientAmount: vector<u8> = b"Insufficient amount";
@@ -423,7 +439,7 @@ ${v}
423
439
  let current = get(user_storage);
424
440
  assert!(current >= amount, EInsufficientAmount);
425
441
  set(user_storage, current - amount, ctx);
426
- }`)}if(u.length>0&&!s.offchain&&!s.global){let o=u.map(_=>`${_}: ${l[_]}`).join(", "),b=$.map(_=>`${_}: ${l[_]}`).join(", "),p=[o,b].filter(Boolean).join(", "),h=u.join(", "),c=[...u,...$].join(", ");n.push(`
442
+ }`)}if(u.length>0&&!s.offchain&&!s.global){let o=u.map(_=>`${_}: ${l[_]}`).join(", "),b=g.map(_=>`${_}: ${l[_]}`).join(", "),p=[o,b].filter(Boolean).join(", "),h=u.join(", "),c=[...u,...g].join(", ");n.push(`
427
443
  // \u2500\u2500\u2500 keys: mint (developer provides keys; framework ensures no duplicate) \u2500
428
444
  // Choosing the ID strategy (fresh address, counter, coordinate pack, etc.)
429
445
  // is intentionally left to the caller.
@@ -438,26 +454,24 @@ ${v}
438
454
  key_tuple.push_back(TABLE_NAME);
439
455
  ${u.map(b=>`key_tuple.push_back(sui::bcs::to_bytes(&${b}));`).join(`
440
456
  `)}`:`let mut key_tuple = vector::empty();
441
- key_tuple.push_back(TABLE_NAME);`;if($.length>1){let b=$.map(p=>`${p}: ${l[p]}`).join(", ");n.push(`
457
+ key_tuple.push_back(TABLE_NAME);`;if(g.length>1){let b=g.map(p=>`${p}: ${l[p]}`).join(", ");n.push(`
442
458
  // \u2500\u2500\u2500 reactive: cross-user write variants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
443
459
  // Package-level helpers: add pause checks and access control in your system
444
460
  // functions before calling these.
445
- public(package) fun set_reactive(
446
- scene_id: &sui::object::UID,
447
- meta: &dubhe::dapp_service::PermitMetadata,
461
+ public(package) fun set_reactive<PermType>(
462
+ permit: &ScenePermit<PermType>,
448
463
  from: &mut UserStorage,
449
464
  target: &mut UserStorage,
450
465
  ${f?f+", ":""}${b},
451
466
  ctx: &mut TxContext,
452
467
  ) {
453
468
  ${o}
454
- let field_names = vector[${$.map(p=>`b"${p}"`).join(", ")}];
455
- let value_tuple = encode(${$.join(", ")});
456
- ${i}::set_record_reactive<DappKey>(${d}scene_id, meta, from, target, key_tuple, field_names, value_tuple, ctx);
457
- }`)}for(let[b,p]of g){let h=p==="string"||p==="String"?`sui::bcs::to_bytes(&std::ascii::into_bytes(${b}))`:`sui::bcs::to_bytes(&${b})`;n.push(`
458
- public(package) fun set_${b}_reactive(
459
- scene_id: &sui::object::UID,
460
- meta: &dubhe::dapp_service::PermitMetadata,
469
+ let field_names = vector[${g.map(p=>`b"${p}"`).join(", ")}];
470
+ let value_tuple = encode(${g.join(", ")});
471
+ ${i}::set_record_reactive<DappKey, PermType>(${d}permit, from, target, key_tuple, field_names, value_tuple, ctx);
472
+ }`)}for(let[b,p]of $){let h=p==="string"||p==="String"?`sui::bcs::to_bytes(&std::ascii::into_bytes(${b}))`:`sui::bcs::to_bytes(&${b})`;n.push(`
473
+ public(package) fun set_${b}_reactive<PermType>(
474
+ permit: &ScenePermit<PermType>,
461
475
  from: &mut UserStorage,
462
476
  target: &mut UserStorage,
463
477
  ${f?f+", ":""}${b}: ${p==="string"||p==="String"?"String":p},
@@ -465,12 +479,12 @@ ${v}
465
479
  ) {
466
480
  ${o}
467
481
  let value = ${h};
468
- ${i}::set_field_reactive<DappKey>(${d}scene_id, meta, from, target, key_tuple, b"${b}", value, ctx);
469
- }`)}}if(s.transferable){let o=e.objects??{},b=e.scenes??{},p=!!s.fungible,h=!p&&u.length>0,c=h?u[0]:null;for(let[_,v]of Object.entries(o)){if(!(v.accepts??[]).includes(t))continue;let k=K(_),j=`dubhe::dapp_service::ObjectStorage<${r}::${_}::${k}>`,w=_;if(p&&$.length===1){let[,F]=g[0];n.push(`
482
+ ${i}::set_field_reactive<DappKey, PermType>(${d}permit, from, target, key_tuple, b"${b}", value, ctx);
483
+ }`)}}if(s.transferable){let o=e.objects??{},b=e.scenes??{},p=!!s.fungible,h=!p&&u.length>0,c=h?u[0]:null;for(let[_,v]of Object.entries(o)){if(!(v.accepts??[]).includes(t))continue;let k=I(_),D=`dubhe::dapp_service::ObjectStorage<${r}::${_}::${k}>`,w=_;if(p&&g.length===1){let[,F]=$[0];n.push(`
470
484
  // \u2500\u2500\u2500 transferable: User \u2194 ${k}Storage (fungible) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
471
485
  public(package) fun transfer_user_to_${_}(
472
486
  user: &mut UserStorage,
473
- target: &mut ${j},
487
+ target: &mut ${D},
474
488
  amount: ${F},
475
489
  ctx: &mut TxContext,
476
490
  ) {
@@ -479,31 +493,31 @@ ${v}
479
493
  }
480
494
 
481
495
  public(package) fun transfer_${_}_to_user(
482
- source: &mut ${j},
496
+ source: &mut ${D},
483
497
  user: &mut UserStorage,
484
498
  amount: ${F},
485
499
  ctx: &mut TxContext,
486
500
  ) {
487
501
  ${r}::${w}::sub_${t}(source, amount);
488
502
  add(user, amount, ctx);
489
- }`)}else if(h&&c)if($.length===1){let[,F]=g[0],D=F==="string"||F==="String"?`to_bytes(&std::ascii::into_bytes(get(user, ${c})))`:`to_bytes(&get(user, ${c}))`,E=Object.entries(e.enums??{}).map(([C])=>({type:K(C),module:C})),x=G(r,F,"bcs",E);n.push(`
503
+ }`)}else if(h&&c)if(g.length===1){let[,F]=$[0],j=F==="string"||F==="String"?`to_bytes(&std::ascii::into_bytes(get(user, ${c})))`:`to_bytes(&get(user, ${c}))`,E=Object.entries(e.enums??{}).map(([C])=>({type:I(C),module:C})),x=G(r,F,"bcs",E);n.push(`
490
504
  // \u2500\u2500\u2500 transferable: User \u2194 ${k}Storage (keyed) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
491
505
  public(package) fun transfer_user_to_${_}(
492
506
  user: &mut UserStorage,
493
- target: &mut ${j},
507
+ target: &mut ${D},
494
508
  ${c}: u64,
495
509
  ctx: &TxContext,
496
510
  ) {
497
511
  ensure_has(user, ${c});
498
512
  // Guard before any mutation: abort if target already holds this item.
499
513
  dubhe::error::item_already_owned(!${r}::${w}::has_${t}(target, ${c}));
500
- let raw = ${D};
514
+ let raw = ${j};
501
515
  delete(user, ${c}, ctx);
502
516
  ${r}::${w}::set_${t}_data(target, ${c}, raw);
503
517
  }
504
518
 
505
519
  public(package) fun transfer_${_}_to_user(
506
- source: &mut ${j},
520
+ source: &mut ${D},
507
521
  user: &mut UserStorage,
508
522
  ${c}: u64,
509
523
  ctx: &mut TxContext,
@@ -518,7 +532,7 @@ ${v}
518
532
  // \u2500\u2500\u2500 transferable: User \u2194 ${k}Storage (keyed, multi-field) \u2500\u2500
519
533
  public(package) fun transfer_user_to_${_}(
520
534
  user: &mut UserStorage,
521
- target: &mut ${j},
535
+ target: &mut ${D},
522
536
  ${c}: u64,
523
537
  ctx: &TxContext,
524
538
  ) {
@@ -532,7 +546,7 @@ ${v}
532
546
  }
533
547
 
534
548
  public(package) fun transfer_${_}_to_user(
535
- source: &mut ${j},
549
+ source: &mut ${D},
536
550
  user: &mut UserStorage,
537
551
  ${c}: u64,
538
552
  ctx: &mut TxContext,
@@ -542,12 +556,12 @@ ${v}
542
556
  let raw = ${r}::${w}::remove_${t}_data(source, ${c});
543
557
  let decoded = decode(raw);
544
558
  set_struct(user, ${c}, decoded, ctx);
545
- }`)}for(let[_,v]of Object.entries(b)){if(!(v.accepts??[]).includes(t))continue;let k=K(_),j=`dubhe::dapp_service::SceneStorage<${r}::${_}::${k}>`,w=_,F=v.authorization.kind==="permit"?`dubhe::dapp_service::ScenePermit<${r}::${v.authorization.permit}::${K(v.authorization.permit)}>`:"",D=v.authorization.kind==="permit"?` permit: &${F},
546
- `:"",E=v.authorization.kind==="permit"?"permit, ":"",x=v.authorization.kind==="permit"?", ctx":"";if(p&&$.length===1){let[,C]=g[0];n.push(`
559
+ }`)}for(let[_,v]of Object.entries(b)){if(!(v.accepts??[]).includes(t))continue;let k=I(_),D=`dubhe::dapp_service::SceneStorage<${r}::${_}::${k}>`,w=_,F=v.authorization.kind==="permit"?`dubhe::dapp_service::ScenePermit<${r}::${v.authorization.permit}::${I(v.authorization.permit)}>`:"",j=v.authorization.kind==="permit"?` permit: &${F},
560
+ `:"",E=v.authorization.kind==="permit"?"permit, ":"",x=v.authorization.kind==="permit"?", ctx":"";if(p&&g.length===1){let[,C]=$[0];n.push(`
547
561
  // \u2500\u2500\u2500 transferable: User \u2194 ${k}Storage (fungible) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
548
562
  public(package) fun transfer_user_to_${_}(
549
- ${D} user: &mut UserStorage,
550
- target: &mut ${j},
563
+ ${j} user: &mut UserStorage,
564
+ target: &mut ${D},
551
565
  amount: ${C},
552
566
  ctx: &mut TxContext,
553
567
  ) {
@@ -557,31 +571,31 @@ ${D} user: &mut UserStorage,
557
571
 
558
572
  // \u2605 No expiry check on withdraw direction \u2014 prevents asset lock-in expired scenes.
559
573
  public(package) fun transfer_${_}_to_user(
560
- ${D} source: &mut ${j},
574
+ ${j} source: &mut ${D},
561
575
  user: &mut UserStorage,
562
576
  amount: ${C},
563
577
  ctx: &mut TxContext,
564
578
  ) {
565
579
  ${r}::${w}::sub_${t}(${E}source, amount${x});
566
580
  add(user, amount, ctx);
567
- }`)}else if(h&&c)if($.length===1){let[,C]=g[0],I=C==="string"||C==="String"?`to_bytes(&std::ascii::into_bytes(get(user, ${c})))`:`to_bytes(&get(user, ${c}))`,P=Object.entries(e.enums??{}).map(([y])=>({type:K(y),module:y})),a=G(r,C,"bcs",P);n.push(`
581
+ }`)}else if(h&&c)if(g.length===1){let[,C]=$[0],K=C==="string"||C==="String"?`to_bytes(&std::ascii::into_bytes(get(user, ${c})))`:`to_bytes(&get(user, ${c}))`,P=Object.entries(e.enums??{}).map(([y])=>({type:I(y),module:y})),a=G(r,C,"bcs",P);n.push(`
568
582
  // \u2500\u2500\u2500 transferable: User \u2194 ${k}Storage (keyed) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
569
583
  public(package) fun transfer_user_to_${_}(
570
- ${D} user: &mut UserStorage,
571
- target: &mut ${j},
584
+ ${j} user: &mut UserStorage,
585
+ target: &mut ${D},
572
586
  ${c}: u64,
573
587
  ctx: &TxContext,
574
588
  ) {
575
589
  ensure_has(user, ${c});
576
590
  // Guard before any mutation: abort if target already holds this item.
577
591
  dubhe::error::item_already_owned(!${r}::${w}::has_${t}(target, ${c}));
578
- let raw = ${I};
592
+ let raw = ${K};
579
593
  delete(user, ${c}, ctx);
580
594
  ${r}::${w}::set_${t}_data(${E}target, ${c}, raw${x});
581
595
  }
582
596
 
583
597
  public(package) fun transfer_${_}_to_user(
584
- ${D} source: &mut ${j},
598
+ ${j} source: &mut ${D},
585
599
  user: &mut UserStorage,
586
600
  ${c}: u64,
587
601
  ctx: &mut TxContext,
@@ -595,8 +609,8 @@ ${D} source: &mut ${j},
595
609
  }`)}else n.push(`
596
610
  // \u2500\u2500\u2500 transferable: User \u2194 ${k}Storage (keyed, multi-field) \u2500
597
611
  public(package) fun transfer_user_to_${_}(
598
- ${D} user: &mut UserStorage,
599
- target: &mut ${j},
612
+ ${j} user: &mut UserStorage,
613
+ target: &mut ${D},
600
614
  ${c}: u64,
601
615
  ctx: &TxContext,
602
616
  ) {
@@ -610,7 +624,7 @@ ${D} user: &mut UserStorage,
610
624
  }
611
625
 
612
626
  public(package) fun transfer_${_}_to_user(
613
- ${D} source: &mut ${j},
627
+ ${j} source: &mut ${D},
614
628
  user: &mut UserStorage,
615
629
  ${c}: u64,
616
630
  ctx: &mut TxContext,
@@ -620,7 +634,7 @@ ${D} source: &mut ${j},
620
634
  let raw = ${r}::${w}::remove_${t}_data(${E}source, ${c}${x});
621
635
  let decoded = decode(raw);
622
636
  set_struct(user, ${c}, decoded, ctx);
623
- }`)}}if(s.listable){let o=!!s.fungible,p=!o&&u.length>0,h=p?u[0]:null,c=`b"${t}"`;if(o&&$.length===1)n.push(`
637
+ }`)}}if(s.listable){let o=!!s.fungible,p=!o&&u.length>0,h=p?u[0]:null,c=`b"${t}"`;if(o&&g.length===1)n.push(`
624
638
  // \u2500\u2500\u2500 listable: market protocol (fungible) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
625
639
  // Package-level helpers: call these from your system functions.
626
640
  // Add pause checks, access control, and custom logic there.
@@ -636,7 +650,7 @@ ${D} source: &mut ${j},
636
650
  user_storage,
637
651
  ${c},
638
652
  { let mut k = vector::empty(); k.push_back(TABLE_NAME); k },
639
- b"${$[0]}",
653
+ b"${g[0]}",
640
654
  amount,
641
655
  price,
642
656
  listed_until,
@@ -696,7 +710,7 @@ ${D} source: &mut ${j},
696
710
  user_storage,
697
711
  ${c},
698
712
  record_key,
699
- vector[${$.map(k=>`b"${k}"`).join(", ")}],
713
+ vector[${g.map(k=>`b"${k}"`).join(", ")}],
700
714
  price,
701
715
  listed_until,
702
716
  ctx,
@@ -735,7 +749,7 @@ ${D} source: &mut ${j},
735
749
  dapp_key::new(), listing, user_storage, ctx
736
750
  );
737
751
  }`)}}return n.join(`
738
- `)}import ot from"node:path";function W(e){return e.split("_").map(t=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function it(e){return e==="string"||e==="String"?"String":e}function Q(e){return`dubhe::dapp_service::ObjectStorage<${e}>`}function at(e,t){let s=W(e),n=Q(s),r=[];for(let[i,d]of Object.entries(t.fields)){let l=it(d);r.push(`
752
+ `)}import it from"node:path";function W(e){return e.split("_").map(t=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function at(e){return e==="string"||e==="String"?"String":e}function N(e){return`dubhe::dapp_service::ObjectStorage<${e}>`}function ct(e,t){let s=W(e),n=N(s),r=[];for(let[i,d]of Object.entries(t.fields)){let l=at(d);r.push(`
739
753
  public fun get_${i}(storage: &${n}): ${l} {
740
754
  dubhe::dapp_system::get_object_field<${s}, ${l}>(storage, b"${i}")
741
755
  }
@@ -745,7 +759,7 @@ ${D} source: &mut ${j},
745
759
  dapp_key::new(), storage, b"${i}", value
746
760
  );
747
761
  }`)}return r.join(`
748
- `)}function ct(e,t){let s=W(e),n=Q(s);return`
762
+ `)}function ut(e,t){let s=W(e),n=N(s);return`
749
763
  public fun get_${t}(storage: &${n}): u64 {
750
764
  if (dubhe::dapp_system::has_object_field<${s}, u64>(storage, b"${t}")) {
751
765
  dubhe::dapp_system::get_object_field<${s}, u64>(storage, b"${t}")
@@ -765,7 +779,7 @@ ${D} source: &mut ${j},
765
779
  dubhe::dapp_system::set_object_field<DappKey, ${s}, u64>(
766
780
  dapp_key::new(), storage, b"${t}", current - amount
767
781
  );
768
- }`}function ut(e,t,s){let n=W(e),r=Q(n);return`
782
+ }`}function pt(e,t,s){let n=W(e),r=N(n);return`
769
783
  public fun has_${t}(storage: &${r}, ${s}: u64): bool {
770
784
  let key = sui::bcs::to_bytes(&${s});
771
785
  dubhe::dapp_system::has_object_field<${n}, vector<u8>>(storage, key)
@@ -788,15 +802,15 @@ ${D} source: &mut ${j},
788
802
  let key = sui::bcs::to_bytes(&${s});
789
803
  assert!(dubhe::dapp_system::has_object_field<${n}, vector<u8>>(storage, key), EFieldNotFound);
790
804
  dubhe::dapp_system::remove_object_field<DappKey, ${n}, vector<u8>>(dapp_key::new(), storage, key)
791
- }`}function pt(e,t,s,n,r){let i=r.resources??{},d=r.objects??{},l=r.scenes??{},u=W(t),g=Q(u),$=[],f=[];for(let o of n){let b=d[o]??l[o];if(!b)continue;let p=b.accepts??[],h=W(o);$.push(` use ${e}::${o};`);let c=p.filter(_=>s.includes(_));for(let _ of c){let v=i[_];if(!v||typeof v=="string")continue;let k=v,j=!!l[o],w=`${e}::${o}::${h}`,F=j?`dubhe::dapp_service::SceneStorage<${w}>`:`dubhe::dapp_service::ObjectStorage<${w}>`,D=j?l[o]:void 0,E=D?.authorization.kind==="permit"?`dubhe::dapp_service::ScenePermit<${e}::${D.authorization.permit}::${W(D.authorization.permit)}>`:"",x=D?.authorization.kind==="permit"?` source_permit: &${E},
792
- `:"",C=D?.authorization.kind==="permit"?"source_permit, ":"",I=D?.authorization.kind==="permit"?` ctx: &TxContext,
793
- `:"",P=D?.authorization.kind==="permit"?", ctx":"";if(!k.fungible&&k.keys?.length){let a=k.keys[0];f.push(`
805
+ }`}function dt(e,t,s,n,r){let i=r.resources??{},d=r.objects??{},l=r.scenes??{},u=W(t),$=N(u),g=[],f=[];for(let o of n){let b=d[o]??l[o];if(!b)continue;let p=b.accepts??[],h=W(o);g.push(` use ${e}::${o};`);let c=p.filter(_=>s.includes(_));for(let _ of c){let v=i[_];if(!v||typeof v=="string")continue;let k=v,D=!!l[o],w=`${e}::${o}::${h}`,F=D?`dubhe::dapp_service::SceneStorage<${w}>`:`dubhe::dapp_service::ObjectStorage<${w}>`,j=D?l[o]:void 0,E=j?.authorization.kind==="permit"?`dubhe::dapp_service::ScenePermit<${e}::${j.authorization.permit}::${W(j.authorization.permit)}>`:"",x=j?.authorization.kind==="permit"?` source_permit: &${E},
806
+ `:"",C=j?.authorization.kind==="permit"?"source_permit, ":"",K=j?.authorization.kind==="permit"?` ctx: &TxContext,
807
+ `:"",P=j?.authorization.kind==="permit"?", ctx":"";if(!k.fungible&&k.keys?.length){let a=k.keys[0];f.push(`
794
808
  /// Transfer ${_} (keyed item) from ${o} into this ${t}.
795
809
  public(package) fun transfer_${o}_to_${t}_${_}(
796
810
  ${x} from: &mut ${F},
797
- to: &mut ${g},
811
+ to: &mut ${$},
798
812
  ${a}: u64,
799
- ${I}
813
+ ${K}
800
814
  ) {
801
815
  let data = ${o}::remove_${_}_data(${C}from, ${a}${P});
802
816
  set_${_}_data(to, ${a}, data);
@@ -804,21 +818,21 @@ ${I}
804
818
  /// Transfer ${_} (fungible) from ${o} into this ${t}.
805
819
  public(package) fun transfer_${o}_to_${t}_${_}(
806
820
  ${x} from: &mut ${F},
807
- to: &mut ${g},
821
+ to: &mut ${$},
808
822
  amount: u64,
809
- ${I}
823
+ ${K}
810
824
  ) {
811
825
  ${o}::sub_${_}(${C}from, amount${P});
812
826
  add_${_}(to, amount);
813
- }`)}}return{imports:$,functions:f}}async function Pe(e,t){if(!e.objects||Object.keys(e.objects).length===0)return;console.log(`
814
- \u{1F4E6} Starting Object Storage Generation...`);let s=e.name,n=e.resources??{};for(let[r,i]of Object.entries(e.objects)){console.log(` \u2514\u2500 ${r}`);let d=W(r),l=`${d}Storage`,u=`b"${r}"`,g=at(r,i),$=i.accepts??[],f=[];for(let S of $){let T=n[S];if(!T||typeof T=="string")continue;let M=T;!M.fungible&&M.keys?.length?f.push(ut(r,S,M.keys[0])):f.push(ct(r,S))}let{imports:o,functions:b}=pt(s,r,$,i.acceptsFrom??[],e),p=i.adminOnly?" assert!(ctx.sender() == dubhe::dapp_service::dapp_admin(dapp_storage), ENoPermission);":"",h=`dubhe::dapp_service::ObjectStorage<${d}>`,c=`
827
+ }`)}}return{imports:g,functions:f}}async function Re(e,t){if(!e.objects||Object.keys(e.objects).length===0)return;console.log(`
828
+ \u{1F4E6} Starting Object Storage Generation...`);let s=e.name,n=e.resources??{};for(let[r,i]of Object.entries(e.objects)){console.log(` \u2514\u2500 ${r}`);let d=W(r),l=`${d}Storage`,u=`b"${r}"`,$=ct(r,i),g=i.accepts??[],f=[];for(let S of g){let T=n[S];if(!T||typeof T=="string")continue;let M=T;!M.fungible&&M.keys?.length?f.push(pt(r,S,M.keys[0])):f.push(ut(r,S))}let{imports:o,functions:b}=dt(s,r,g,i.acceptsFrom??[],e),p=i.adminOnly?" assert!(ctx.sender() == dubhe::dapp_service::dapp_admin(dapp_storage), ENoPermission);":"",h=`dubhe::dapp_service::ObjectStorage<${d}>`,c=`
815
829
  public fun assert_${r}_id(storage: &${h}, expected: vector<u8>) {
816
830
  assert!(*dubhe::dapp_service::object_storage_entity_id(storage) == expected, EWrongEntityId);
817
831
  }`,_=`
818
832
  public fun entity_id(storage: &${h}): vector<u8> {
819
833
  *dubhe::dapp_service::object_storage_entity_id(storage)
820
- }`,j=Object.values(i.fields).some(S=>S==="string"||S==="String"||S==="vector<String>")?`
821
- use std::ascii::String;`:"",w=$.some(S=>{let T=n[S];return!T||typeof T=="string"?!1:!!T.keys?.length&&!T.fungible}),F=$.some(S=>{let T=n[S];return!T||typeof T=="string"?!1:!!T.fungible}),D=w,E=F,x=w,C=!!i.adminOnly,I=[D?` #[error]
834
+ }`,D=Object.values(i.fields).some(S=>S==="string"||S==="String"||S==="vector<String>")?`
835
+ use std::ascii::String;`:"",w=g.some(S=>{let T=n[S];return!T||typeof T=="string"?!1:!!T.keys?.length&&!T.fungible}),F=g.some(S=>{let T=n[S];return!T||typeof T=="string"?!1:!!T.fungible}),j=w,E=F,x=w,C=!!i.adminOnly,K=[j?` #[error]
822
836
  const EFieldNotFound: vector<u8> = b"Field not found";`:"",E?` #[error]
823
837
  const EInsufficientAmount: vector<u8> = b"Insufficient amount";`:"",x?` #[error]
824
838
  const EDuplicateItemId: vector<u8> = b"Duplicate item id";`:"",` #[error]
@@ -829,10 +843,10 @@ ${I}
829
843
  `):"",a=`dubhe::dapp_service::ObjectStorage<${d}>`,y=`module ${s}::${r} {
830
844
  use dubhe::dapp_service::DappStorage;
831
845
  use ${s}::dapp_key;
832
- use ${s}::dapp_key::DappKey;${j}${P}
846
+ use ${s}::dapp_key::DappKey;${D}${P}
833
847
 
834
848
  // \u2500\u2500\u2500 Error constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
835
- ${I}
849
+ ${K}
836
850
 
837
851
  const TYPE_TAG: vector<u8> = ${u};
838
852
 
@@ -848,7 +862,7 @@ ${_}
848
862
  ${c}
849
863
 
850
864
  // \u2500\u2500\u2500 Field accessors (own fields) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
851
- ${g}
865
+ ${$}
852
866
 
853
867
  // \u2500\u2500\u2500 Bag accessors for accepted resources \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
854
868
  ${f.join(`
@@ -859,7 +873,7 @@ ${b.join(`
859
873
  `)}
860
874
 
861
875
  // \u2500\u2500\u2500 Lifecycle entry functions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
862
- public fun create_${r}(
876
+ public(package) fun create_${r}(
863
877
  dapp_storage: &mut DappStorage,
864
878
  entity_id: vector<u8>,
865
879
  ctx: &mut TxContext,
@@ -870,7 +884,7 @@ ${p}
870
884
  );
871
885
  }
872
886
 
873
- public fun destroy_${r}(
887
+ public(package) fun destroy_${r}(
874
888
  dapp_storage: &mut DappStorage,
875
889
  storage: ${a},
876
890
  _ctx: &TxContext,
@@ -880,8 +894,8 @@ ${p}
880
894
  );
881
895
  }
882
896
  }
883
- `;await A(y,ot.join(t,`${r}.move`),"formatAndWriteMove")}}import dt from"node:path";function lt(e){return e.split("_").map(t=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}async function Le(e,t){if(!e.permits||Object.keys(e.permits).length===0)return;console.log(`
884
- \u{1F4E6} Starting Scene Permit Generation...`);let s=e.name;for(let n of Object.keys(e.permits)){console.log(` \u2514\u2500 ${n}`);let r=lt(n),i=`b"${n}"`,d=`dubhe::dapp_service::ScenePermit<${r}>`,l=`module ${s}::${n} {
897
+ `;await A(y,it.join(t,`${r}.move`),"formatAndWriteMove")}}import lt from"node:path";function gt(e){return e.split("_").map(t=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}async function Le(e,t){if(!e.permits||Object.keys(e.permits).length===0)return;console.log(`
898
+ \u{1F4E6} Starting Scene Permit Generation...`);let s=e.name;for(let n of Object.keys(e.permits)){console.log(` \u2514\u2500 ${n}`);let r=gt(n),i=`b"${n}"`,d=`dubhe::dapp_service::ScenePermit<${r}>`,l=`module ${s}::${n} {
885
899
  use dubhe::dapp_service::{Self, DappStorage};
886
900
  use ${s}::dapp_key;
887
901
  use ${s}::dapp_key::DappKey;
@@ -998,53 +1012,53 @@ ${p}
998
1012
  );
999
1013
  }
1000
1014
  }
1001
- `;await A(l,dt.join(t,`${n}.move`),"formatAndWriteMove")}}import $t from"node:path";function Y(e){return e.split("_").map(t=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function gt(e){return e==="string"||e==="String"?"String":e}function X(e){return`dubhe::dapp_service::SceneStorage<${e}>`}function q(e,t){if(t.authorization.kind==="permit")return`${e.name}::${t.authorization.permit}::${Y(t.authorization.permit)}`}function Z(e,t){if(t.authorization.kind==="permit")return`dubhe::dapp_service::ScenePermit<${q(e,t)}>`}function _t(e,t,s){let n=Y(t),r=X(n),i=q(e,s),d=Z(e,s),l=[];for(let[u,g]of Object.entries(s.fields)){let $=gt(g);s.authorization.kind==="permit"&&i&&d?l.push(`
1002
- public fun get_${u}(storage: &${r}): ${$} {
1003
- dubhe::dapp_system::get_scene_field<${n}, ${$}>(storage, b"${u}")
1015
+ `;await A(l,lt.join(t,`${n}.move`),"formatAndWriteMove")}}import $t from"node:path";function Y(e){return e.split("_").map(t=>/^\d+$/.test(t)?t:t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function _t(e){return e==="string"||e==="String"?"String":e}function Q(e){return`dubhe::dapp_service::SceneStorage<${e}>`}function q(e,t){if(t.authorization.kind==="permit")return`${e.name}::${t.authorization.permit}::${Y(t.authorization.permit)}`}function X(e,t){if(t.authorization.kind==="permit")return`dubhe::dapp_service::ScenePermit<${q(e,t)}>`}function mt(e,t,s){let n=Y(t),r=Q(n),i=q(e,s),d=X(e,s),l=[];for(let[u,$]of Object.entries(s.fields)){let g=_t($);s.authorization.kind==="permit"&&i&&d?l.push(`
1016
+ public fun get_${u}(storage: &${r}): ${g} {
1017
+ dubhe::dapp_system::get_scene_field<${n}, ${g}>(storage, b"${u}")
1004
1018
  }
1005
1019
 
1006
1020
  public(package) fun set_${u}(
1007
1021
  permit: &${d},
1008
1022
  storage: &mut ${r},
1009
- value: ${$},
1023
+ value: ${g},
1010
1024
  ctx: &TxContext,
1011
1025
  ) {
1012
- dubhe::dapp_system::set_scene_field<DappKey, ${i}, ${n}, ${$}>(
1026
+ dubhe::dapp_system::set_scene_field<DappKey, ${i}, ${n}, ${g}>(
1013
1027
  dapp_key::new(), permit, storage, b"${u}", value, ctx
1014
1028
  );
1015
1029
  }
1016
1030
 
1017
- public(package) fun remove_${u}_system_maintenance(storage: &mut ${r}): ${$} {
1018
- dubhe::dapp_system::remove_scene_field_system_maintenance<DappKey, ${n}, ${$}>(
1031
+ public(package) fun remove_${u}_system_maintenance(storage: &mut ${r}): ${g} {
1032
+ dubhe::dapp_system::remove_scene_field_system_maintenance<DappKey, ${n}, ${g}>(
1019
1033
  dapp_key::new(), storage, b"${u}"
1020
1034
  )
1021
1035
  }`):l.push(`
1022
- public fun get_${u}(storage: &${r}): ${$} {
1023
- dubhe::dapp_system::get_scene_field<${n}, ${$}>(storage, b"${u}")
1036
+ public fun get_${u}(storage: &${r}): ${g} {
1037
+ dubhe::dapp_system::get_scene_field<${n}, ${g}>(storage, b"${u}")
1024
1038
  }
1025
1039
 
1026
- public(package) fun set_${u}(storage: &mut ${r}, value: ${$}) {
1027
- dubhe::dapp_system::set_scene_field_system<DappKey, ${n}, ${$}>(
1040
+ public(package) fun set_${u}(storage: &mut ${r}, value: ${g}) {
1041
+ dubhe::dapp_system::set_scene_field_system<DappKey, ${n}, ${g}>(
1028
1042
  dapp_key::new(), storage, b"${u}", value
1029
1043
  );
1030
1044
  }
1031
1045
 
1032
- public(package) fun remove_${u}(storage: &mut ${r}): ${$} {
1033
- dubhe::dapp_system::remove_scene_field_system_maintenance<DappKey, ${n}, ${$}>(
1046
+ public(package) fun remove_${u}(storage: &mut ${r}): ${g} {
1047
+ dubhe::dapp_system::remove_scene_field_system_maintenance<DappKey, ${n}, ${g}>(
1034
1048
  dapp_key::new(), storage, b"${u}"
1035
1049
  )
1036
1050
  }`)}return l.join(`
1037
- `)}function N(e,t){let s=Z(e,t);return t.authorization.kind!=="permit"||!s?"":` permit: &${s},
1038
- `}function ee(e){return e.authorization.kind==="permit"?` ctx: &TxContext,
1039
- `:""}function de(e,t,s,n,r,i){let d=q(e,t);return t.authorization.kind==="permit"&&d?`dubhe::dapp_system::set_scene_field<DappKey, ${d}, ${s}, ${n}>(
1051
+ `)}function ee(e,t){let s=X(e,t);return t.authorization.kind!=="permit"||!s?"":` permit: &${s},
1052
+ `}function te(e){return e.authorization.kind==="permit"?` ctx: &TxContext,
1053
+ `:""}function le(e,t,s,n,r,i){let d=q(e,t);return t.authorization.kind==="permit"&&d?`dubhe::dapp_system::set_scene_field<DappKey, ${d}, ${s}, ${n}>(
1040
1054
  dapp_key::new(), permit, storage, ${r}, ${i}, ctx
1041
1055
  );`:`dubhe::dapp_system::set_scene_field_system<DappKey, ${s}, ${n}>(
1042
1056
  dapp_key::new(), storage, ${r}, ${i}
1043
- );`}function mt(e,t,s,n,r){let i=q(e,t);return t.authorization.kind==="permit"&&i?`dubhe::dapp_system::remove_scene_field<DappKey, ${i}, ${s}, ${n}>(
1057
+ );`}function bt(e,t,s,n,r){let i=q(e,t);return t.authorization.kind==="permit"&&i?`dubhe::dapp_system::remove_scene_field<DappKey, ${i}, ${s}, ${n}>(
1044
1058
  dapp_key::new(), permit, storage, ${r}, ctx
1045
1059
  )`:`dubhe::dapp_system::remove_scene_field_system_maintenance<DappKey, ${s}, ${n}>(
1046
1060
  dapp_key::new(), storage, ${r}
1047
- )`}function bt(e,t,s,n){let r=Y(t),i=X(r);return`
1061
+ )`}function ft(e,t,s,n){let r=Y(t),i=Q(r);return`
1048
1062
  public fun get_${n}(storage: &${i}): u64 {
1049
1063
  if (dubhe::dapp_system::has_scene_field<${r}, u64>(storage, b"${n}")) {
1050
1064
  dubhe::dapp_system::get_scene_field<${r}, u64>(storage, b"${n}")
@@ -1052,21 +1066,21 @@ ${p}
1052
1066
  }
1053
1067
 
1054
1068
  public(package) fun add_${n}(
1055
- ${N(e,s)} storage: &mut ${i},
1069
+ ${ee(e,s)} storage: &mut ${i},
1056
1070
  amount: u64,
1057
- ${ee(s)} ) {
1071
+ ${te(s)} ) {
1058
1072
  let current = get_${n}(storage);
1059
- ${de(e,s,r,"u64",`b"${n}"`,"current + amount")}
1073
+ ${le(e,s,r,"u64",`b"${n}"`,"current + amount")}
1060
1074
  }
1061
1075
 
1062
1076
  public(package) fun sub_${n}(
1063
- ${N(e,s)} storage: &mut ${i},
1077
+ ${ee(e,s)} storage: &mut ${i},
1064
1078
  amount: u64,
1065
- ${ee(s)} ) {
1079
+ ${te(s)} ) {
1066
1080
  let current = get_${n}(storage);
1067
1081
  assert!(current >= amount, EInsufficientAmount);
1068
- ${de(e,s,r,"u64",`b"${n}"`,"current - amount")}
1069
- }`}function ft(e,t,s,n,r){let i=Y(t),d=X(i);return`
1082
+ ${le(e,s,r,"u64",`b"${n}"`,"current - amount")}
1083
+ }`}function yt(e,t,s,n,r){let i=Y(t),d=Q(i);return`
1070
1084
  public fun has_${n}(storage: &${d}, ${r}: u64): bool {
1071
1085
  let key = sui::bcs::to_bytes(&${r});
1072
1086
  dubhe::dapp_system::has_scene_field<${i}, vector<u8>>(storage, key)
@@ -1078,53 +1092,53 @@ ${ee(s)} ) {
1078
1092
  }
1079
1093
 
1080
1094
  public(package) fun set_${n}_data(
1081
- ${N(e,s)} storage: &mut ${d},
1095
+ ${ee(e,s)} storage: &mut ${d},
1082
1096
  ${r}: u64,
1083
1097
  data: vector<u8>,
1084
- ${ee(s)} ) {
1098
+ ${te(s)} ) {
1085
1099
  let key = sui::bcs::to_bytes(&${r});
1086
1100
  assert!(!dubhe::dapp_system::has_scene_field<${i}, vector<u8>>(storage, key), EDuplicateItemId);
1087
- ${de(e,s,i,"vector<u8>","key","data")}
1101
+ ${le(e,s,i,"vector<u8>","key","data")}
1088
1102
  }
1089
1103
 
1090
1104
  public(package) fun remove_${n}_data(
1091
- ${N(e,s)} storage: &mut ${d},
1105
+ ${ee(e,s)} storage: &mut ${d},
1092
1106
  ${r}: u64,
1093
- ${ee(s)} ): vector<u8> {
1107
+ ${te(s)} ): vector<u8> {
1094
1108
  let key = sui::bcs::to_bytes(&${r});
1095
1109
  assert!(dubhe::dapp_system::has_scene_field<${i}, vector<u8>>(storage, key), EFieldNotFound);
1096
- ${mt(e,s,i,"vector<u8>","key")}
1097
- }`}function yt(e,t,s,n,r,i){let d=i.resources??{},l=i.objects??{},u=i.scenes??{},g=Y(t),$=X(g),f=[],o=[],b=Z(i,s),p=s.authorization.kind==="permit"&&b?` dest_permit: &${b},
1110
+ ${bt(e,s,i,"vector<u8>","key")}
1111
+ }`}function ht(e,t,s,n,r,i){let d=i.resources??{},l=i.objects??{},u=i.scenes??{},$=Y(t),g=Q($),f=[],o=[],b=X(i,s),p=s.authorization.kind==="permit"&&b?` dest_permit: &${b},
1098
1112
  `:"",h=s.authorization.kind==="permit"?"dest_permit, ":"",c=s.authorization.kind==="permit"?` ctx: &TxContext,
1099
- `:"",_=s.authorization.kind==="permit"?", ctx":"";for(let v of r){let k=l[v]??u[v];if(!k)continue;let j=k.accepts??[],w=Y(v);f.push(` use ${e}::${v};`);let F=!!u[v],D=`${e}::${v}::${w}`,E=F?`dubhe::dapp_service::SceneStorage<${D}>`:`dubhe::dapp_service::ObjectStorage<${D}>`,x=F?k:void 0,C=x?Z(i,x):void 0,I=x?.authorization.kind==="permit"&&C?` source_permit: &${C},
1100
- `:"",P=x?.authorization.kind==="permit"?"source_permit, ":"",a=x?.authorization.kind==="permit"?", ctx":"",y=j.filter(S=>n.includes(S));for(let S of y){let T=d[S];if(!T||typeof T=="string")continue;let M=T;if(!M.fungible&&M.keys?.length){let m=M.keys[0];o.push(`
1113
+ `:"",_=s.authorization.kind==="permit"?", ctx":"";for(let v of r){let k=l[v]??u[v];if(!k)continue;let D=k.accepts??[],w=Y(v);f.push(` use ${e}::${v};`);let F=!!u[v],j=`${e}::${v}::${w}`,E=F?`dubhe::dapp_service::SceneStorage<${j}>`:`dubhe::dapp_service::ObjectStorage<${j}>`,x=F?k:void 0,C=x?X(i,x):void 0,K=x?.authorization.kind==="permit"&&C?` source_permit: &${C},
1114
+ `:"",P=x?.authorization.kind==="permit"?"source_permit, ":"",a=x?.authorization.kind==="permit"?", ctx":"",y=D.filter(S=>n.includes(S));for(let S of y){let T=d[S];if(!T||typeof T=="string")continue;let M=T;if(!M.fungible&&M.keys?.length){let J=M.keys[0];o.push(`
1101
1115
  public(package) fun transfer_${v}_to_${t}_${S}(
1102
- ${I}${p} from: &mut ${E},
1103
- to: &mut ${$},
1104
- ${m}: u64,
1116
+ ${K}${p} from: &mut ${E},
1117
+ to: &mut ${g},
1118
+ ${J}: u64,
1105
1119
  ${c} ) {
1106
- let data = ${v}::remove_${S}_data(${P}from, ${m}${a});
1107
- set_${S}_data(${h}to, ${m}, data${_});
1120
+ let data = ${v}::remove_${S}_data(${P}from, ${J}${a});
1121
+ set_${S}_data(${h}to, ${J}, data${_});
1108
1122
  }`)}else o.push(`
1109
1123
  public(package) fun transfer_${v}_to_${t}_${S}(
1110
- ${I}${p} from: &mut ${E},
1111
- to: &mut ${$},
1124
+ ${K}${p} from: &mut ${E},
1125
+ to: &mut ${g},
1112
1126
  amount: u64,
1113
1127
  ${c} ) {
1114
1128
  ${v}::sub_${S}(${P}from, amount${a});
1115
1129
  add_${S}(${h}to, amount${_});
1116
- }`)}}return{imports:f,functions:o}}async function Re(e,t){if(!e.scenes||Object.keys(e.scenes).length===0)return;console.log(`
1117
- \u{1F4E6} Starting Scene Storage Generation...`);let s=e.name,n=e.resources??{};for(let[r,i]of Object.entries(e.scenes)){console.log(` \u2514\u2500 ${r}`);let d=Y(r),l=`b"${r}"`,u=X(d),g=_t(e,r,i),$=i.accepts??[],f=[];for(let x of $){let C=n[x];if(!C||typeof C=="string")continue;let I=C;!I.fungible&&I.keys?.length?f.push(ft(e,r,i,x,I.keys[0])):f.push(bt(e,r,i,x))}let{imports:o,functions:b}=yt(s,r,i,$,i.acceptsFrom??[],e),c=Object.values(i.fields).some(x=>x==="string"||x==="String"||x==="vector<String>")?`
1118
- use std::ascii::String;`:"",_=$.some(x=>{let C=n[x];return!C||typeof C=="string"?!1:!!C.keys?.length&&!C.fungible}),v=$.some(x=>{let C=n[x];return!C||typeof C=="string"?!1:!!C.fungible}),k=[_?` #[error]
1130
+ }`)}}return{imports:f,functions:o}}async function ze(e,t){if(!e.scenes||Object.keys(e.scenes).length===0)return;console.log(`
1131
+ \u{1F4E6} Starting Scene Storage Generation...`);let s=e.name,n=e.resources??{};for(let[r,i]of Object.entries(e.scenes)){console.log(` \u2514\u2500 ${r}`);let d=Y(r),l=`b"${r}"`,u=Q(d),$=mt(e,r,i),g=i.accepts??[],f=[];for(let x of g){let C=n[x];if(!C||typeof C=="string")continue;let K=C;!K.fungible&&K.keys?.length?f.push(yt(e,r,i,x,K.keys[0])):f.push(ft(e,r,i,x))}let{imports:o,functions:b}=ht(s,r,i,g,i.acceptsFrom??[],e),c=Object.values(i.fields).some(x=>x==="string"||x==="String"||x==="vector<String>")?`
1132
+ use std::ascii::String;`:"",_=g.some(x=>{let C=n[x];return!C||typeof C=="string"?!1:!!C.keys?.length&&!C.fungible}),v=g.some(x=>{let C=n[x];return!C||typeof C=="string"?!1:!!C.fungible}),k=[_?` #[error]
1119
1133
  const EFieldNotFound: vector<u8> = b"Field not found";`:"",v?` #[error]
1120
1134
  const EInsufficientAmount: vector<u8> = b"Insufficient amount";`:"",_?` #[error]
1121
1135
  const EDuplicateItemId: vector<u8> = b"Duplicate item id";`:""].filter(Boolean).join(`
1122
- `),j=k.length>0?`
1136
+ `),D=k.length>0?`
1123
1137
  // \u2500\u2500\u2500 Error constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1124
1138
  ${k}
1125
1139
  `:"",w=o.length>0?`
1126
1140
  `+o.join(`
1127
- `):"",F=Z(e,i),D=i.authorization.kind==="permit"&&F?`
1141
+ `):"",F=X(e,i),j=i.authorization.kind==="permit"&&F?`
1128
1142
  public(package) fun new_${r}_with_permit(
1129
1143
  dapp_storage: &DappStorage,
1130
1144
  permit: &${F},
@@ -1164,14 +1178,14 @@ ${k}
1164
1178
  use dubhe::dapp_service::DappStorage;
1165
1179
  use ${s}::dapp_key;
1166
1180
  use ${s}::dapp_key::DappKey;${c}${w}
1167
- ${j}
1181
+ ${D}
1168
1182
  const SCENE_TYPE: vector<u8> = ${l};
1169
1183
 
1170
1184
  /// Phantom type that distinguishes this scene storage at compile time.
1171
1185
  public struct ${d} has copy, drop {}
1172
1186
 
1173
1187
  // \u2500\u2500\u2500 Field accessors (own fields) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1174
- ${g}
1188
+ ${$}
1175
1189
 
1176
1190
  // \u2500\u2500\u2500 Bag accessors for accepted resources \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1177
1191
  ${f.join(`
@@ -1182,7 +1196,7 @@ ${b.join(`
1182
1196
  `)}
1183
1197
 
1184
1198
  // \u2500\u2500\u2500 SceneStorage lifecycle wrappers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1185
- ${D}
1199
+ ${j}
1186
1200
 
1187
1201
  public(package) fun share_${r}(storage: ${u}) {
1188
1202
  dubhe::dapp_system::share_scene_storage<DappKey, ${d}>(
@@ -1196,24 +1210,28 @@ ${D}
1196
1210
  );
1197
1211
  }
1198
1212
  }
1199
- `;await A(E,$t.join(t,`${r}.move`),"formatAndWriteMove")}}async function ze(e,t){if(e.name==="dubhe")return;let s=`module ${e.name}::user_storage_init {
1213
+ `;await A(E,$t.join(t,`${r}.move`),"formatAndWriteMove")}}async function Be(e,t){if(e.name==="dubhe")return;let s=`module ${e.name}::user_storage_init {
1200
1214
  use dubhe::dapp_service::{DappHub, DappStorage};
1201
1215
  use dubhe::dapp_system;
1216
+ use ${e.name}::dapp_key;
1202
1217
  use ${e.name}::dapp_key::DappKey;
1218
+ use ${e.name}::migrate;
1203
1219
 
1204
1220
  /// Create a UserStorage for the transaction sender within this DApp.
1205
1221
  /// Must be called once before the user can interact with any user-level resources.
1206
- /// Aborts if the DApp is currently suspended or the framework version has advanced.
1222
+ /// Aborts if the DApp version does not match this package, the DApp is paused,
1223
+ /// or the framework version has advanced.
1207
1224
  #[allow(lint(public_entry))]
1208
1225
  public entry fun init_user_storage(
1209
1226
  dapp_hub: &DappHub,
1210
1227
  dapp_storage: &mut DappStorage,
1211
1228
  ctx: &mut TxContext,
1212
1229
  ) {
1213
- dapp_system::create_user_storage<DappKey>(dapp_hub, dapp_storage, ctx);
1230
+ dapp_system::ensure_latest_version<DappKey>(dapp_storage, migrate::on_chain_version());
1231
+ dapp_system::create_user_storage(dapp_key::new(), dapp_hub, dapp_storage, ctx);
1214
1232
  }
1215
1233
  }
1216
- `;await A(s,t,"formatAndWriteMove")}import Be from"chalk";import{existsSync as ht,readFileSync as vt,writeFileSync as He}from"fs";import kt from"node:path";function St(e){if(typeof e=="string")return{value:e};let t={};for(let[s,n]of Object.entries(e.fields??{}))t[s]=n;return t}function We(e){let t={};for(let[s,n]of Object.entries(e.fields))t[s]=n;return t}function xt(e){let t={};for(let[r,i]of Object.entries(e.resources??{}))t[r]=St(i);let s={};for(let[r,i]of Object.entries(e.objects??{}))s[r]=We(i);let n={};for(let[r,i]of Object.entries(e.scenes??{}))n[r]=We(i);return{version:1,resources:t,objects:s,scenes:n}}function le(e,t,s){for(let[n,r]of Object.entries(s)){let i=t[n];if(i)for(let[d,l]of Object.entries(i)){if(!(d in r))throw new Error(`[dubhe] Breaking change detected in ${e}.${n}:
1234
+ `;await A(s,t,"formatAndWriteMove")}import He from"chalk";import{existsSync as vt,readFileSync as kt,writeFileSync as We}from"fs";import St from"node:path";function xt(e){if(typeof e=="string")return{value:e};let t={};for(let[s,n]of Object.entries(e.fields??{}))t[s]=n;return t}function Ye(e){let t={};for(let[s,n]of Object.entries(e.fields))t[s]=n;return t}function Ct(e){let t={};for(let[r,i]of Object.entries(e.resources??{}))t[r]=xt(i);let s={};for(let[r,i]of Object.entries(e.objects??{}))s[r]=Ye(i);let n={};for(let[r,i]of Object.entries(e.scenes??{}))n[r]=Ye(i);return{version:1,resources:t,objects:s,scenes:n}}function ge(e,t,s){for(let[n,r]of Object.entries(s)){let i=t[n];if(i)for(let[d,l]of Object.entries(i)){if(!(d in r))throw new Error(`[dubhe] Breaking change detected in ${e}.${n}:
1217
1235
  Field "${d}" was removed.
1218
1236
 
1219
1237
  Resources, objects, and scenes are stored as raw bytes on-chain.
@@ -1221,10 +1239,10 @@ Removing fields corrupts existing data. Use a new name (e.g. "${n}_v2") for brea
1221
1239
  Field "${d}" type changed from "${l}" to "${r[d]}".
1222
1240
 
1223
1241
  Resources, objects, and scenes are stored as raw bytes on-chain.
1224
- Changing field types corrupts existing data. Use a new name (e.g. "${n}_v2") for breaking changes.`)}}}function Ye(e,t){let s=kt.join(e,`${t.name}.lock.json`),n=xt(t);if(ht(s)){let r;try{r=JSON.parse(vt(s,"utf-8"))}catch{console.warn(Be.yellow("[dubhe]")+` Could not parse ${Be.bold(s)}, skipping break-check.`),He(s,JSON.stringify(n,null,2)+`
1225
- `,"utf-8");return}le("resources",r.resources??{},n.resources),le("objects",r.objects??{},n.objects),le("scenes",r.scenes??{},n.scenes)}He(s,JSON.stringify(n,null,2)+`
1226
- `,"utf-8")}import U from"chalk";var te=e=>console.warn(U.yellow("[dubhe codegen]")+U.yellow(" WARNING: ")+e);function Ve(e){$e(e,!1)}function $e(e,t=!0){let s=e.resources??{},n=e.objects??{},r=e.permits??{},i=e.scenes??{},d=new Set(Object.keys(s)),l=new Set(Object.keys(n)),u=new Set(Object.keys(r)),g=new Set(Object.keys(i)),$=new Set;for(let o of d)(l.has(o)||u.has(o)||g.has(o))&&$.add(o);for(let o of l)(u.has(o)||g.has(o))&&$.add(o);for(let o of u)g.has(o)&&$.add(o);if($.size>0)throw new Error(`Duplicate module names found across resources/objects/permits/scenes: ${[...$].sort().join(", ")}`);let f=new Set;for(let[o,b]of Object.entries(n)){for(let p of b.accepts??[]){f.add(p);let h=s[p];if(!h)throw new Error(`objects.${o}.accepts references '${p}' which is not defined in resources`);if(typeof h!="string"&&!h.transferable)throw new Error(`objects.${o}.accepts includes '${p}', but resources.${p} is missing transferable: true. Add transferable: true to resources.${p} to enable cross-storage transfers.`)}for(let p of b.acceptsFrom??[]){let h=!!n[p],c=!!i[p];if(!h&&!c)throw new Error(`objects.${o}.acceptsFrom references '${p}' which is not defined in objects or scenes`)}}for(let[o,b]of Object.entries(i)){if(!b.authorization)throw new Error(`scenes.${o} is missing authorization. Use { kind: 'system' } or { kind: 'permit', permit: '<permit_name>' }.`);if(b.authorization.kind==="permit"){if(!r[b.authorization.permit])throw new Error(`scenes.${o}.authorization references permit '${b.authorization.permit}', but permits.${b.authorization.permit} is not defined`)}else if(b.authorization.kind!=="system")throw new Error(`scenes.${o}.authorization.kind must be 'system' or 'permit'`);for(let p of b.accepts??[]){f.add(p);let h=s[p];if(!h)throw new Error(`scenes.${o}.accepts references '${p}' which is not defined in resources`);if(typeof h!="string"&&!h.transferable)throw new Error(`scenes.${o}.accepts includes '${p}', but resources.${p} is missing transferable: true. Add transferable: true to resources.${p} to enable cross-storage transfers.`)}for(let p of b.acceptsFrom??[]){let h=!!n[p],c=!!i[p];if(!h&&!c)throw new Error(`scenes.${o}.acceptsFrom references '${p}' which is not defined in objects or scenes`)}}for(let[o,b]of Object.entries(s)){if(typeof b=="string")continue;let p=b;if(p.offchain){if(p.listable)throw new Error(`resources.${o} has both offchain: true and listable: true. offchain resources emit events but store no on-chain state, so there is nothing to take out and place into a Listing.`);if(p.transferable)throw new Error(`resources.${o} has both offchain: true and transferable: true. offchain resources have no on-chain state to transfer between storages.`);if(p.reactive)throw new Error(`resources.${o} has both offchain: true and reactive: true. reactive writes target on-chain state, which offchain resources do not have.`);p.fungible&&t&&te(`resources.${U.bold(o)} has both ${U.cyan("offchain: true")} and ${U.cyan("fungible: true")}. offchain fungible events are emitted only; no on-chain balance is maintained and no add/sub functions are generated. This is unusual \u2014 verify your intent.`)}if(p.reactive&&p.fungible&&t&&te(`resources.${U.bold(o)} has both ${U.cyan("reactive: true")} and ${U.cyan("fungible: true")}. Fungible quantity changes (add/sub) do not suit reactive cross-user writes. Consider using a transfer function instead.`),p.global){if(p.reactive)throw new Error(`resources.${o} has both global: true and reactive: true. global resources live in DappStorage (shared), not in UserStorage. Reactive writes operate between two UserStorage objects and are incompatible with global resources.`);if(p.listable)throw new Error(`resources.${o} has both global: true and listable: true. global resources live in DappStorage and cannot be individually listed for sale. listable requires per-user ownership in UserStorage.`);if(p.transferable)throw new Error(`resources.${o} has both global: true and transferable: true. global resources live in DappStorage and are not owned by individual users. transferable requires per-user state in UserStorage or ObjectStorage.`)}p.fungible&&p.listable&&t&&te(`resources.${U.bold(o)} has both ${U.cyan("fungible: true")} and ${U.cyan("listable: true")}. The generated ${U.green(`list_${o}`)} entry function will include an ${U.cyan("amount")} parameter for partial listings.`),p.transferable&&!f.has(o)&&t&&te(`resources.${U.bold(o)} has ${U.cyan("transferable: true")} but is not referenced in any ${U.cyan("objects.accepts")} or ${U.cyan("scenes.accepts")}. The cross-layer transfer functions will not be generated.`)}}import R from"node:path";async function Ct(e,t,s,n=1){console.log(`
1227
- \u{1F680} Starting Code 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(` \u2514\u2500 Settlement Mode: ${n===1?"USER_PAYS":"DAPP_SUBSIDIZES"}`),$e(t),Ye(e,t),console.log(e);let r=R.join(e,"src",t.name);V(`${r}`)&&ae(`${r}/sources/codegen`),V(`${r}/Move.toml`)||await he(t,e);let i=R.join(r,"sources","codegen","genesis.move");V(i)||await Ae(t,i,n);let d=R.join(r,"sources","codegen","init_test.move");V(d)||await Te(t,d);let l=R.join(r,"sources","codegen","dapp_key.move");V(l)||await xe(t,l);let u=R.join(r,"sources","scripts","deploy_hook.move");V(u)||await ke(t,u,n);let g=R.join(r,"sources","codegen","resources");await Ue(t,g);let $=R.join(r,"sources","codegen","objects");await Pe(t,$);let f=R.join(r,"sources","codegen","permits");await Le(t,f);let o=R.join(r,"sources","codegen","scenes");await Re(t,o);let b=R.join(r,"sources","codegen","enums");V(b)||await Oe(t,b),t.errors&&await je(t.name,t.errors,e);let p=R.join(r,"sources","codegen","user_storage_init.move");await ze(t,p),await De(t,e),await Se(t,e),console.log(`
1242
+ Changing field types corrupts existing data. Use a new name (e.g. "${n}_v2") for breaking changes.`)}}}function Ve(e,t){let s=St.join(e,`${t.name}.lock.json`),n=Ct(t);if(vt(s)){let r;try{r=JSON.parse(kt(s,"utf-8"))}catch{console.warn(He.yellow("[dubhe]")+` Could not parse ${He.bold(s)}, skipping break-check.`),We(s,JSON.stringify(n,null,2)+`
1243
+ `,"utf-8");return}ge("resources",r.resources??{},n.resources),ge("objects",r.objects??{},n.objects),ge("scenes",r.scenes??{},n.scenes)}We(s,JSON.stringify(n,null,2)+`
1244
+ `,"utf-8")}import U from"chalk";var se=e=>console.warn(U.yellow("[dubhe codegen]")+U.yellow(" WARNING: ")+e);function Ge(e){$e(e,!1)}function $e(e,t=!0){let s=e.resources??{},n=e.objects??{},r=e.permits??{},i=e.scenes??{},d=new Set(Object.keys(s)),l=new Set(Object.keys(n)),u=new Set(Object.keys(r)),$=new Set(Object.keys(i)),g=new Set;for(let o of d)(l.has(o)||u.has(o)||$.has(o))&&g.add(o);for(let o of l)(u.has(o)||$.has(o))&&g.add(o);for(let o of u)$.has(o)&&g.add(o);if(g.size>0)throw new Error(`Duplicate module names found across resources/objects/permits/scenes: ${[...g].sort().join(", ")}`);let f=new Set;for(let[o,b]of Object.entries(n)){for(let p of b.accepts??[]){f.add(p);let h=s[p];if(!h)throw new Error(`objects.${o}.accepts references '${p}' which is not defined in resources`);if(typeof h!="string"&&!h.transferable)throw new Error(`objects.${o}.accepts includes '${p}', but resources.${p} is missing transferable: true. Add transferable: true to resources.${p} to enable cross-storage transfers.`)}for(let p of b.acceptsFrom??[]){let h=!!n[p],c=!!i[p];if(!h&&!c)throw new Error(`objects.${o}.acceptsFrom references '${p}' which is not defined in objects or scenes`)}}for(let[o,b]of Object.entries(i)){if(!b.authorization)throw new Error(`scenes.${o} is missing authorization. Use { kind: 'system' } or { kind: 'permit', permit: '<permit_name>' }.`);if(b.authorization.kind==="permit"){if(!r[b.authorization.permit])throw new Error(`scenes.${o}.authorization references permit '${b.authorization.permit}', but permits.${b.authorization.permit} is not defined`)}else if(b.authorization.kind!=="system")throw new Error(`scenes.${o}.authorization.kind must be 'system' or 'permit'`);for(let p of b.accepts??[]){f.add(p);let h=s[p];if(!h)throw new Error(`scenes.${o}.accepts references '${p}' which is not defined in resources`);if(typeof h!="string"&&!h.transferable)throw new Error(`scenes.${o}.accepts includes '${p}', but resources.${p} is missing transferable: true. Add transferable: true to resources.${p} to enable cross-storage transfers.`)}for(let p of b.acceptsFrom??[]){let h=!!n[p],c=!!i[p];if(!h&&!c)throw new Error(`scenes.${o}.acceptsFrom references '${p}' which is not defined in objects or scenes`)}}for(let[o,b]of Object.entries(s)){if(typeof b=="string")continue;let p=b;if(p.offchain){if(p.listable)throw new Error(`resources.${o} has both offchain: true and listable: true. offchain resources emit events but store no on-chain state, so there is nothing to take out and place into a Listing.`);if(p.transferable)throw new Error(`resources.${o} has both offchain: true and transferable: true. offchain resources have no on-chain state to transfer between storages.`);if(p.reactive)throw new Error(`resources.${o} has both offchain: true and reactive: true. reactive writes target on-chain state, which offchain resources do not have.`);p.fungible&&t&&se(`resources.${U.bold(o)} has both ${U.cyan("offchain: true")} and ${U.cyan("fungible: true")}. offchain fungible events are emitted only; no on-chain balance is maintained and no add/sub functions are generated. This is unusual \u2014 verify your intent.`)}if(p.reactive&&p.fungible&&t&&se(`resources.${U.bold(o)} has both ${U.cyan("reactive: true")} and ${U.cyan("fungible: true")}. Fungible quantity changes (add/sub) do not suit reactive cross-user writes. Consider using a transfer function instead.`),p.global){if(p.reactive)throw new Error(`resources.${o} has both global: true and reactive: true. global resources live in DappStorage (shared), not in UserStorage. Reactive writes operate between two UserStorage objects and are incompatible with global resources.`);if(p.listable)throw new Error(`resources.${o} has both global: true and listable: true. global resources live in DappStorage and cannot be individually listed for sale. listable requires per-user ownership in UserStorage.`);if(p.transferable)throw new Error(`resources.${o} has both global: true and transferable: true. global resources live in DappStorage and are not owned by individual users. transferable requires per-user state in UserStorage or ObjectStorage.`)}p.fungible&&p.listable&&t&&se(`resources.${U.bold(o)} has both ${U.cyan("fungible: true")} and ${U.cyan("listable: true")}. The generated ${U.green(`list_${o}`)} entry function will include an ${U.cyan("amount")} parameter for partial listings.`),p.transferable&&!f.has(o)&&t&&se(`resources.${U.bold(o)} has ${U.cyan("transferable: true")} but is not referenced in any ${U.cyan("objects.accepts")} or ${U.cyan("scenes.accepts")}. The cross-layer transfer functions will not be generated.`)}}import L from"node:path";async function wt(e,t,s,n=1){console.log(`
1245
+ \u{1F680} Starting Code 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(` \u2514\u2500 Settlement Mode: ${n===1?"USER_PAYS":"DAPP_SUBSIDIZES"}`),$e(t),Ve(e,t),console.log(e);let r=L.join(e,"src",t.name);V(`${r}`)&&ce(`${r}/sources/codegen`),V(`${r}/Move.toml`)||await ve(t,e);let i=L.join(r,"sources","codegen","genesis.move");V(i)||await Ee(t,i,n);let d=L.join(r,"sources","codegen","init_test.move");V(d)||await Ae(t,d);let l=L.join(r,"sources","codegen","dapp_key.move");V(l)||await Ce(t,l);let u=L.join(r,"sources","scripts","deploy_hook.move");V(u)||await Se(t,u,n);let $=L.join(r,"sources","codegen","resources");await Pe(t,$);let g=L.join(r,"sources","codegen","objects");await Re(t,g);let f=L.join(r,"sources","codegen","permits");await Le(t,f);let o=L.join(r,"sources","codegen","scenes");await ze(t,o);let b=L.join(r,"sources","codegen","enums");V(b)||await Fe(t,b),t.errors&&await Te(t.name,t.errors,e);let p=L.join(r,"sources","codegen","user_storage_init.move");await Be(t,p),await je(t,e),await xe(t,e),console.log(`
1228
1246
  \u2705 Code Generation Complete!
1229
- `)}var Xs=Ct;var er=e=>(Ve(e),e);import{findUp as wt}from"find-up";import ge from"path";import Dt from"esbuild";var se=class extends Error{name="NotInsideProjectError";message="You are not inside a Dubhe project"};import{rmSync as jt}from"fs";import{pathToFileURL as Tt}from"url";import At from"os";var Et=["dubhe.config.js","dubhe.config.mjs","dubhe.config.ts","dubhe.config.mts"],_e="dubhe.config.example.mjs";async function pr(e){e=await Ge(e);try{return await Dt.build({entryPoints:[e],format:"esm",outfile:_e,platform:"node",bundle:!0,packages:"external"}),e=await Ge(_e,!0),(await import(e+`?update=${Date.now()}`)).dubheConfig}finally{jt(_e,{force:!0})}}async function Ge(e,t){return e===void 0?e=await Ot():ge.isAbsolute(e)||(e=ge.join(process.cwd(),e),e=ge.normalize(e)),t&&At.platform()==="win32"?Tt(e).href:e}async function Ot(){let e=await wt(Et);if(e===void 0)throw new se;return e}var Ft=(s=>(s.Event="event",s.Schema="schema",s))(Ft||{});export{Ft as SubscriptionKind,Ye as checkAndUpdateLock,Ct as codegen,er as defineConfig,A as formatAndWriteMove,Mt as formatMove,Pe as generateObjects,Re as generateScenes,pr as loadConfig,Xs as schemaGen};
1247
+ `)}var Qs=wt;var tr=e=>(Ge(e),e);import{findUp as Dt}from"find-up";import _e from"path";import jt from"esbuild";var re=class extends Error{name="NotInsideProjectError";message="You are not inside a Dubhe project"};import{rmSync as Tt}from"fs";import{pathToFileURL as At}from"url";import Et from"os";var Ot=["dubhe.config.js","dubhe.config.mjs","dubhe.config.ts","dubhe.config.mts"],me="dubhe.config.example.mjs";async function dr(e){e=await qe(e);try{return await jt.build({entryPoints:[e],format:"esm",outfile:me,platform:"node",bundle:!0,packages:"external"}),e=await qe(me,!0),(await import(e+`?update=${Date.now()}`)).dubheConfig}finally{Tt(me,{force:!0})}}async function qe(e,t){return e===void 0?e=await Ft():_e.isAbsolute(e)||(e=_e.join(process.cwd(),e),e=_e.normalize(e)),t&&Et.platform()==="win32"?At(e).href:e}async function Ft(){let e=await Dt(Ot);if(e===void 0)throw new re;return e}var Kt=(s=>(s.Event="event",s.Schema="schema",s))(Kt||{});export{Kt as SubscriptionKind,Ve as checkAndUpdateLock,wt as codegen,tr as defineConfig,A as formatAndWriteMove,Ut as formatMove,Re as generateObjects,ze as generateScenes,dr as loadConfig,Qs as schemaGen};
1230
1248
  //# sourceMappingURL=index.js.map