@0xobelisk/sui-common 0.5.7 → 0.5.9

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,21 +1,19 @@
1
- import*as m from"prettier";import*as ee from"prettier-plugin-rust";async function ke(e,t){let r;t&&(r=await m.resolveConfig(t));try{return m.format(e,{plugins:[ee],printWidth:120,semi:!0,tabWidth:2,useTabs:!1,bracketSpacing:!0,...r})}catch(s){let o;return s instanceof Error?o=s.message:o=s,console.log(`Error during output formatting: ${o}`),e}}async function x(e){return m.format(e,{parser:"typescript"})}import{mkdirSync as E,writeFileSync as A}from"fs";import{dirname as C}from"path";async function n(e,t,r){E(C(t),{recursive:!0}),A(t,e),r!==void 0&&console.log(`${r}: ${t}`)}async function Te(e,t,r){let s=await x(e);E(C(t),{recursive:!0}),A(t,s),console.log(`${r}: ${t}`)}function Ee(e){return e.replace(/\\/g,"/")}import{existsSync as le}from"fs";import l from"fs";function k(e){l.existsSync(e)&&(l.readdirSync(e).forEach(t=>{let r=`${e}/${t}`;l.lstatSync(r).isDirectory()?k(r):l.unlinkSync(r)}),l.rmdirSync(e))}function $(e){return e.charAt(0).toUpperCase()+e.slice(1)}function M(e){return e=e.charAt(0).toUpperCase()+e.slice(1),e.replace(/(_\w)/g,r=>r[1].toUpperCase())+"Data"}function j(e,t){let r=[];return Object.entries(t).forEach(([s,o])=>{typeof o=="object"&&o.ephemeral||r.push(` use ${e}::${s}_schema;`)}),r}function W(e){let t=[];return Object.entries(e).forEach(([r,s])=>{typeof s=="object"&&s.ephemeral||t.push(` ${r}_schema::register(&mut _obelisk_world, &admin_cap, ctx);`)}),t}function h(e,t){return t.map(r=>` friend ${e}::${r};`).join(`
2
- `)+`
3
- friend ${e}::deploy_hook;`}function _(e,t){return typeof e=="string"?[`${t}value`]:Object.entries(e).map(([r,s])=>`${t}${r}`)}function b(e){return/^0x[a-fA-F0-9]+$/.test(e)}function te(e,t){if(typeof t=="string"||typeof t=="boolean"||typeof t=="number")return e==="string"?[`string(b"${t}")`]:typeof t=="string"&&b(t)?[`@${t}`]:[`${t}`];if(Array.isArray(t))if(t.length>0){if(typeof t[0]=="string"||typeof t[0]=="boolean"||typeof t[0]=="number")return e==="vector<string>"?[`vector[${t.map(r=>`string(b"${r}")`)}]`]:typeof t[0]=="string"&&b(t[0])?[`vector[${t.map(r=>`@${r}`)}]`]:[`vector[${t.map(r=>`${r}`)}]`];if(typeof t=="object")return[`vector[${t.map(s=>`vector[${s.map(o=>`${o}`)}]`)}]`]}else return e==="vector<string>"?'vector[string(b"")]':"vector[]";else if(typeof t=="object")return Object.entries(t).map(([s,o])=>{if(typeof o=="string"||typeof o=="boolean"||typeof o=="number"){if(typeof e=="string"){if(e==="string")return`string(b"${o}")`}else if(e[s]==="string")return`string(b"${o}")`;return typeof o=="string"&&b(o)?`@${o}`:`${o}`}else if(Array.isArray(o)){if(o.length>0){if(typeof o[0]=="string"||typeof o[0]=="boolean"||typeof o[0]=="number"){if(typeof e=="string"){if(e==="vector<string>")return`vector[${o.map(i=>`string(b"${i}")`)}]`}else if(e[s]==="vector<string>")return`vector[${o.map(i=>`string(b"${i}")`)}]`;return typeof o[0]=="string"&&b(o[0])?`vector[${o.map(i=>`@${i}`)}]`:`vector[${o.map(i=>`${i}`)}]`}else if(typeof o=="object")return`vector[${o.map(u=>`vector[${u.map(p=>`${p}`)}]`)}]`}else if(typeof e!="string")return e[s]==="vector<string>"?'vector[string(b"")]':"vector[]"}});return[]}function N(e){return typeof e=="string"?e:`(${Object.entries(e).map(([t,r])=>`${r}`)})`}function c(e,t){return typeof e=="string"?[`${t}value: ${e}`]:Object.entries(e).map(([r,s])=>`${t}${r}: ${s}`)}function re(e,t){return typeof e=="string"?[`${t}_obelisk_data.value`]:Object.entries(e).map(([r,s])=>`${t}_obelisk_data.${r}`)}function f(e){return` ${_(e,"// ").join(`
4
- `)}`}function g(e,t,r=!1){return` struct ${e} has copy, drop ${r?"":", store"} {
5
- ${c(t," ").join(`,
1
+ import*as l from"prettier";import*as te from"prettier-plugin-rust";async function ke(e,t){let r;t&&(r=await l.resolveConfig(t));try{return l.format(e,{plugins:[te],printWidth:120,semi:!0,tabWidth:2,useTabs:!1,bracketSpacing:!0,...r})}catch(s){let o;return s instanceof Error?o=s.message:o=s,console.log(`Error during output formatting: ${o}`),e}}async function T(e){return l.format(e,{parser:"typescript"})}import{mkdirSync as A,writeFileSync as E}from"fs";import{dirname as x}from"path";async function i(e,t,r){A(x(t),{recursive:!0}),E(t,e),r!==void 0&&console.log(`${r}: ${t}`)}async function Te(e,t,r){let s=await T(e);A(x(t),{recursive:!0}),E(t,s),console.log(`${r}: ${t}`)}function Ee(e){return e.replace(/\\/g,"/")}import{existsSync as de}from"fs";import _ from"fs";function k(e){_.existsSync(e)&&(_.readdirSync(e).forEach(t=>{let r=`${e}/${t}`;_.lstatSync(r).isDirectory()?k(r):_.unlinkSync(r)}),_.rmdirSync(e))}function $(e){return e.charAt(0).toUpperCase()+e.slice(1)}function C(e){return e=e.charAt(0).toUpperCase()+e.slice(1),e.replace(/(_\w)/g,r=>r[1].toUpperCase())+"Data"}function M(e,t){let r=[];return Object.entries(t).forEach(([s,o])=>{typeof o=="object"&&o.ephemeral||r.push(` use ${e}::${s}_schema;`)}),r}function W(e){let t=[];return Object.entries(e).forEach(([r,s])=>{typeof s=="object"&&s.ephemeral||t.push(` ${r}_schema::register(&mut _obelisk_world, &admin_cap, ctx);`)}),t}function c(e,t){return typeof e=="string"?[`${t}value`]:Object.entries(e).map(([r,s])=>`${t}${r}`)}function b(e){return/^0x[a-fA-F0-9]+$/.test(e)}function re(e,t){if(typeof t=="string"||typeof t=="boolean"||typeof t=="number")return e==="string"?[`string(b"${t}")`]:typeof t=="string"&&b(t)?[`@${t}`]:[`${t}`];if(Array.isArray(t))if(t.length>0){if(typeof t[0]=="string"||typeof t[0]=="boolean"||typeof t[0]=="number")return e==="vector<string>"?[`vector[${t.map(r=>`string(b"${r}")`)}]`]:typeof t[0]=="string"&&b(t[0])?[`vector[${t.map(r=>`@${r}`)}]`]:[`vector[${t.map(r=>`${r}`)}]`];if(typeof t=="object")return[`vector[${t.map(s=>`vector[${s.map(o=>`${o}`)}]`)}]`]}else return e==="vector<string>"?'vector[string(b"")]':"vector[]";else if(typeof t=="object")return Object.entries(t).map(([s,o])=>{if(typeof o=="string"||typeof o=="boolean"||typeof o=="number"){if(typeof e=="string"){if(e==="string")return`string(b"${o}")`}else if(e[s]==="string")return`string(b"${o}")`;return typeof o=="string"&&b(o)?`@${o}`:`${o}`}else if(Array.isArray(o)){if(o.length>0){if(typeof o[0]=="string"||typeof o[0]=="boolean"||typeof o[0]=="number"){if(typeof e=="string"){if(e==="vector<string>")return`vector[${o.map(n=>`string(b"${n}")`)}]`}else if(e[s]==="vector<string>")return`vector[${o.map(n=>`string(b"${n}")`)}]`;return typeof o[0]=="string"&&b(o[0])?`vector[${o.map(n=>`@${n}`)}]`:`vector[${o.map(n=>`${n}`)}]`}else if(typeof o=="object")return`vector[${o.map(u=>`vector[${u.map(p=>`${p}`)}]`)}]`}else if(typeof e!="string")return e[s]==="vector<string>"?'vector[string(b"")]':"vector[]"}});return[]}function j(e){return typeof e=="string"?e:`(${Object.entries(e).map(([t,r])=>`${r}`)})`}function d(e,t){return typeof e=="string"?[`${t}value: ${e}`]:Object.entries(e).map(([r,s])=>`${t}${r}: ${s}`)}function se(e,t){return typeof e=="string"?[`${t}_obelisk_data.value`]:Object.entries(e).map(([r,s])=>`${t}_obelisk_data.${r}`)}function g(e){return` ${c(e,"// ").join(`
2
+ `)}`}function f(e,t,r=!1){return` public struct ${e} has copy, drop ${r?"":", store"} {
3
+ ${d(t," ").join(`,
6
4
  `)}
7
5
  }
8
- `}function S(e,t){return` public fun new(${c(t,"").join(", ")}): ${e} {
6
+ `}function h(e,t){return` public fun new(${d(t,"").join(", ")}): ${e} {
9
7
  ${e} {
10
- ${_(t," ").join(`,
8
+ ${c(t," ").join(`,
11
9
  `)}
12
10
  }
13
11
  }
14
- `}function R(e){return` public fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, ctx: &mut TxContext) {
15
- world::add_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID, table::new<address, ${e}>(ctx), admin_cap);
16
- }`}function O(e,t){return` public(friend) fun set(_obelisk_world: &mut World, _obelisk_entity_key: address, ${c(t," ")}) {
17
- let _obelisk_schema = world::get_mut_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
18
- let _obelisk_data = new(${_(t," ")});
12
+ `}function N(e){return` public fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, ctx: &mut TxContext) {
13
+ schema::add<Table<address,${e}>>(_obelisk_world, SCHEMA_ID, table::new<address, ${e}>(ctx), admin_cap);
14
+ }`}function R(e,t){return` public(package) fun set(_obelisk_world: &mut World, _obelisk_entity_key: address, ${d(t," ")}) {
15
+ let _obelisk_schema = schema::get_mut<Table<address,${e}>, AppKey>(app_key::new(), _obelisk_world, SCHEMA_ID);
16
+ let _obelisk_data = new(${c(t," ")});
19
17
  if(table::contains<address, ${e}>(_obelisk_schema, _obelisk_entity_key)) {
20
18
  *table::borrow_mut<address, ${e}>(_obelisk_schema, _obelisk_entity_key) = _obelisk_data;
21
19
  } else {
@@ -23,86 +21,91 @@ ${_(t," ").join(`,
23
21
  };
24
22
  events::emit_set(SCHEMA_ID, SCHEMA_TYPE, some(_obelisk_entity_key), _obelisk_data)
25
23
  }
26
- `}function I(e){return` public(friend) fun remove(_obelisk_world: &mut World, _obelisk_entity_key: address) {
27
- let _obelisk_schema = world::get_mut_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
24
+ `}function O(e){return` public(package) fun remove(_obelisk_world: &mut World, _obelisk_entity_key: address) {
25
+ let _obelisk_schema = schema::get_mut<Table<address,${e}>, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
28
26
  assert!(table::contains<address, ${e}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
29
27
  table::remove(_obelisk_schema, _obelisk_entity_key);
30
28
  events::emit_remove(SCHEMA_ID, _obelisk_entity_key)
31
29
  }
32
- `}function D(e,t){return typeof t=="string"?"":`
33
- `+Object.entries(t).map(([r,s])=>` public(friend) fun set_${r}(_obelisk_world: &mut World, _obelisk_entity_key: address, ${r}: ${s}) {
34
- let _obelisk_schema = world::get_mut_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
30
+ `}function I(e,t){return typeof t=="string"?"":`
31
+ `+Object.entries(t).map(([r,s])=>` public(package) fun set_${r}(_obelisk_world: &mut World, _obelisk_entity_key: address, ${r}: ${s}) {
32
+ let _obelisk_schema = schema::get_mut<Table<address,${e}>, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
35
33
  assert!(table::contains<address, ${e}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
36
34
  let _obelisk_data = table::borrow_mut<address, ${e}>(_obelisk_schema, _obelisk_entity_key);
37
35
  _obelisk_data.${r} = ${r};
38
36
  events::emit_set(SCHEMA_ID, SCHEMA_TYPE, some(_obelisk_entity_key), *_obelisk_data)
39
37
  }
40
38
  `).join(`
41
- `)}function F(e,t){return` public fun get(_obelisk_world: &World, _obelisk_entity_key: address): ${N(t)} {
42
- let _obelisk_schema = world::get_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
39
+ `)}function D(e,t){return` public fun get(_obelisk_world: &World, _obelisk_entity_key: address): ${j(t)} {
40
+ let _obelisk_schema = schema::get<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
43
41
  assert!(table::contains<address, ${e}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
44
42
  let _obelisk_data = table::borrow<address, ${e}>(_obelisk_schema, _obelisk_entity_key);
45
43
  (
46
- ${re(t," ").join(`,
44
+ ${se(t," ").join(`,
47
45
  `)}
48
46
  )
49
47
  }
50
- `}function H(e,t){return typeof t=="string"?"":`
48
+ `}function F(e,t){return typeof t=="string"?"":`
51
49
  `+Object.entries(t).map(([r,s])=>` public fun get_${r}(_obelisk_world: &World, _obelisk_entity_key: address): ${s} {
52
- let _obelisk_schema = world::get_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
50
+ let _obelisk_schema = schema::get<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
53
51
  assert!(table::contains<address, ${e}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
54
52
  let _obelisk_data = table::borrow<address, ${e}>(_obelisk_schema, _obelisk_entity_key);
55
53
  _obelisk_data.${r}
56
54
  }
57
55
  `).join(`
58
- `)}function V(e){return` public fun contains(_obelisk_world: &World, _obelisk_entity_key: address): bool {
59
- let _obelisk_schema = world::get_schema<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
56
+ `)}function H(e){return` public fun contains(_obelisk_world: &World, _obelisk_entity_key: address): bool {
57
+ let _obelisk_schema = schema::get<Table<address,${e}>>(_obelisk_world, SCHEMA_ID);
60
58
  table::contains<address, ${e}>(_obelisk_schema, _obelisk_entity_key)
61
- }`}function B(e,t,r){return` public fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, _ctx: &mut TxContext) {
62
- let _obelisk_schema = new(${te(t,r)});
63
- world::add_schema<${e}>(_obelisk_world, SCHEMA_ID, _obelisk_schema, admin_cap);
59
+ }`}function V(e,t,r){return` public fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, _ctx: &mut TxContext) {
60
+ let _obelisk_schema = new(${re(t,r)});
61
+ schema::add<${e}>(_obelisk_world, SCHEMA_ID, _obelisk_schema, admin_cap);
64
62
  events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema);
65
- }`}function U(e,t){return` public(friend) fun set(_obelisk_world: &mut World, ${c(t," ")}) {
66
- let _obelisk_schema = world::get_mut_schema<${e}>(_obelisk_world, SCHEMA_ID);
67
- ${typeof t=="string"?" _obelisk_schema.value = value;":Object.entries(t).map(([r,s])=>` _obelisk_schema.${r} = ${r};`).join(`
68
- `)}
69
- }`}function G(e,t){return typeof t=="string"?"":`
63
+ }`}function B(e,t){return` public(package) fun set(_obelisk_world: &mut World, ${d(t," ")}) {
64
+ let _obelisk_schema = schema::get_mut<${e}, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
65
+ ${typeof t=="string"?` _obelisk_schema.value = value;
66
+ events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema.value);`:` let _obelisk_data = new(${c(t," ")});
67
+ *_obelisk_schema = _obelisk_data;
68
+ events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_data);`}
69
+ }`}function K(e,t){return typeof t=="string"?"":`
70
70
  `+Object.entries(t).map(([r,s])=>`
71
- public(friend) fun set_${r}(_obelisk_world: &mut World, ${r}: ${s}) {
72
- let _obelisk_schema = world::get_mut_schema<${e}>(_obelisk_world, SCHEMA_ID);
71
+ public(package) fun set_${r}(_obelisk_world: &mut World, ${r}: ${s}) {
72
+ let _obelisk_schema = schema::get_mut<${e}, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
73
73
  _obelisk_schema.${r} = ${r};
74
74
  events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), *_obelisk_schema)
75
75
  }`).join(`
76
- `)}function Y(e,t){return` public fun get(_obelisk_world: &World): ${N(t)} {
77
- let _obelisk_schema = world::get_schema<${e}>(_obelisk_world, SCHEMA_ID);
76
+ `)}function U(e,t){return` public fun get(_obelisk_world: &World): ${j(t)} {
77
+ let _obelisk_schema = schema::get<${e}>(_obelisk_world, SCHEMA_ID);
78
78
  (
79
79
  ${typeof t=="string"?" _obelisk_schema.value":Object.entries(t).map(([r,s])=>` _obelisk_schema.${r},`).join(`
80
80
  `)}
81
81
  )
82
- }`}function L(e,t){return typeof t=="string"?"":`
82
+ }`}function Y(e,t){return typeof t=="string"?"":`
83
83
  `+Object.entries(t).map(([r,s])=>`
84
84
  public fun get_${r}(_obelisk_world: &World): ${s} {
85
- let _obelisk_schema = world::get_schema<${e}>(_obelisk_world, SCHEMA_ID);
85
+ let _obelisk_schema = schema::get<${e}>(_obelisk_world, SCHEMA_ID);
86
86
  _obelisk_schema.${r}
87
87
  }`).join(`
88
- `)}import{existsSync as se}from"fs";function K(e,t){e.systems.map(r=>{if(!se(`${t}/contracts/${e.name}/sources/system/${r}.move`)){let s=`module ${e.name}::${r} {
88
+ `)}import{existsSync as oe}from"fs";function G(e,t){e.systems.map(r=>{if(!oe(`${t}/contracts/${e.name}/sources/system/${r}.move`)){let s=`module ${e.name}::${r} {
89
89
 
90
90
  }
91
- `;n(s,`${t}/contracts/${e.name}/sources/system/${r}.move`,"formatAndWriteMove")}})}function z(e,t){let r=`[package]
91
+ `;i(s,`${t}/contracts/${e.name}/sources/system/${r}.move`,"formatAndWriteMove")}})}function z(e,t){let r=`[package]
92
92
  name = "${e.name}"
93
93
  version = "0.0.1"
94
+ edition = "2024.beta"
94
95
 
95
96
  [dependencies]
96
- Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "testnet-v1.23.0" }
97
+ Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.31.1" }
98
+ # Obelisk = { git = "https://github.com/0xobelisk/obelisk-engine.git", subdir = "packages/obelisk-framework", rev = "mainnet-v1.31.1" }
99
+ Obelisk = { local = "/Volumes/project/obelisk-engine/packages/obelisk-framework" }
97
100
 
98
101
  [addresses]
99
102
  sui = "0x2"
103
+ obelisk = "0x6c93abd6e076235f51c6dd95b4adf9b0d4f5b6f6766c6a7b6653101a78a04d8c"
100
104
  ${e.name} = "0x0"
101
- `;n(r,`${t}/contracts/${e.name}/Move.toml`,"formatAndWriteMove")}function P(e,t){let r=`module ${e.name}::entity_key {
105
+ `;i(r,`${t}/contracts/${e.name}/Move.toml`,"formatAndWriteMove")}function L(e,t){let r=`module ${e.name}::entity_key {
102
106
  use sui::hash::keccak256;
103
107
  use sui::address;
104
- use sui::object;
105
- use std::vector;
108
+ use sui::bcs;
106
109
 
107
110
  public fun from_object<T: key + store>(object: &T): address {
108
111
  object::id_address(object)
@@ -116,40 +119,45 @@ ${e.name} = "0x0"
116
119
  address::from_u256(x)
117
120
  }
118
121
 
119
- public fun from_address_with_seed(addr: address, seed: vector<u8>): address {
120
- let data = address::to_bytes(addr);
122
+ public fun from_address_with_seed(addr: address, seed: vector<u8>): address {
123
+ let mut data = address::to_bytes(addr);
121
124
  vector::append(&mut data, seed);
122
125
  from_bytes(data)
123
126
  }
124
127
 
125
128
  public fun from_address_with_u256(addr: address, x: u256): address {
126
- let data = address::to_bytes(addr);
129
+ let mut data = address::to_bytes(addr);
127
130
  vector::append(&mut data, bcs::to_bytes<u256>(&x));
128
131
  from_bytes(data)
129
132
  }
130
133
 
131
134
  public fun from_object_with_seed<T: key + store>(object: &T, seed: vector<u8>): address {
132
- let data = address::to_bytes(object::id_address(object));
133
- vector::append(&mut data, seed);
134
- from_bytes(data)
135
+ let mut data = address::to_bytes(object::id_address(object));
136
+ vector::append(&mut data, seed);
137
+ from_bytes(data)
135
138
  }
136
139
 
137
140
  public fun from_object_with_u256<T: key + store>(object: &T, x: u256): address {
138
- let data = address::to_bytes(object::id_address(object));
139
- vector::append(&mut data, bcs::to_bytes<u256>(&x));
140
- from_bytes(data)
141
+ let mut data = address::to_bytes(object::id_address(object));
142
+ vector::append(&mut data, bcs::to_bytes<u256>(&x));
143
+ from_bytes(data)
141
144
  }
142
145
  }
143
- `;n(r,`${t}/contracts/${e.name}/sources/entity_key.move`,"formatAndWriteMove")}function Q(e,t){let r=`module ${e.name}::init {
146
+ `;i(r,`${t}/contracts/${e.name}/sources/entity_key.move`,"formatAndWriteMove")}function P(e,t){let r=`#[allow(lint(share_owned))]
147
+
148
+ module ${e.name}::init {
144
149
  use std::ascii::string;
145
- use sui::transfer;
146
- use sui::tx_context::{Self, TxContext};
147
- use ${e.name}::world;
148
- ${j(e.name,e.schemas).join(`
150
+ use ${e.name}::app_key::AppKey;
151
+ use obelisk::access_control;
152
+ use obelisk::world;
153
+ ${M(e.name,e.schemas).join(`
149
154
  `)}
150
155
 
151
156
  fun init(ctx: &mut TxContext) {
152
- let (_obelisk_world, admin_cap) = world::create(string(b"${$(e.name)}"), string(b"${$(e.description)}"),ctx);
157
+ let (mut _obelisk_world, admin_cap) = world::create(string(b"${$(e.name)}"), string(b"${$(e.description)}"),ctx);
158
+
159
+ // Authorize this application to access protected features of the World.
160
+ access_control::authorize_app<AppKey>(&admin_cap, &mut _obelisk_world);
153
161
 
154
162
  // Add Schema
155
163
  ${W(e.schemas).join(`
@@ -164,7 +172,111 @@ ${W(e.schemas).join(`
164
172
  init(ctx)
165
173
  }
166
174
  }
167
- `;n(r,`${t}/contracts/${e.name}/sources/codegen/init.move`,"formatAndWriteMove")}function q(e,t,r){oe(e,t,r),ne(e,t)}function oe(e,t,r){r===void 0&&(r=1);let s=`module ${e}::world {
175
+ `;i(r,`${t}/contracts/${e.name}/sources/codegen/init.move`,"formatAndWriteMove")}function ie(e){let t=[];for(let r of Object.keys(e.schemas)){let s=e.schemas[r],o,n,u,p=!1,v=!1,a=!1;if(typeof s=="string")n=s,s==="string"?(o="String",a=!0):s==="vector<string>"?(o="vector<String>",a=!0):o=s;else{if(n=s.valueType,typeof s.valueType=="string")s.valueType==="string"?(o="String",a=!0):s.valueType==="vector<string>"?(o="vector<String>",a=!0):o=s.valueType;else{o={...s.valueType};for(let m in o)o.hasOwnProperty(m)&&(o[m]==="string"?(o[m]="String",a=!0):o[m]==="vector<string>"&&(o[m]="vector<String>",a=!0))}u=s.defaultValue,p=s.ephemeral!==void 0?s.ephemeral:!1,v=s.defaultValue!==void 0}t.push({projectName:e.name,systems:e.systems,schemaName:r,structName:C(r),ephemeral:p,singleton:v,valueType:o,realType:n,defaultValue:u,needImportString:a})}return t}function Q(e,t){let r=ie(e);for(let s of r){let o;s.ephemeral?o=ne(s):s.defaultValue!==void 0?o=ae(s):o=ce(s),i(o,`${t}/contracts/${s.projectName}/sources/codegen/schemas/${s.schemaName}.move`,"formatAndWriteMove")}}function ne(e){return`module ${e.projectName}::${e.schemaName}_schema {
176
+ use std::option::none;
177
+ use obelisk::events;
178
+
179
+ const SCHEMA_ID: vector<u8> = b"${e.schemaName}";
180
+ const SCHEMA_TYPE: u8 = 2;
181
+
182
+ ${g(e.valueType)}
183
+ ${f(e.structName,e.valueType,e.ephemeral)}
184
+ public fun emit_${e.schemaName}(${d(e.valueType," ")}) {
185
+ events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), ${e.structName} { ${c(e.valueType," ")} })
186
+ }
187
+ }`}function ae(e){return`module ${e.projectName}::${e.schemaName}_schema {
188
+ ${e.needImportString?` use std::ascii::{String,string};
189
+ `:" "}use std::option::none;
190
+ use ${e.projectName}::app_key;
191
+ use ${e.projectName}::app_key::AppKey;
192
+ use obelisk::schema;
193
+ use obelisk::events;
194
+ use obelisk::world::{World, AdminCap};
195
+
196
+ const SCHEMA_ID: vector<u8> = b"${e.schemaName}";
197
+ const SCHEMA_TYPE: u8 = 1;
198
+
199
+ ${g(e.valueType)}
200
+ ${f(e.structName,e.valueType)}
201
+ ${h(e.structName,e.valueType)}
202
+ ${V(e.structName,e.realType,e.defaultValue)}
203
+
204
+ ${B(e.structName,e.valueType)}${K(e.structName,e.valueType)}
205
+
206
+ ${U(e.structName,e.valueType)}${Y(e.structName,e.valueType)}
207
+ }
208
+ `}function ce(e){return`module ${e.projectName}::${e.schemaName}_schema {
209
+ ${e.needImportString?` use std::ascii::String;
210
+ `:" "}use std::option::some;
211
+ use ${e.projectName}::app_key;
212
+ use ${e.projectName}::app_key::AppKey;
213
+ use sui::table::{Self, Table};
214
+ use obelisk::schema;
215
+ use obelisk::events;
216
+ use obelisk::world::{World, AdminCap};
217
+
218
+ /// Entity does not exist
219
+ const EEntityDoesNotExist: u64 = 0;
220
+
221
+ const SCHEMA_ID: vector<u8> = b"${e.schemaName}";
222
+ const SCHEMA_TYPE: u8 = 0;
223
+
224
+ ${g(e.valueType)}
225
+ ${f(e.structName,e.valueType)}
226
+ ${h(e.structName,e.valueType)}
227
+ ${N(e.structName)}
228
+
229
+ ${R(e.structName,e.valueType)}${I(e.structName,e.valueType)}
230
+ ${D(e.structName,e.valueType)}${F(e.structName,e.valueType)}
231
+ ${O(e.structName)}
232
+ ${H(e.structName)}
233
+ }
234
+ `}import{existsSync as q}from"fs";function J(e,t){if(!q(`${t}/contracts/${e.name}/sources/script/deploy_hook.move`)){let r=`module ${e.name}::deploy_hook {
235
+ use obelisk::world::{World, AdminCap};
236
+
237
+ /// Not the right admin for this world
238
+ const ENotAdmin: u64 = 0;
239
+
240
+ public entry fun run(world: &mut World, admin_cap: &AdminCap) {
241
+ assert!(world.admin() == object::id(admin_cap), ENotAdmin);
242
+
243
+ // Logic that needs to be automated once the contract is deployed
244
+
245
+ }
246
+
247
+ #[test_only]
248
+ public fun deploy_hook_for_testing(world: &mut World, admin_cap: &AdminCap){
249
+ run(world, admin_cap)
250
+ }
251
+ }
252
+ `;i(r,`${t}/contracts/${e.name}/sources/script/deploy_hook.move`,"formatAndWriteMove")}}function X(e,t){if(!q(`${t}/contracts/${e.name}/sources/script/migrate.move`)){let r=`module ${e.name}::migrate {
253
+ use obelisk::world::{World, AdminCap};
254
+
255
+ /// Not the right admin for this world
256
+ const ENotAdmin: u64 = 0;
257
+ const EWrongVersion: u64 = 1;
258
+ const ENotUpgrade: u64 = 2;
259
+ const VERSION: u64 = 1;
260
+
261
+ public entry fun run(world: &mut World, admin_cap: &AdminCap) {
262
+ assert!(world.admin() == object::id(admin_cap), ENotAdmin);
263
+ assert!(world.version() < VERSION, ENotUpgrade);
264
+ *obelisk::world::mut_version(world, admin_cap) = VERSION;
265
+ }
266
+
267
+ public fun assert_version(world: &World){
268
+ assert!(world.version() == VERSION, EWrongVersion);
269
+ }
270
+ }
271
+ `;i(r,`${t}/contracts/${e.name}/sources/script/migrate.move`,"formatAndWriteMove")}}function Z(e,t){let r=`module ${e.name}::app_key {
272
+ /// Authorization token for the app.
273
+ public struct AppKey has drop {}
274
+
275
+ public(package) fun new(): AppKey {
276
+ AppKey { }
277
+ }
278
+ }
279
+ `;i(r,`${t}/contracts/${e.name}/sources/codegen/app_key.move`,"formatAndWriteMove")}function it(e,t){let r="";t===void 0?r=process.cwd():r=t,de(`${r}/contracts/${e.name}`)?k(`${r}/contracts/${e.name}/sources/codegen`):(z(e,r),L(e,r)),G(e,r),J(e,r),X(e,r),Q(e,r),P(e,r),Z(e,r)}function ct(e,t,r){me(e,t,r),le(e,t)}function me(e,t,r){r===void 0&&(r=1);let s=`module ${e}::world {
168
280
  use std::ascii::{String, string};
169
281
  use std::vector;
170
282
  use sui::tx_context::TxContext;
@@ -263,7 +375,7 @@ ${W(e.schemas).join(`
263
375
  _obelisk_world.version = VERSION;
264
376
  }
265
377
  }
266
- `;n(s,`${t}/contracts/${e}/sources/codegen/eps/world.move`,"formatAndWriteMove")}function ne(e,t){let r=`module ${e}::events {
378
+ `;i(s,`${t}/contracts/${e}/sources/codegen/eps/world.move`,"formatAndWriteMove")}function le(e,t){let r=`module ${e}::events {
267
379
  use sui::event;
268
380
  use std::option::Option;
269
381
 
@@ -287,84 +399,5 @@ ${W(e.schemas).join(`
287
399
  event::emit(SchemaRemoveRecord { _obelisk_schema_id, _obelisk_entity_key })
288
400
  }
289
401
  }
290
- `;n(r,`${t}/contracts/${e}/sources/codegen/eps/events.move`,"formatAndWriteMove")}function ie(e){let t=[];for(let r of Object.keys(e.schemas)){let s=e.schemas[r],o,i,u,p=!1,T=!1,a=!1;if(typeof s=="string")i=s,s==="string"?(o="String",a=!0):s==="vector<string>"?(o="vector<String>",a=!0):o=s;else{if(i=s.valueType,typeof s.valueType=="string")s.valueType==="string"?(o="String",a=!0):s.valueType==="vector<string>"?(o="vector<String>",a=!0):o=s.valueType;else{o={...s.valueType};for(let d in o)o.hasOwnProperty(d)&&(o[d]==="string"?(o[d]="String",a=!0):o[d]==="vector<string>"&&(o[d]="vector<String>",a=!0))}u=s.defaultValue,p=s.ephemeral!==void 0?s.ephemeral:!1,T=s.defaultValue!==void 0}t.push({projectName:e.name,systems:e.systems,schemaName:r,structName:M(r),ephemeral:p,singleton:T,valueType:o,realType:i,defaultValue:u,needImportString:a})}return t}function J(e,t){let r=ie(e);for(let s of r){let o;s.ephemeral?o=ae(s):s.defaultValue!==void 0?o=ce(s):o=de(s),n(o,`${t}/contracts/${s.projectName}/sources/codegen/schemas/${s.schemaName}.move`,"formatAndWriteMove")}}function ae(e){return`module ${e.projectName}::${e.schemaName}_schema {
291
- use std::option::none;
292
- use ${e.projectName}::events;
293
-
294
- const SCHEMA_ID: vector<u8> = b"${e.schemaName}";
295
- const SCHEMA_TYPE: u8 = 2;
296
-
297
- ${f(e.valueType)}
298
- ${g(e.structName,e.valueType,e.ephemeral)}
299
- public fun emit_${e.schemaName}(${c(e.valueType," ")}) {
300
- events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), ${e.structName} { ${_(e.valueType," ")} })
301
- }
302
- }`}function ce(e){return`module ${e.projectName}::${e.schemaName}_schema {
303
- ${e.needImportString?` use std::ascii::{String,string};
304
- `:" "}use std::option::none;
305
- use sui::tx_context::TxContext;
306
- use ${e.projectName}::events;
307
- use ${e.projectName}::world::{Self, World, AdminCap};
308
- // Systems
309
- ${h(e.projectName,e.systems)}
310
-
311
- const SCHEMA_ID: vector<u8> = b"${e.schemaName}";
312
- const SCHEMA_TYPE: u8 = 1;
313
-
314
- ${f(e.valueType)}
315
- ${g(e.structName,e.valueType)}
316
- ${S(e.structName,e.valueType)}
317
- ${B(e.structName,e.realType,e.defaultValue)}
318
-
319
- ${U(e.structName,e.valueType)}${G(e.structName,e.valueType)}
320
-
321
- ${Y(e.structName,e.valueType)}${L(e.structName,e.valueType)}
322
- }
323
- `}function de(e){return`module ${e.projectName}::${e.schemaName}_schema {
324
- ${e.needImportString?` use std::ascii::String;
325
- `:" "}use std::option::some;
326
- use sui::tx_context::TxContext;
327
- use sui::table::{Self, Table};
328
- use ${e.projectName}::events;
329
- use ${e.projectName}::world::{Self, World, AdminCap};
330
-
331
- // Systems
332
- ${h(e.projectName,e.systems)}
333
-
334
- /// Entity does not exist
335
- const EEntityDoesNotExist: u64 = 0;
336
-
337
- const SCHEMA_ID: vector<u8> = b"${e.schemaName}";
338
- const SCHEMA_TYPE: u8 = 0;
339
-
340
- ${f(e.valueType)}
341
- ${g(e.structName,e.valueType)}
342
- ${S(e.structName,e.valueType)}
343
- ${R(e.structName)}
344
-
345
- ${O(e.structName,e.valueType)}${D(e.structName,e.valueType)}
346
- ${F(e.structName,e.valueType)}${H(e.structName,e.valueType)}
347
- ${I(e.structName)}
348
- ${V(e.structName)}
349
- }
350
- `}import{existsSync as me}from"fs";function X(e,t){if(!me(`${t}/contracts/${e.name}/sources/script/deploy_hook.move`)){let r=`module ${e.name}::deploy_hook {
351
- use ${e.name}::world::{World, AdminCap, get_admin};
352
- use sui::object;
353
-
354
- /// Not the right admin for this world
355
- const ENotAdmin: u64 = 0;
356
-
357
- public entry fun run(world: &mut World, admin_cap: &AdminCap) {
358
- assert!( get_admin(world) == object::id(admin_cap), ENotAdmin);
359
-
360
- // Logic that needs to be automated once the contract is deployed
361
-
362
- }
363
-
364
- #[test_only]
365
- public fun deploy_hook_for_testing(world: &mut World, admin_cap: &AdminCap){
366
- run(world, admin_cap)
367
- }
368
- }
369
- `;n(r,`${t}/contracts/${e.name}/sources/script/deploy_hook.move`,"formatAndWriteMove")}}function nt(e,t){let r="";t===void 0?r=process.cwd():r=t,le(`${r}/contracts/${e.name}`)?k(`${r}/contracts/${e.name}/sources/codegen`):(z(e,r),P(e,r)),K(e,r),X(e,r),J(e,r),q(e.name,r),Q(e,r)}import{findUp as _e}from"find-up";import w from"path";import ue from"esbuild";var y=class extends Error{name="NotInsideProjectError";message="You are not inside a Obelisk project"};import{rmSync as pe}from"fs";import{pathToFileURL as be}from"url";import fe from"os";var ge=["obelisk.config.js","obelisk.config.mjs","obelisk.config.ts","obelisk.config.mts"],v="obelisk.config.example.mjs";async function bt(e){e=await Z(e);try{return await ue.build({entryPoints:[e],format:"esm",outfile:v,platform:"node",bundle:!0,packages:"external"}),e=await Z(v,!0),(await import(e+`?update=${Date.now()}`)).obeliskConfig}finally{pe(v,{force:!0})}}async function Z(e,t){return e===void 0?e=await ye():w.isAbsolute(e)||(e=w.join(process.cwd(),e),e=w.normalize(e)),t&&fe.platform()==="win32"?be(e).href:e}async function ye(){let e=await _e(ge);if(e===void 0)throw new y;return e}export{n as formatAndWriteMove,Te as formatAndWriteTypescript,ke as formatMove,x as formatTypescript,q as generateEps,bt as loadConfig,Ee as posixPath,Z as resolveConfigPath,nt as worldgen};
402
+ `;i(r,`${t}/contracts/${e}/sources/codegen/eps/events.move`,"formatAndWriteMove")}import{findUp as _e}from"find-up";import S from"path";import ue from"esbuild";var y=class extends Error{name="NotInsideProjectError";message="You are not inside a Obelisk project"};import{rmSync as pe}from"fs";import{pathToFileURL as be}from"url";import ge from"os";var fe=["obelisk.config.js","obelisk.config.mjs","obelisk.config.ts","obelisk.config.mts"],w="obelisk.config.example.mjs";async function yt(e){e=await ee(e);try{return await ue.build({entryPoints:[e],format:"esm",outfile:w,platform:"node",bundle:!0,packages:"external"}),e=await ee(w,!0),(await import(e+`?update=${Date.now()}`)).obeliskConfig}finally{pe(w,{force:!0})}}async function ee(e,t){return e===void 0?e=await ye():S.isAbsolute(e)||(e=S.join(process.cwd(),e),e=S.normalize(e)),t&&ge.platform()==="win32"?be(e).href:e}async function ye(){let e=await _e(fe);if(e===void 0)throw new y;return e}export{i as formatAndWriteMove,Te as formatAndWriteTypescript,ke as formatMove,T as formatTypescript,ct as generateEps,yt as loadConfig,Ee as posixPath,ee as resolveConfigPath,it as worldgen};
370
403
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/codegen/utils/format.ts","../src/codegen/utils/formatAndWrite.ts","../src/codegen/utils/posixPath.ts","../src/codegen/utils/renderMove/worldgen.ts","../src/codegen/utils/renderMove/common.ts","../src/codegen/utils/renderMove/generateSystem.ts","../src/codegen/utils/renderMove/generateToml.ts","../src/codegen/utils/renderMove/generateEntityKey.ts","../src/codegen/utils/renderMove/generateInit.ts","../src/codegen/utils/renderMove/generateEps.ts","../src/codegen/utils/renderMove/generateSchema.ts","../src/codegen/utils/renderMove/generateScript.ts","../src/codegen/utils/config.ts","../src/codegen/utils/errors.ts"],"sourcesContent":["// import chalk from \"chalk\";\nimport * as prettier from \"prettier\";\nimport * as rustPlugin from \"prettier-plugin-rust\";\n\nexport async function formatMove(\n content: string,\n prettierConfigPath?: string\n): Promise<string> {\n let config;\n if (prettierConfigPath) {\n config = await prettier.resolveConfig(prettierConfigPath);\n }\n try {\n return prettier.format(content, {\n plugins: [rustPlugin],\n // parser: \"rustParse\",\n\n printWidth: 120,\n semi: true,\n tabWidth: 2,\n useTabs: false,\n bracketSpacing: true,\n\n ...config,\n });\n } catch (error) {\n let message;\n if (error instanceof Error) {\n message = error.message;\n } else {\n message = error;\n }\n console.log(`Error during output formatting: ${message}`);\n return content;\n }\n}\n\nexport async function formatTypescript(content: string): Promise<string> {\n return prettier.format(content, {\n parser: \"typescript\",\n });\n}\n","import { mkdirSync, writeFileSync } from \"fs\";\nimport { dirname } from \"path\";\nimport { formatMove, formatTypescript } from \"./format\";\n\nexport async function formatAndWriteMove(\n output: string,\n fullOutputPath: string,\n logPrefix?: string\n): Promise<void> {\n // const formattedOutput = await formatMove(output);\n // console.log(formattedOutput)\n mkdirSync(dirname(fullOutputPath), { recursive: true });\n\n writeFileSync(fullOutputPath, output);\n if (logPrefix !== undefined) {\n console.log(`${logPrefix}: ${fullOutputPath}`);\n }\n}\n\nexport async function formatAndWriteTypescript(\n output: string,\n fullOutputPath: string,\n logPrefix: string\n): Promise<void> {\n const formattedOutput = await formatTypescript(output);\n\n mkdirSync(dirname(fullOutputPath), { recursive: true });\n\n writeFileSync(fullOutputPath, formattedOutput);\n console.log(`${logPrefix}: ${fullOutputPath}`);\n}\n","/**\n * Explicitly normalize a given path to a posix path (using `/` as separator).\n * This should be used for generating Solidity files that will be consumed by solc,\n * because solc expects `/` as path separator, but path.join produces `\\` if the user is on windows.\n */\nexport function posixPath(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n","import { SchemaMapType, ObeliskConfig } from \"../../types\";\nimport { rmdirSync, existsSync } from \"fs\";\nimport { deleteFolderRecursive } from \"./common\";\nimport { generateSystem } from \"./generateSystem\";\nimport { generateToml } from \"./generateToml\";\nimport { generateEntityKey } from \"./generateEntityKey\";\nimport { generateInit } from \"./generateInit\";\nimport { generateEps } from \"./generateEps\";\nimport { generateSchema } from \"./generateSchema\";\nimport {generateScript} from \"./generateScript\";\n\nexport function worldgen(config: ObeliskConfig, srcPrefix?: string) {\n let path = \"\";\n if (srcPrefix === undefined) {\n path = process.cwd();\n } else {\n path = srcPrefix;\n }\n\n if (existsSync(`${path}/contracts/${config.name}`)) {\n deleteFolderRecursive(`${path}/contracts/${config.name}/sources/codegen`);\n } else {\n generateToml(config, path);\n generateEntityKey(config, path);\n }\n\n generateSystem(config, path);\n generateScript(config, path);\n\n // generate codegen\n generateSchema(config, path);\n generateEps(config.name, path);\n generateInit(config, path);\n}\n","import { BaseType, SchemaMapType, BaseValueType, MoveType } from \"../../types\";\nimport fs from \"fs\";\n\nexport function deleteFolderRecursive(path: string) {\n if (fs.existsSync(path)) {\n fs.readdirSync(path).forEach((file) => {\n const curPath = `${path}/${file}`;\n if (fs.lstatSync(curPath).isDirectory()) {\n deleteFolderRecursive(curPath);\n } else {\n fs.unlinkSync(curPath);\n }\n });\n fs.rmdirSync(path);\n }\n}\n\nexport function capitalizeFirstLetter(input: string): string {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n\n/**\n * Convert snake_case to camelCase\n * @param str\n */\nexport function convertToCamelCase(str: string): string {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n let result = str.replace(/(_\\w)/g, (match) => match[1].toUpperCase());\n return result + \"Data\";\n}\n\n/**\n *\n * @param name\n * @param values\n * @return [use name::name_schema, use name::info_schema]\n */\nexport function getUseSchema(\n name: string,\n values: Record<string, SchemaMapType>\n): string[] {\n let schema: string[] = [];\n Object.entries(values).forEach(([key, value]) => {\n if (typeof value === \"object\" && value.ephemeral) {\n } else {\n schema.push(`\\tuse ${name}::${key}_schema;`);\n }\n });\n return schema;\n}\n\n/**\n * @param values\n * @return [ name_schema::register(&mut _obelisk_world, ctx) ,info_schema::register(&mut _obelisk_world, ctx) ]\n */\nexport function getRegisterSchema(\n values: Record<string, SchemaMapType>\n): string[] {\n let registers: string[] = [];\n Object.entries(values).forEach(([key, value]) => {\n if (typeof value === \"object\" && value.ephemeral) {\n } else {\n registers.push(\n `\\t\\t${key}_schema::register(&mut _obelisk_world, &admin_cap, ctx);`\n );\n }\n });\n return registers;\n}\n\n/**\n *\n * @param name\n * @param values\n * @return [ friend name::name_system, friend name::info_system ]\n */\nexport function getFriendSystem(name: string, values: string[]): string {\n return (\n values.map((key) => `\\tfriend ${name}::${key};`).join(\"\\n\") +\n `\\n\\tfriend ${name}::deploy_hook;`\n );\n}\n\n/**\n *\n * @param values\n * @param prefixArgs\n * @return [ name, age, birth_time ]\n */\nexport function getStructAttrs(\n values: Record<string, string> | string,\n prefixArgs: string\n): string[] {\n return typeof values === \"string\"\n ? [`${prefixArgs}value`]\n : Object.entries(values).map(([key, _]) => `${prefixArgs}${key}`);\n}\n\nfunction isAddress(str: string): boolean {\n const regex = /^0x[a-fA-F0-9]+$/;\n return regex.test(str);\n}\n\nexport function getStructInitValue(\n keys: BaseType | Record<string, BaseType>,\n values: BaseValueType | Record<string, BaseValueType>\n) {\n if (\n typeof values === \"string\" ||\n typeof values === \"boolean\" ||\n typeof values === \"number\"\n ) {\n if (keys === \"string\") {\n return [`string(b\"${values}\")`];\n }\n if (typeof values === \"string\") {\n if (isAddress(values)) {\n return [`@${values}`];\n }\n }\n return [`${values}`];\n } else if (Array.isArray(values)) {\n // Check the array element type\n if (values.length > 0) {\n if (\n typeof values[0] === \"string\" ||\n typeof values[0] === \"boolean\" ||\n typeof values[0] === \"number\"\n ) {\n if (keys === \"vector<string>\") {\n return [`vector[${values.map((item) => `string(b\"${item}\")`)}]`];\n }\n\n if (typeof values[0] === \"string\") {\n if (isAddress(values[0])) {\n return [`vector[${values.map((item) => `@${item}`)}]`];\n }\n }\n return [`vector[${values.map((item) => `${item}`)}]`];\n } else if (typeof values === \"object\") {\n let res = `vector[${values.map((item: any) => {\n return `vector[${item.map((data: any) => {\n return `${data}`;\n })}]`;\n })}]`;\n\n return [res];\n }\n } else {\n if (keys === \"vector<string>\") {\n return 'vector[string(b\"\")]';\n }\n return \"vector[]\";\n }\n } else if (typeof values === \"object\") {\n // It's an object, handle accordingly\n let res = Object.entries(values).map(([key, value]) => {\n if (\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n ) {\n if (typeof keys === \"string\") {\n if (keys === \"string\") {\n return `string(b\"${value}\")`;\n }\n } else {\n if (keys[key] === \"string\") {\n return `string(b\"${value}\")`;\n }\n }\n\n if (typeof value === \"string\") {\n if (isAddress(value)) {\n return `@${value}`;\n }\n }\n return `${value}`;\n } else if (Array.isArray(value)) {\n // Check the array element type\n if (value.length > 0) {\n if (\n typeof value[0] === \"string\" ||\n typeof value[0] === \"boolean\" ||\n typeof value[0] === \"number\"\n ) {\n if (typeof keys === \"string\") {\n if (keys === \"vector<string>\") {\n return `vector[${value.map((item) => `string(b\"${item}\")`)}]`;\n }\n } else {\n if (keys[key] === \"vector<string>\") {\n return `vector[${value.map((item) => `string(b\"${item}\")`)}]`;\n }\n }\n\n if (typeof value[0] === \"string\") {\n if (isAddress(value[0])) {\n return `vector[${value.map((item) => `@${item}`)}]`;\n }\n }\n return `vector[${value.map((item) => `${item}`)}]`;\n } else if (typeof value === \"object\") {\n let res = `vector[${value.map((item: any) => {\n return `vector[${item.map((data: any) => {\n return `${data}`;\n })}]`;\n })}]`;\n\n return res;\n }\n } else {\n if (typeof keys !== \"string\") {\n if (keys[key] === \"vector<string>\") {\n return 'vector[string(b\"\")]';\n }\n return \"vector[]\";\n }\n }\n }\n });\n return res;\n }\n // Handle other cases or return an empty array if type not recognized\n return [];\n}\n\n/**\n *\n * @param values\n * @return ( bool , u64 , u64)\n */\n// export function getStructTypes(values: SchemaMapType): string {\nexport function getStructTypes(\n values: MoveType | Record<string, MoveType>\n): string {\n return typeof values === \"string\"\n ? values\n : `(${Object.entries(values).map(([_, type]) => `${type}`)})`;\n}\n\n/**\n *\n * @param values\n * @return Attributes and types of the struct. [ name: string, age: u64 ]\n */\nexport function getStructAttrsWithType(\n values: Record<string, string> | string,\n prefix: string\n): string[] {\n return typeof values === \"string\"\n ? [`${prefix}value: ${values}`]\n : Object.entries(values).map(([key, type]) => `${prefix}${key}: ${type}`);\n}\n\n/**\n * @param values\n * @param prefixArgs\n * @return [ data.name, data.age ]\n */\nexport function getStructAttrsQuery(\n values: MoveType | Record<string, MoveType>,\n prefixArgs: string\n): string[] {\n return typeof values === \"string\"\n ? [`${prefixArgs}_obelisk_data.value`]\n : Object.entries(values).map(\n ([key, _]) => `${prefixArgs}_obelisk_data.${key}`\n );\n}\n\nexport function renderKeyName(values: Record<string, string> | string): string {\n return `\\t${getStructAttrs(values, \"// \").join(\"\\n\\t\")}`;\n}\n\nexport function renderStruct(\n structName: string,\n values: Record<string, string> | string,\n isEphemeral: boolean = false\n): string {\n return `\\tstruct ${structName} has copy, drop ${\n isEphemeral ? \"\" : \", store\"\n } {\n${getStructAttrsWithType(values, \"\\t\\t\").join(\",\\n\")}\n\\t}\\n`;\n}\n\nexport function renderNewStructFunc(\n structName: string,\n values: Record<string, string> | string\n): string {\n return `\\tpublic fun new(${getStructAttrsWithType(values, \"\").join(\n \", \"\n )}): ${structName} {\n\\t\\t${structName} {\n${getStructAttrs(values, \"\\t\\t\\t\").join(\", \\n\")}\n\\t\\t}\n\\t}\\n`;\n}\n\nexport function renderRegisterFunc(structName: string): string {\n return `\\tpublic fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, ctx: &mut TxContext) {\n\\t\\tworld::add_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID, table::new<address, ${structName}>(ctx), admin_cap);\n\\t}`;\n}\n\nexport function renderSetFunc(\n structName: string,\n values: Record<string, string> | string\n): string {\n return `\\tpublic(friend) fun set(_obelisk_world: &mut World, _obelisk_entity_key: address, ${getStructAttrsWithType(\n values,\n \" \"\n )}) {\n\\t\\tlet _obelisk_schema = world::get_mut_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tlet _obelisk_data = new(${getStructAttrs(values, \" \")});\n\\t\\tif(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key)) {\n\\t\\t\\t*table::borrow_mut<address, ${structName}>(_obelisk_schema, _obelisk_entity_key) = _obelisk_data;\n\\t\\t} else {\n\\t\\t\\ttable::add(_obelisk_schema, _obelisk_entity_key, _obelisk_data);\n\\t\\t};\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, some(_obelisk_entity_key), _obelisk_data)\n\\t}\n`;\n}\n\nexport function renderRemoveFunc(structName: string): string {\n return `\\tpublic(friend) fun remove(_obelisk_world: &mut World, _obelisk_entity_key: address) {\n\\t\\tlet _obelisk_schema = world::get_mut_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\ttable::remove(_obelisk_schema, _obelisk_entity_key);\n\\t\\tevents::emit_remove(SCHEMA_ID, _obelisk_entity_key)\n\\t}\n`;\n}\n\nexport function renderSetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([key, type]) =>\n `\\tpublic(friend) fun set_${key}(_obelisk_world: &mut World, _obelisk_entity_key: address, ${key}: ${type}) {\n\\t\\tlet _obelisk_schema = world::get_mut_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\tlet _obelisk_data = table::borrow_mut<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);\n\\t\\t_obelisk_data.${key} = ${key};\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, some(_obelisk_entity_key), *_obelisk_data)\n\\t}\n`\n )\n .join(\"\\n\");\n}\n\nexport function renderGetAllFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return `\\tpublic fun get(_obelisk_world: &World, _obelisk_entity_key: address): ${getStructTypes(\n struct\n )} {\n\\t\\tlet _obelisk_schema = world::get_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\tlet _obelisk_data = table::borrow<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);\n\\t\\t(\n${getStructAttrsQuery(struct, \"\\t\\t\\t\").join(\",\\n\")}\n\\t\\t)\n\\t}\n`;\n}\n\nexport function renderGetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([\n key,\n type,\n ]) => `\\tpublic fun get_${key}(_obelisk_world: &World, _obelisk_entity_key: address): ${type} {\n\\t\\tlet _obelisk_schema = world::get_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\tlet _obelisk_data = table::borrow<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);\n\\t\\t_obelisk_data.${key}\n\\t}\n`\n )\n .join(\"\\n\");\n}\n\nexport function renderContainFunc(structName: string): string {\n return `\\tpublic fun contains(_obelisk_world: &World, _obelisk_entity_key: address): bool {\n\\t\\tlet _obelisk_schema = world::get_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\ttable::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key)\n\\t}`;\n}\n\nexport function renderRegisterFuncWithInit(\n structName: string,\n valueType: BaseType | Record<string, BaseType>,\n defaultValue: BaseValueType | Record<string, BaseValueType>\n): string {\n return `\\tpublic fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, _ctx: &mut TxContext) {\n\\t\\tlet _obelisk_schema = new(${getStructInitValue(valueType, defaultValue)});\n\\t\\tworld::add_schema<${structName}>(_obelisk_world, SCHEMA_ID, _obelisk_schema, admin_cap);\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema);\n\\t}`;\n}\n\nexport function renderSingleSetFunc(\n structName: string,\n values: Record<string, string> | string\n): string {\n return `\\tpublic(friend) fun set(_obelisk_world: &mut World, ${getStructAttrsWithType(\n values,\n \" \"\n )}) {\n\\t\\tlet _obelisk_schema = world::get_mut_schema<${structName}>(_obelisk_world, SCHEMA_ID);\n${\n typeof values === \"string\"\n ? `\\t\\t_obelisk_schema.value = value;`\n : Object.entries(values)\n .map(([key, _]) => `\\t\\t_obelisk_schema.${key} = ${key};`)\n .join(\"\\n\")\n}\n\\t}`;\n}\n\nexport function renderSingleSetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([key, type]) => `\n\\tpublic(friend) fun set_${key}(_obelisk_world: &mut World, ${key}: ${type}) {\n\\t\\tlet _obelisk_schema = world::get_mut_schema<${structName}>(_obelisk_world, SCHEMA_ID);\n\\t\\t_obelisk_schema.${key} = ${key};\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), *_obelisk_schema)\n\\t}`\n )\n .join(\"\\n\");\n}\n\nexport function renderSingleGetAllFunc(\n structName: string,\n values: MoveType | Record<string, MoveType>\n): string {\n return `\\tpublic fun get(_obelisk_world: &World): ${getStructTypes(values)} {\n\\t\\tlet _obelisk_schema = world::get_schema<${structName}>(_obelisk_world, SCHEMA_ID);\n\\t\\t(\n${\n typeof values === \"string\"\n ? `\\t\\t\\t_obelisk_schema.value`\n : Object.entries(values)\n .map(([key, _]) => `\\t\\t\\t_obelisk_schema.${key},`)\n .join(\"\\n\")\n}\n\\t\\t)\n\\t}`;\n}\n\nexport function renderSingleGetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([key, type]) => `\n\\tpublic fun get_${key}(_obelisk_world: &World): ${type} {\n\\t\\tlet _obelisk_schema = world::get_schema<${structName}>(_obelisk_world, SCHEMA_ID);\n\\t\\t_obelisk_schema.${key}\n\\t}`\n )\n .join(\"\\n\");\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport { existsSync } from \"fs\";\n\nexport function generateSystem2(config: ObeliskConfig, srcPrefix: string) {\n config.systems.map((systemName) => {\n let code = `module ${config.name}::${systemName} {\n\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/system/${systemName}.move`,\n \"formatAndWriteMove\"\n );\n });\n}\n\nexport function generateNewSystem1(\n name: string,\n systemName: string,\n srcPrefix: string\n) {\n let code = `module ${name}::${systemName} {\n\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${name}/sources/system/${systemName}.move`,\n \"formatAndWriteMove\"\n );\n}\n\nexport function generateSystem(config: ObeliskConfig, srcPrefix: string) {\n config.systems.map((systemName) => {\n if (\n !existsSync(\n `${srcPrefix}/contracts/${config.name}/sources/system/${systemName}.move`\n )\n ) {\n let code = `module ${config.name}::${systemName} {\n\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/system/${systemName}.move`,\n \"formatAndWriteMove\"\n );\n }\n });\n}\n","import { ObeliskConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\n\nexport function generateToml(config: ObeliskConfig, srcPrefix: string) {\n\tlet code = `[package]\nname = \"${config.name}\"\nversion = \"0.0.1\"\n\n[dependencies]\nSui = { git = \"https://github.com/MystenLabs/sui.git\", subdir = \"crates/sui-framework/packages/sui-framework\", rev = \"testnet-v1.23.0\" }\n\n[addresses]\nsui = \"0x2\"\n${config.name} = \"0x0\"\n`;\n\tformatAndWriteMove(\n\t\tcode,\n\t\t`${srcPrefix}/contracts/${config.name}/Move.toml`,\n\t\t'formatAndWriteMove'\n\t);\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\n\nexport function generateEntityKey(config: ObeliskConfig, srcPrefix: string) {\n let code = `module ${config.name}::entity_key {\n use sui::hash::keccak256;\n use sui::address;\n use sui::object;\n use std::vector;\n\n public fun from_object<T: key + store>(object: &T): address {\n object::id_address(object)\n }\n\n public fun from_bytes(bytes: vector<u8>): address {\n address::from_bytes(keccak256(&bytes))\n }\n\n public fun from_u256(x: u256): address {\n address::from_u256(x)\n }\n\n public fun from_address_with_seed(addr: address, seed: vector<u8>): address {\n let data = address::to_bytes(addr);\n vector::append(&mut data, seed);\n from_bytes(data)\n }\n\n public fun from_address_with_u256(addr: address, x: u256): address {\n let data = address::to_bytes(addr);\n vector::append(&mut data, bcs::to_bytes<u256>(&x));\n from_bytes(data)\n }\n\n public fun from_object_with_seed<T: key + store>(object: &T, seed: vector<u8>): address {\n let data = address::to_bytes(object::id_address(object));\n vector::append(&mut data, seed);\n from_bytes(data)\n }\n\n public fun from_object_with_u256<T: key + store>(object: &T, x: u256): address {\n let data = address::to_bytes(object::id_address(object));\n vector::append(&mut data, bcs::to_bytes<u256>(&x));\n from_bytes(data)\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/entity_key.move`,\n \"formatAndWriteMove\"\n );\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport {\n getRegisterSchema,\n getUseSchema,\n capitalizeFirstLetter,\n} from \"./common\";\n\nexport function generateInit(config: ObeliskConfig, srcPrefix: string) {\n let code = `module ${config.name}::init {\n use std::ascii::string;\n use sui::transfer;\n use sui::tx_context::{Self, TxContext};\n use ${config.name}::world;\n${getUseSchema(config.name, config.schemas).join(\"\\n\")}\n\n fun init(ctx: &mut TxContext) {\n let (_obelisk_world, admin_cap) = world::create(string(b\"${capitalizeFirstLetter(\n config.name\n )}\"), string(b\"${capitalizeFirstLetter(config.description)}\"),ctx);\n\n // Add Schema\n${getRegisterSchema(config.schemas).join(\"\\n\")}\n\n transfer::public_share_object(_obelisk_world);\n transfer::public_transfer(admin_cap, tx_context::sender(ctx));\n }\n\n #[test_only]\n public fun init_world_for_testing(ctx: &mut TxContext){\n init(ctx)\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/codegen/init.move`,\n \"formatAndWriteMove\"\n );\n}\n","import { formatAndWriteMove } from \"../formatAndWrite\";\n\nexport function generateEps(\n projectName: string,\n srcPrefix: string,\n version?: number\n) {\n generateWorld(projectName, srcPrefix, version);\n generateEvents(projectName, srcPrefix);\n}\n\nfunction generateWorld(\n projectName: string,\n srcPrefix: string,\n version?: number\n) {\n if (version === undefined) {\n version = 1;\n }\n\n let code = `module ${projectName}::world {\n use std::ascii::{String, string};\n use std::vector;\n use sui::tx_context::TxContext;\n use sui::bag::{Self, Bag};\n use sui::object::{Self, UID, ID};\n \n const VERSION: u64 = ${version};\n\n /// Schema does not exist\n const ESchemaDoesNotExist: u64 = 0;\n /// Schema already exists\n const ESchemaAlreadyExists: u64 = 1;\n /// Not the right admin for this world\n const ENotAdmin: u64 = 2;\n /// Migration is not an upgrade\n const ENotUpgrade: u64 = 3;\n /// Calling functions from the wrong package version\n const EWrongVersion: u64 = 4;\n\n struct AdminCap has key, store {\n id: UID,\n }\n\n struct World has key, store {\n id: UID,\n /// Name of the world\n name: String,\n /// Description of the world\n description: String,\n /// Schemas of the world\n schemas: Bag,\n /// Schema names of the world\n schema_names: vector<String>,\n /// admin of the world\n admin: ID,\n /// Version of the world\n version: u64\n }\n\n public fun create(name: String, description: String, ctx: &mut TxContext): (World, AdminCap) {\n let admin_cap = AdminCap {\n id: object::new(ctx),\n };\n let _obelisk_world = World {\n id: object::new(ctx),\n name,\n description,\n schemas: bag::new(ctx),\n schema_names: vector::empty(),\n admin: object::id(&admin_cap),\n version: VERSION\n };\n (_obelisk_world, admin_cap)\n }\n \n public fun get_admin(_obelisk_world: &World): ID {\n _obelisk_world.admin\n }\n\n public fun info(_obelisk_world: &World): (String, String, u64) {\n (_obelisk_world.name, _obelisk_world.description, _obelisk_world.version)\n }\n \n public fun schema_names(_obelisk_world: &World): vector<String> {\n _obelisk_world.schema_names\n }\n\n public fun get_schema<T : store>(_obelisk_world: &World, _obelisk_schema_id: vector<u8>): &T {\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n assert!(bag::contains(&_obelisk_world.schemas, _obelisk_schema_id), ESchemaDoesNotExist);\n bag::borrow<vector<u8>, T>(&_obelisk_world.schemas, _obelisk_schema_id)\n }\n\n public fun get_mut_schema<T : store>(_obelisk_world: &mut World, _obelisk_schema_id: vector<u8>): &mut T {\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n assert!(bag::contains(&_obelisk_world.schemas, _obelisk_schema_id), ESchemaDoesNotExist);\n bag::borrow_mut<vector<u8>, T>(&mut _obelisk_world.schemas, _obelisk_schema_id)\n }\n\n public fun add_schema<T : store>(_obelisk_world: &mut World, _obelisk_schema_id: vector<u8>, schema: T, admin_cap: &AdminCap){\n assert!(_obelisk_world.admin == object::id(admin_cap), ENotAdmin);\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n assert!(!bag::contains(&_obelisk_world.schemas, _obelisk_schema_id), ESchemaAlreadyExists);\n vector::push_back(&mut _obelisk_world.schema_names, string(_obelisk_schema_id));\n bag::add<vector<u8>,T>(&mut _obelisk_world.schemas, _obelisk_schema_id, schema);\n }\n\n public fun contains(_obelisk_world: &mut World, _obelisk_schema_id: vector<u8>): bool {\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n bag::contains(&mut _obelisk_world.schemas, _obelisk_schema_id)\n }\n \n entry fun migrate(_obelisk_world: &mut World, admin_cap: &AdminCap) {\n assert!(_obelisk_world.admin == object::id(admin_cap), ENotAdmin);\n assert!(_obelisk_world.version < VERSION, ENotUpgrade);\n _obelisk_world.version = VERSION;\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${projectName}/sources/codegen/eps/world.move`,\n \"formatAndWriteMove\"\n );\n}\n\nfunction generateEvents(projectName: string, srcPrefix: string) {\n let code = `module ${projectName}::events {\n use sui::event;\n use std::option::Option;\n\n struct SchemaSetRecord<T: copy + drop> has copy, drop {\n _obelisk_schema_id: vector<u8>,\n _obelisk_schema_type: u8, // obelisk_schema_type_enum => { 0: common, 1: singleton, 2: ephemeral }\n _obelisk_entity_key: Option<address>,\n data: T\n }\n\n struct SchemaRemoveRecord has copy, drop {\n _obelisk_schema_id: vector<u8>,\n _obelisk_entity_key: address\n }\n\n public fun emit_set<T: copy + drop>(_obelisk_schema_id: vector<u8>, _obelisk_schema_type: u8, _obelisk_entity_key: Option<address>, data: T) {\n event::emit(SchemaSetRecord { _obelisk_schema_id, _obelisk_schema_type, _obelisk_entity_key, data})\n }\n\n public fun emit_remove(_obelisk_schema_id: vector<u8>, _obelisk_entity_key: address) {\n event::emit(SchemaRemoveRecord { _obelisk_schema_id, _obelisk_entity_key })\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${projectName}/sources/codegen/eps/events.move`,\n \"formatAndWriteMove\"\n );\n}\n","import {\n ObeliskConfig,\n BaseValueType,\n BaseType,\n RenderSchemaOptions,\n MoveType,\n} from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport {\n getFriendSystem,\n renderKeyName,\n renderSetFunc,\n renderContainFunc,\n renderRemoveFunc,\n renderStruct,\n renderNewStructFunc,\n convertToCamelCase,\n renderSetAttrsFunc,\n renderRegisterFunc,\n renderGetAllFunc,\n renderGetAttrsFunc,\n getStructAttrsWithType,\n getStructAttrs,\n renderRegisterFuncWithInit,\n renderSingleSetFunc,\n renderSingleSetAttrsFunc,\n renderSingleGetAllFunc,\n renderSingleGetAttrsFunc,\n} from \"./common\";\n\nexport function getRenderSchemaOptions(config: ObeliskConfig) {\n const options: RenderSchemaOptions[] = [];\n for (const schemaName of Object.keys(config.schemas)) {\n const schemaData = config.schemas[schemaName];\n let valueType: MoveType | Record<string, MoveType>;\n let realType: BaseType | Record<string, BaseType>;\n let defaultValue: BaseValueType | Record<string, BaseValueType> | undefined;\n let ephemeral = false;\n let singleton = false;\n let needImportString = false;\n if (typeof schemaData === \"string\") {\n realType = schemaData;\n\n if (schemaData === \"string\") {\n valueType = \"String\";\n needImportString = true;\n } else if (schemaData === \"vector<string>\") {\n valueType = \"vector<String>\";\n needImportString = true;\n } else {\n valueType = schemaData;\n }\n } else {\n realType = schemaData.valueType;\n\n if (typeof schemaData.valueType === \"string\") {\n if (schemaData.valueType === \"string\") {\n valueType = \"String\";\n needImportString = true;\n } else if (schemaData.valueType === \"vector<string>\") {\n valueType = \"vector<String>\";\n needImportString = true;\n } else {\n valueType = schemaData.valueType;\n }\n } else {\n valueType = { ...schemaData.valueType };\n for (const key in valueType) {\n if (valueType.hasOwnProperty(key)) {\n if (valueType[key] === \"string\") {\n valueType[key] = \"String\";\n needImportString = true;\n } else if (valueType[key] === \"vector<string>\") {\n valueType[key] = \"vector<String>\";\n needImportString = true;\n\n // needImport = \"\\tuse std::ascii::{String, string};\";\n }\n }\n }\n }\n defaultValue = schemaData.defaultValue;\n ephemeral =\n schemaData.ephemeral !== undefined ? schemaData.ephemeral : false;\n singleton = schemaData.defaultValue !== undefined ? true : false;\n }\n\n options.push({\n projectName: config.name,\n systems: config.systems,\n schemaName: schemaName,\n structName: convertToCamelCase(schemaName),\n ephemeral,\n singleton,\n valueType,\n realType,\n // structAttrs: [renderKeyName(valueType)],\n // structTypes: [renderStruct(convertToCamelCase(schemaName), valueType)],\n defaultValue,\n needImportString,\n });\n }\n return options;\n}\n\nexport function generateSchema(config: ObeliskConfig, srcPrefix: string) {\n const options = getRenderSchemaOptions(config);\n for (const option of options) {\n let code: string;\n if (option.ephemeral) {\n code = renderEphemeralSchema(option);\n } else if (option.defaultValue !== undefined) {\n code = renderSingleSchema(option);\n } else {\n code = renderSchema(option);\n }\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${option.projectName}/sources/codegen/schemas/${option.schemaName}.move`,\n \"formatAndWriteMove\"\n );\n }\n}\n\nfunction renderEphemeralSchema(option: RenderSchemaOptions): string {\n return `module ${option.projectName}::${option.schemaName}_schema {\n use std::option::none;\n use ${option.projectName}::events;\n \n const SCHEMA_ID: vector<u8> = b\"${option.schemaName}\";\n const SCHEMA_TYPE: u8 = 2;\n \n${renderKeyName(option.valueType)}\n${renderStruct(option.structName, option.valueType, option.ephemeral)} \n\\tpublic fun emit_${option.schemaName}(${getStructAttrsWithType(\n option.valueType,\n \" \"\n )}) {\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), ${option.structName} { ${getStructAttrs(\n option.valueType,\n \" \"\n )} })\n\\t}\n}`;\n}\n\nfunction renderSingleSchema(option: RenderSchemaOptions): string {\n return `module ${option.projectName}::${option.schemaName}_schema {\n${\n option.needImportString ? \"\\tuse std::ascii::{String,string};\\n\\t\" : \"\\t\"\n}use std::option::none;\n use sui::tx_context::TxContext;\n use ${option.projectName}::events;\n use ${option.projectName}::world::{Self, World, AdminCap};\n // Systems\n${getFriendSystem(option.projectName, option.systems)}\n\n\\tconst SCHEMA_ID: vector<u8> = b\"${option.schemaName}\";\n\\tconst SCHEMA_TYPE: u8 = 1;\n\n${renderKeyName(option.valueType)}\n${renderStruct(option.structName, option.valueType)}\n${renderNewStructFunc(option.structName, option.valueType)}\n${renderRegisterFuncWithInit(\n option.structName,\n option.realType,\n option.defaultValue!\n)}\n\n${renderSingleSetFunc(\n option.structName,\n option.valueType\n)}${renderSingleSetAttrsFunc(option.structName, option.valueType)}\n\n${renderSingleGetAllFunc(\n option.structName,\n option.valueType\n)}${renderSingleGetAttrsFunc(option.structName, option.valueType)}\n}\n`;\n}\n\nfunction renderSchema(option: RenderSchemaOptions) {\n return `module ${option.projectName}::${option.schemaName}_schema {\n${\n option.needImportString ? \"\\tuse std::ascii::String;\\n\\t\" : \"\\t\"\n}use std::option::some;\n use sui::tx_context::TxContext;\n use sui::table::{Self, Table};\n use ${option.projectName}::events;\n use ${option.projectName}::world::{Self, World, AdminCap};\n\n // Systems\n${getFriendSystem(option.projectName, option.systems)}\n\n\\t/// Entity does not exist\n\\tconst EEntityDoesNotExist: u64 = 0;\n\n\\tconst SCHEMA_ID: vector<u8> = b\"${option.schemaName}\";\n\\tconst SCHEMA_TYPE: u8 = 0;\n\n${renderKeyName(option.valueType)}\n${renderStruct(option.structName, option.valueType)}\n${renderNewStructFunc(option.structName, option.valueType)}\n${renderRegisterFunc(option.structName)}\n\n${renderSetFunc(option.structName, option.valueType)}${renderSetAttrsFunc(\n option.structName,\n option.valueType\n )}\n${renderGetAllFunc(option.structName, option.valueType)}${renderGetAttrsFunc(\n option.structName,\n option.valueType\n )}\n${renderRemoveFunc(option.structName)}\n${renderContainFunc(option.structName)}\n}\n`;\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport { existsSync } from \"fs\";\n\nexport function generateScript(config: ObeliskConfig, srcPrefix: string) {\n if (\n !existsSync(\n `${srcPrefix}/contracts/${config.name}/sources/script/deploy_hook.move`\n )\n ) {\n let code = `module ${config.name}::deploy_hook {\n use ${config.name}::world::{World, AdminCap, get_admin};\n use sui::object;\n\n /// Not the right admin for this world\n const ENotAdmin: u64 = 0;\n\n public entry fun run(world: &mut World, admin_cap: &AdminCap) {\n assert!( get_admin(world) == object::id(admin_cap), ENotAdmin);\n \n // Logic that needs to be automated once the contract is deployed\n \n }\n\n #[test_only]\n public fun deploy_hook_for_testing(world: &mut World, admin_cap: &AdminCap){\n run(world, admin_cap)\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/script/deploy_hook.move`,\n \"formatAndWriteMove\"\n );\n }\n}\n","import { findUp } from \"find-up\";\nimport path from \"path\";\nimport esbuild from \"esbuild\";\nimport { NotInsideProjectError } from \"./errors\";\nimport { rmSync } from \"fs\";\nimport { pathToFileURL } from \"url\";\nimport os from \"os\";\n\n// In order of preference files are checked\nconst configFiles = [\n \"obelisk.config.js\",\n \"obelisk.config.mjs\",\n \"obelisk.config.ts\",\n \"obelisk.config.mts\",\n];\nconst TEMP_CONFIG = \"obelisk.config.example.mjs\";\n\nexport async function loadConfig(configPath?: string): Promise<unknown> {\n configPath = await resolveConfigPath(configPath);\n try {\n await esbuild.build({\n entryPoints: [configPath],\n format: \"esm\",\n outfile: TEMP_CONFIG,\n // https://esbuild.github.io/getting-started/#bundling-for-node\n platform: \"node\",\n // bundle local imports (otherwise it may error, js can't import ts)\n bundle: true,\n // avoid bundling external imports (it's unnecessary and esbuild can't handle all node features)\n packages: \"external\",\n });\n configPath = await resolveConfigPath(TEMP_CONFIG, true);\n // Node.js caches dynamic imports, so without appending a cache breaking\n // param like `?update={Date.now()}` this import always returns the same config\n // if called multiple times in a single process, like the `dev-contracts` cli\n return (await import(configPath + `?update=${Date.now()}`)).obeliskConfig;\n } finally {\n rmSync(TEMP_CONFIG, { force: true });\n }\n}\n\nexport async function resolveConfigPath(\n configPath: string | undefined,\n toFileURL?: boolean\n) {\n if (configPath === undefined) {\n configPath = await getUserConfigPath();\n } else {\n if (!path.isAbsolute(configPath)) {\n configPath = path.join(process.cwd(), configPath);\n configPath = path.normalize(configPath);\n }\n }\n\n // Add `file:///` for Windows support\n // (see https://github.com/nodejs/node/issues/31710)\n return toFileURL && os.platform() === \"win32\"\n ? pathToFileURL(configPath).href\n : configPath;\n}\n\nasync function getUserConfigPath() {\n const tsConfigPath = await findUp(configFiles);\n if (tsConfigPath === undefined) {\n throw new NotInsideProjectError();\n }\n return tsConfigPath;\n}\n","\nexport class NotInsideProjectError extends Error {\nname = \"NotInsideProjectError\";\nmessage = \"You are not inside a Obelisk project\";\n}"],"mappings":"AACA,UAAYA,MAAc,WAC1B,UAAYC,OAAgB,uBAE5B,eAAsBC,GACpBC,EACAC,EACiB,CACjB,IAAIC,EACAD,IACFC,EAAS,MAAe,gBAAcD,CAAkB,GAE1D,GAAI,CACF,OAAgB,SAAOD,EAAS,CAC9B,QAAS,CAACF,EAAU,EAGpB,WAAY,IACZ,KAAM,GACN,SAAU,EACV,QAAS,GACT,eAAgB,GAEhB,GAAGI,CACL,CAAC,CACH,OAASC,EAAP,CACA,IAAIC,EACJ,OAAID,aAAiB,MACnBC,EAAUD,EAAM,QAEhBC,EAAUD,EAEZ,QAAQ,IAAI,mCAAmCC,GAAS,EACjDJ,CACT,CACF,CAEA,eAAsBK,EAAiBL,EAAkC,CACvE,OAAgB,SAAOA,EAAS,CAC9B,OAAQ,YACV,CAAC,CACH,CCzCA,OAAS,aAAAM,EAAW,iBAAAC,MAAqB,KACzC,OAAS,WAAAC,MAAe,OAGxB,eAAsBC,EACpBC,EACAC,EACAC,EACe,CAGfC,EAAUC,EAAQH,CAAc,EAAG,CAAE,UAAW,EAAK,CAAC,EAEtDI,EAAcJ,EAAgBD,CAAM,EAChCE,IAAc,QAChB,QAAQ,IAAI,GAAGA,MAAcD,GAAgB,CAEjD,CAEA,eAAsBK,GACpBN,EACAC,EACAC,EACe,CACf,IAAMK,EAAkB,MAAMC,EAAiBR,CAAM,EAErDG,EAAUC,EAAQH,CAAc,EAAG,CAAE,UAAW,EAAK,CAAC,EAEtDI,EAAcJ,EAAgBM,CAAe,EAC7C,QAAQ,IAAI,GAAGL,MAAcD,GAAgB,CAC/C,CCzBO,SAASQ,GAAUC,EAAsB,CAC9C,OAAOA,EAAK,QAAQ,MAAO,GAAG,CAChC,CCNA,OAAoB,cAAAC,OAAkB,KCAtC,OAAOC,MAAQ,KAER,SAASC,EAAsBC,EAAc,CAC9CF,EAAG,WAAWE,CAAI,IACpBF,EAAG,YAAYE,CAAI,EAAE,QAASC,GAAS,CACrC,IAAMC,EAAU,GAAGF,KAAQC,IACvBH,EAAG,UAAUI,CAAO,EAAE,YAAY,EACpCH,EAAsBG,CAAO,EAE7BJ,EAAG,WAAWI,CAAO,CAEzB,CAAC,EACDJ,EAAG,UAAUE,CAAI,EAErB,CAEO,SAASG,EAAsBC,EAAuB,CAC3D,OAAOA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,CACtD,CAMO,SAASC,EAAmBC,EAAqB,CACtD,OAAAA,EAAMA,EAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAI,MAAM,CAAC,EAClCA,EAAI,QAAQ,SAAWC,GAAUA,EAAM,CAAC,EAAE,YAAY,CAAC,EACpD,MAClB,CAQO,SAASC,EACdC,EACAC,EACU,CACV,IAAIC,EAAmB,CAAC,EACxB,cAAO,QAAQD,CAAM,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CAC3C,OAAOA,GAAU,UAAYA,EAAM,WAErCF,EAAO,KAAK,QAASF,MAASG,WAAa,CAE/C,CAAC,EACMD,CACT,CAMO,SAASG,EACdJ,EACU,CACV,IAAIK,EAAsB,CAAC,EAC3B,cAAO,QAAQL,CAAM,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CAC3C,OAAOA,GAAU,UAAYA,EAAM,WAErCE,EAAU,KACR,KAAOH,2DACT,CAEJ,CAAC,EACMG,CACT,CAQO,SAASC,EAAgBP,EAAcC,EAA0B,CACtE,OACEA,EAAO,IAAKE,GAAQ,WAAYH,MAASG,IAAM,EAAE,KAAK;AAAA,CAAI,EAC1D;AAAA,UAAcH,iBAElB,CAQO,SAASQ,EACdP,EACAQ,EACU,CACV,OAAO,OAAOR,GAAW,SACrB,CAAC,GAAGQ,QAAiB,EACrB,OAAO,QAAQR,CAAM,EAAE,IAAI,CAAC,CAACE,EAAKO,CAAC,IAAM,GAAGD,IAAaN,GAAK,CACpE,CAEA,SAASQ,EAAUd,EAAsB,CAEvC,MADc,mBACD,KAAKA,CAAG,CACvB,CAEO,SAASe,GACdC,EACAZ,EACA,CACA,GACE,OAAOA,GAAW,UAClB,OAAOA,GAAW,WAClB,OAAOA,GAAW,SAElB,OAAIY,IAAS,SACJ,CAAC,YAAYZ,KAAU,EAE5B,OAAOA,GAAW,UAChBU,EAAUV,CAAM,EACX,CAAC,IAAIA,GAAQ,EAGjB,CAAC,GAAGA,GAAQ,EACd,GAAI,MAAM,QAAQA,CAAM,EAE7B,GAAIA,EAAO,OAAS,EAAG,CACrB,GACE,OAAOA,EAAO,CAAC,GAAM,UACrB,OAAOA,EAAO,CAAC,GAAM,WACrB,OAAOA,EAAO,CAAC,GAAM,SAErB,OAAIY,IAAS,iBACJ,CAAC,UAAUZ,EAAO,IAAKa,GAAS,YAAYA,KAAQ,IAAI,EAG7D,OAAOb,EAAO,CAAC,GAAM,UACnBU,EAAUV,EAAO,CAAC,CAAC,EACd,CAAC,UAAUA,EAAO,IAAKa,GAAS,IAAIA,GAAM,IAAI,EAGlD,CAAC,UAAUb,EAAO,IAAKa,GAAS,GAAGA,GAAM,IAAI,EAC/C,GAAI,OAAOb,GAAW,SAO3B,MAAO,CANG,UAAUA,EAAO,IAAKa,GACvB,UAAUA,EAAK,IAAKC,GAClB,GAAGA,GACX,IACF,IAEU,MAGb,QAAIF,IAAS,iBACJ,sBAEF,mBAEA,OAAOZ,GAAW,SAmE3B,OAjEU,OAAO,QAAQA,CAAM,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAK,IAAM,CACrD,GACE,OAAOA,GAAU,UACjB,OAAOA,GAAU,WACjB,OAAOA,GAAU,SACjB,CACA,GAAI,OAAOS,GAAS,UAClB,GAAIA,IAAS,SACX,MAAO,YAAYT,cAGjBS,EAAKV,CAAG,IAAM,SAChB,MAAO,YAAYC,MAIvB,OAAI,OAAOA,GAAU,UACfO,EAAUP,CAAK,EACV,IAAIA,IAGR,GAAGA,YACD,MAAM,QAAQA,CAAK,GAE5B,GAAIA,EAAM,OAAS,GACjB,GACE,OAAOA,EAAM,CAAC,GAAM,UACpB,OAAOA,EAAM,CAAC,GAAM,WACpB,OAAOA,EAAM,CAAC,GAAM,SACpB,CACA,GAAI,OAAOS,GAAS,UAClB,GAAIA,IAAS,iBACX,MAAO,UAAUT,EAAM,IAAKU,GAAS,YAAYA,KAAQ,aAGvDD,EAAKV,CAAG,IAAM,iBAChB,MAAO,UAAUC,EAAM,IAAKU,GAAS,YAAYA,KAAQ,KAI7D,OAAI,OAAOV,EAAM,CAAC,GAAM,UAClBO,EAAUP,EAAM,CAAC,CAAC,EACb,UAAUA,EAAM,IAAKU,GAAS,IAAIA,GAAM,KAG5C,UAAUV,EAAM,IAAKU,GAAS,GAAGA,GAAM,aACrC,OAAOV,GAAU,SAO1B,MANU,UAAUA,EAAM,IAAKU,GACtB,UAAUA,EAAK,IAAKC,GAClB,GAAGA,GACX,IACF,aAKC,OAAOF,GAAS,SAClB,OAAIA,EAAKV,CAAG,IAAM,iBACT,sBAEF,WAIf,CAAC,EAIH,MAAO,CAAC,CACV,CAQO,SAASa,EACdf,EACQ,CACR,OAAO,OAAOA,GAAW,SACrBA,EACA,IAAI,OAAO,QAAQA,CAAM,EAAE,IAAI,CAAC,CAACS,EAAGO,CAAI,IAAM,GAAGA,GAAM,IAC7D,CAOO,SAASC,EACdjB,EACAkB,EACU,CACV,OAAO,OAAOlB,GAAW,SACrB,CAAC,GAAGkB,WAAgBlB,GAAQ,EAC5B,OAAO,QAAQA,CAAM,EAAE,IAAI,CAAC,CAACE,EAAKc,CAAI,IAAM,GAAGE,IAAShB,MAAQc,GAAM,CAC5E,CAOO,SAASG,GACdnB,EACAQ,EACU,CACV,OAAO,OAAOR,GAAW,SACrB,CAAC,GAAGQ,sBAA+B,EACnC,OAAO,QAAQR,CAAM,EAAE,IACrB,CAAC,CAACE,EAAKO,CAAC,IAAM,GAAGD,kBAA2BN,GAC9C,CACN,CAEO,SAASkB,EAAcpB,EAAiD,CAC7E,MAAO,IAAKO,EAAeP,EAAQ,KAAK,EAAE,KAAK;AAAA,EAAM,GACvD,CAEO,SAASqB,EACdC,EACAtB,EACAuB,EAAuB,GACf,CACR,MAAO,WAAYD,oBACjBC,EAAc,GAAK;AAAA,EAErBN,EAAuBjB,EAAQ,IAAM,EAAE,KAAK;AAAA,CAAK;AAAA;AAAA,CAEnD,CAEO,SAASwB,EACdF,EACAtB,EACQ,CACR,MAAO,mBAAoBiB,EAAuBjB,EAAQ,EAAE,EAAE,KAC5D,IACF,OAAOsB;AAAA,IACHA;AAAA,EACJf,EAAeP,EAAQ,KAAQ,EAAE,KAAK;AAAA,CAAM;AAAA;AAAA;AAAA,CAG9C,CAEO,SAASyB,EAAmBH,EAA4B,CAC7D,MAAO;AAAA,oCAC6BA,sDAA+DA;AAAA,GAErG,CAEO,SAASI,EACdJ,EACAtB,EACQ,CACR,MAAO,qFAAsFiB,EAC3FjB,EACA,GACF;AAAA,8DAC8DsB;AAAA,4BAClCf,EAAeP,EAAQ,GAAG;AAAA,gCACtBsB;AAAA,iCACEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAOpC,CAEO,SAASK,EAAiBL,EAA4B,CAC3D,MAAO;AAAA,8DACuDA;AAAA,qCACzBA;AAAA;AAAA;AAAA;AAAA,CAKvC,CAEO,SAASM,EACdN,EACAO,EACQ,CACR,OAAO,OAAOA,GAAW,SACrB,GACA;AAAA,EACE,OAAO,QAAQA,CAAM,EAClB,IACC,CAAC,CAAC3B,EAAKc,CAAI,IACT,2BAA4Bd,+DAAiEA,MAAQc;AAAA,8DACnDM;AAAA,qCACzBA;AAAA,mDACcA;AAAA,kBACjCpB,OAASA;AAAA;AAAA;AAAA,CAInB,EACC,KAAK;AAAA,CAAI,CACpB,CAEO,SAAS4B,EACdR,EACAO,EACQ,CACR,MAAO,0EAA2Ed,EAChFc,CACF;AAAA,0DAC0DP;AAAA,qCACrBA;AAAA,+CACUA;AAAA;AAAA,EAE/CH,GAAoBU,EAAQ,KAAQ,EAAE,KAAK;AAAA,CAAK;AAAA;AAAA;AAAA,CAIlD,CAEO,SAASE,EACdT,EACAO,EACQ,CACR,OAAO,OAAOA,GAAW,SACrB,GACA;AAAA,EACE,OAAO,QAAQA,CAAM,EAClB,IACC,CAAC,CACC3B,EACAc,CACF,IAAM,mBAAoBd,4DAA8Dc;AAAA,0DACxCM;AAAA,qCACrBA;AAAA,+CACUA;AAAA,kBAC7BpB;AAAA;AAAA,CAGV,EACC,KAAK;AAAA,CAAI,CACpB,CAEO,SAAS8B,EAAkBV,EAA4B,CAC5D,MAAO;AAAA,0DACmDA;AAAA,6BAC7BA;AAAA,GAE/B,CAEO,SAASW,EACdX,EACAY,EACAC,EACQ,CACR,MAAO;AAAA,8BACuBxB,GAAmBuB,EAAWC,CAAY;AAAA,sBAClDb;AAAA;AAAA,GAGxB,CAEO,SAASc,EACdd,EACAtB,EACQ,CACR,MAAO,uDAAwDiB,EAC7DjB,EACA,GACF;AAAA,gDACgDsB;AAAA,EAEhD,OAAOtB,GAAW,SACd,mCACA,OAAO,QAAQA,CAAM,EAClB,IAAI,CAAC,CAACE,EAAKO,CAAC,IAAM,qBAAuBP,OAASA,IAAM,EACxD,KAAK;AAAA,CAAI;AAAA,GAGlB,CAEO,SAASmC,EACdf,EACAO,EACQ,CACR,OAAO,OAAOA,GAAW,SACrB,GACA;AAAA,EACE,OAAO,QAAQA,CAAM,EAClB,IACC,CAAC,CAAC3B,EAAKc,CAAI,IAAM;AAAA,0BACFd,iCAAmCA,MAAQc;AAAA,gDACpBM;AAAA,oBAC5BpB,OAASA;AAAA;AAAA,GAGrB,EACC,KAAK;AAAA,CAAI,CACpB,CAEO,SAASoC,EACdhB,EACAtB,EACQ,CACR,MAAO,4CAA6Ce,EAAef,CAAM;AAAA,4CAC7BsB;AAAA;AAAA,EAG5C,OAAOtB,GAAW,SACd,2BACA,OAAO,QAAQA,CAAM,EAClB,IAAI,CAAC,CAACE,EAAKO,CAAC,IAAM,sBAAyBP,IAAM,EACjD,KAAK;AAAA,CAAI;AAAA;AAAA,GAIlB,CAEO,SAASqC,EACdjB,EACAO,EACQ,CACR,OAAO,OAAOA,GAAW,SACrB,GACA;AAAA,EACE,OAAO,QAAQA,CAAM,EAClB,IACC,CAAC,CAAC3B,EAAKc,CAAI,IAAM;AAAA,kBACVd,8BAAgCc;AAAA,4CACLM;AAAA,oBACxBpB;AAAA,GAEZ,EACC,KAAK;AAAA,CAAI,CACpB,CCveA,OAAS,cAAAsC,OAAkB,KAgCpB,SAASC,EAAeC,EAAuBC,EAAmB,CACvED,EAAO,QAAQ,IAAKE,GAAe,CACjC,GACE,CAACC,GACC,GAAGF,eAAuBD,EAAO,uBAAuBE,QAC1D,EACA,CACA,IAAIE,EAAO,UAAUJ,EAAO,SAASE;AAAA;AAAA;AAAA,EAIrCG,EACED,EACA,GAAGH,eAAuBD,EAAO,uBAAuBE,SACxD,oBACF,EAEJ,CAAC,CACH,CCjDO,SAASI,EAAaC,EAAuBC,EAAmB,CACtE,IAAIC,EAAO;AAAA,UACFF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQfA,EAAO;AAAA,EAERG,EACCD,EACA,GAAGD,eAAuBD,EAAO,iBACjC,oBACD,CACD,CCjBO,SAASI,EAAkBC,EAAuBC,EAAmB,CAC1E,IAAIC,EAAO,UAAUF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2C5BG,EACED,EACA,GAAGD,eAAuBD,EAAO,+BACjC,oBACF,CACF,CC5CO,SAASI,EAAaC,EAAuBC,EAAmB,CACrE,IAAIC,EAAO,UAAUF,EAAO;AAAA;AAAA;AAAA;AAAA,UAIpBA,EAAO;AAAA,EACfG,EAAaH,EAAO,KAAMA,EAAO,OAAO,EAAE,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA,mEAGcI,EACzDJ,EAAO,IACT,iBAAiBI,EAAsBJ,EAAO,WAAW;AAAA;AAAA;AAAA,EAG/DK,EAAkBL,EAAO,OAAO,EAAE,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY3CM,EACEJ,EACA,GAAGD,eAAuBD,EAAO,iCACjC,oBACF,CACF,CCrCO,SAASO,EACdC,EACAC,EACAC,EACA,CACAC,GAAcH,EAAaC,EAAWC,CAAO,EAC7CE,GAAeJ,EAAaC,CAAS,CACvC,CAEA,SAASE,GACPH,EACAC,EACAC,EACA,CACIA,IAAY,SACdA,EAAU,GAGZ,IAAIG,EAAO,UAAUL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAOIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6FzBI,EACED,EACA,GAAGJ,eAAuBD,mCAC1B,oBACF,CACF,CAEA,SAASI,GAAeJ,EAAqBC,EAAmB,CAC9D,IAAII,EAAO,UAAUL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBrBM,EACED,EACA,GAAGJ,eAAuBD,oCAC1B,oBACF,CACF,CChIO,SAASO,GAAuBC,EAAuB,CAC5D,IAAMC,EAAiC,CAAC,EACxC,QAAWC,KAAc,OAAO,KAAKF,EAAO,OAAO,EAAG,CACpD,IAAMG,EAAaH,EAAO,QAAQE,CAAU,EACxCE,EACAC,EACAC,EACAC,EAAY,GACZC,EAAY,GACZC,EAAmB,GACvB,GAAI,OAAON,GAAe,SACxBE,EAAWF,EAEPA,IAAe,UACjBC,EAAY,SACZK,EAAmB,IACVN,IAAe,kBACxBC,EAAY,iBACZK,EAAmB,IAEnBL,EAAYD,MAET,CAGL,GAFAE,EAAWF,EAAW,UAElB,OAAOA,EAAW,WAAc,SAC9BA,EAAW,YAAc,UAC3BC,EAAY,SACZK,EAAmB,IACVN,EAAW,YAAc,kBAClCC,EAAY,iBACZK,EAAmB,IAEnBL,EAAYD,EAAW,cAEpB,CACLC,EAAY,CAAE,GAAGD,EAAW,SAAU,EACtC,QAAWO,KAAON,EACZA,EAAU,eAAeM,CAAG,IAC1BN,EAAUM,CAAG,IAAM,UACrBN,EAAUM,CAAG,EAAI,SACjBD,EAAmB,IACVL,EAAUM,CAAG,IAAM,mBAC5BN,EAAUM,CAAG,EAAI,iBACjBD,EAAmB,KAO3BH,EAAeH,EAAW,aAC1BI,EACEJ,EAAW,YAAc,OAAYA,EAAW,UAAY,GAC9DK,EAAYL,EAAW,eAAiB,OAG1CF,EAAQ,KAAK,CACX,YAAaD,EAAO,KACpB,QAASA,EAAO,QAChB,WAAYE,EACZ,WAAYS,EAAmBT,CAAU,EACzC,UAAAK,EACA,UAAAC,EACA,UAAAJ,EACA,SAAAC,EAGA,aAAAC,EACA,iBAAAG,CACF,CAAC,EAEH,OAAOR,CACT,CAEO,SAASW,EAAeZ,EAAuBa,EAAmB,CACvE,IAAMZ,EAAUF,GAAuBC,CAAM,EAC7C,QAAWc,KAAUb,EAAS,CAC5B,IAAIc,EACAD,EAAO,UACTC,EAAOC,GAAsBF,CAAM,EAC1BA,EAAO,eAAiB,OACjCC,EAAOE,GAAmBH,CAAM,EAEhCC,EAAOG,GAAaJ,CAAM,EAE5BK,EACEJ,EACA,GAAGF,eAAuBC,EAAO,uCAAuCA,EAAO,kBAC/E,oBACF,EAEJ,CAEA,SAASE,GAAsBF,EAAqC,CAClE,MAAO,UAAUA,EAAO,gBAAgBA,EAAO;AAAA;AAAA,UAEvCA,EAAO;AAAA;AAAA,sCAEqBA,EAAO;AAAA;AAAA;AAAA,EAG3CM,EAAcN,EAAO,SAAS;AAAA,EAC9BO,EAAaP,EAAO,WAAYA,EAAO,UAAWA,EAAO,SAAS;AAAA,mBAChDA,EAAO,cAAcQ,EACrCR,EAAO,UACP,GACF;AAAA,qDACqDA,EAAO,gBAAgBS,EAC1ET,EAAO,UACP,GACF;AAAA;AAAA,EAGF,CAEA,SAASG,GAAmBH,EAAqC,CAC/D,MAAO,UAAUA,EAAO,gBAAgBA,EAAO;AAAA,EAE/CA,EAAO,iBAAmB;AAAA,GAA2C;AAAA;AAAA,UAG7DA,EAAO;AAAA,UACPA,EAAO;AAAA;AAAA,EAEfU,EAAgBV,EAAO,YAAaA,EAAO,OAAO;AAAA;AAAA,mCAEhBA,EAAO;AAAA;AAAA;AAAA,EAGzCM,EAAcN,EAAO,SAAS;AAAA,EAC9BO,EAAaP,EAAO,WAAYA,EAAO,SAAS;AAAA,EAChDW,EAAoBX,EAAO,WAAYA,EAAO,SAAS;AAAA,EACvDY,EACAZ,EAAO,WACPA,EAAO,SACPA,EAAO,YACT;AAAA;AAAA,EAEEa,EACAb,EAAO,WACPA,EAAO,SACT,IAAIc,EAAyBd,EAAO,WAAYA,EAAO,SAAS;AAAA;AAAA,EAE9De,EACAf,EAAO,WACPA,EAAO,SACT,IAAIgB,EAAyBhB,EAAO,WAAYA,EAAO,SAAS;AAAA;AAAA,CAGhE,CAEA,SAASI,GAAaJ,EAA6B,CACjD,MAAO,UAAUA,EAAO,gBAAgBA,EAAO;AAAA,EAE/CA,EAAO,iBAAmB;AAAA,GAAkC;AAAA;AAAA;AAAA,UAIpDA,EAAO;AAAA,UACPA,EAAO;AAAA;AAAA;AAAA,EAGfU,EAAgBV,EAAO,YAAaA,EAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,mCAKhBA,EAAO;AAAA;AAAA;AAAA,EAGzCM,EAAcN,EAAO,SAAS;AAAA,EAC9BO,EAAaP,EAAO,WAAYA,EAAO,SAAS;AAAA,EAChDW,EAAoBX,EAAO,WAAYA,EAAO,SAAS;AAAA,EACvDiB,EAAmBjB,EAAO,UAAU;AAAA;AAAA,EAEpCkB,EAAclB,EAAO,WAAYA,EAAO,SAAS,IAAImB,EACnDnB,EAAO,WACPA,EAAO,SACT;AAAA,EACAoB,EAAiBpB,EAAO,WAAYA,EAAO,SAAS,IAAIqB,EACtDrB,EAAO,WACPA,EAAO,SACT;AAAA,EACAsB,EAAiBtB,EAAO,UAAU;AAAA,EAClCuB,EAAkBvB,EAAO,UAAU;AAAA;AAAA,CAGrC,CCxNA,OAAS,cAAAwB,OAAkB,KAEpB,SAASC,EAAeC,EAAuBC,EAAmB,CACrE,GACI,CAACH,GACG,GAAGG,eAAuBD,EAAO,sCACrC,EACF,CACE,IAAIE,EAAO,UAAUF,EAAO;AAAA,UAC1BA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBTG,EACID,EACA,GAAGD,eAAuBD,EAAO,uCACjC,oBACJ,EAER,CRzBO,SAASI,GAASC,EAAuBC,EAAoB,CAClE,IAAIC,EAAO,GACPD,IAAc,OAChBC,EAAO,QAAQ,IAAI,EAEnBA,EAAOD,EAGLE,GAAW,GAAGD,eAAkBF,EAAO,MAAM,EAC/CI,EAAsB,GAAGF,eAAkBF,EAAO,sBAAsB,GAExEK,EAAaL,EAAQE,CAAI,EACzBI,EAAkBN,EAAQE,CAAI,GAGhCK,EAAeP,EAAQE,CAAI,EAC3BM,EAAeR,EAAQE,CAAI,EAG3BO,EAAeT,EAAQE,CAAI,EAC3BQ,EAAYV,EAAO,KAAME,CAAI,EAC7BS,EAAaX,EAAQE,CAAI,CAC3B,CSjCA,OAAS,UAAAU,OAAc,UACvB,OAAOC,MAAU,OACjB,OAAOC,OAAa,UCDb,IAAMC,EAAN,cAAoC,KAAM,CACjD,KAAO,wBACP,QAAU,sCACV,EDAA,OAAS,UAAAC,OAAc,KACvB,OAAS,iBAAAC,OAAqB,MAC9B,OAAOC,OAAQ,KAGf,IAAMC,GAAc,CAClB,oBACA,qBACA,oBACA,oBACF,EACMC,EAAc,6BAEpB,eAAsBC,GAAWC,EAAuC,CACtEA,EAAa,MAAMC,EAAkBD,CAAU,EAC/C,GAAI,CACF,aAAME,GAAQ,MAAM,CAClB,YAAa,CAACF,CAAU,EACxB,OAAQ,MACR,QAASF,EAET,SAAU,OAEV,OAAQ,GAER,SAAU,UACZ,CAAC,EACDE,EAAa,MAAMC,EAAkBH,EAAa,EAAI,GAI9C,MAAM,OAAOE,EAAa,WAAW,KAAK,IAAI,MAAM,aAC9D,QAAE,CACAN,GAAOI,EAAa,CAAE,MAAO,EAAK,CAAC,CACrC,CACF,CAEA,eAAsBG,EACpBD,EACAG,EACA,CACA,OAAIH,IAAe,OACjBA,EAAa,MAAMI,GAAkB,EAEhCC,EAAK,WAAWL,CAAU,IAC7BA,EAAaK,EAAK,KAAK,QAAQ,IAAI,EAAGL,CAAU,EAChDA,EAAaK,EAAK,UAAUL,CAAU,GAMnCG,GAAaP,GAAG,SAAS,IAAM,QAClCD,GAAcK,CAAU,EAAE,KAC1BA,CACN,CAEA,eAAeI,IAAoB,CACjC,IAAME,EAAe,MAAMC,GAAOV,EAAW,EAC7C,GAAIS,IAAiB,OACnB,MAAM,IAAIE,EAEZ,OAAOF,CACT","names":["prettier","rustPlugin","formatMove","content","prettierConfigPath","config","error","message","formatTypescript","mkdirSync","writeFileSync","dirname","formatAndWriteMove","output","fullOutputPath","logPrefix","mkdirSync","dirname","writeFileSync","formatAndWriteTypescript","formattedOutput","formatTypescript","posixPath","path","existsSync","fs","deleteFolderRecursive","path","file","curPath","capitalizeFirstLetter","input","convertToCamelCase","str","match","getUseSchema","name","values","schema","key","value","getRegisterSchema","registers","getFriendSystem","getStructAttrs","prefixArgs","_","isAddress","getStructInitValue","keys","item","data","getStructTypes","type","getStructAttrsWithType","prefix","getStructAttrsQuery","renderKeyName","renderStruct","structName","isEphemeral","renderNewStructFunc","renderRegisterFunc","renderSetFunc","renderRemoveFunc","renderSetAttrsFunc","struct","renderGetAllFunc","renderGetAttrsFunc","renderContainFunc","renderRegisterFuncWithInit","valueType","defaultValue","renderSingleSetFunc","renderSingleSetAttrsFunc","renderSingleGetAllFunc","renderSingleGetAttrsFunc","existsSync","generateSystem","config","srcPrefix","systemName","existsSync","code","formatAndWriteMove","generateToml","config","srcPrefix","code","formatAndWriteMove","generateEntityKey","config","srcPrefix","code","formatAndWriteMove","generateInit","config","srcPrefix","code","getUseSchema","capitalizeFirstLetter","getRegisterSchema","formatAndWriteMove","generateEps","projectName","srcPrefix","version","generateWorld","generateEvents","code","formatAndWriteMove","getRenderSchemaOptions","config","options","schemaName","schemaData","valueType","realType","defaultValue","ephemeral","singleton","needImportString","key","convertToCamelCase","generateSchema","srcPrefix","option","code","renderEphemeralSchema","renderSingleSchema","renderSchema","formatAndWriteMove","renderKeyName","renderStruct","getStructAttrsWithType","getStructAttrs","getFriendSystem","renderNewStructFunc","renderRegisterFuncWithInit","renderSingleSetFunc","renderSingleSetAttrsFunc","renderSingleGetAllFunc","renderSingleGetAttrsFunc","renderRegisterFunc","renderSetFunc","renderSetAttrsFunc","renderGetAllFunc","renderGetAttrsFunc","renderRemoveFunc","renderContainFunc","existsSync","generateScript","config","srcPrefix","code","formatAndWriteMove","worldgen","config","srcPrefix","path","existsSync","deleteFolderRecursive","generateToml","generateEntityKey","generateSystem","generateScript","generateSchema","generateEps","generateInit","findUp","path","esbuild","NotInsideProjectError","rmSync","pathToFileURL","os","configFiles","TEMP_CONFIG","loadConfig","configPath","resolveConfigPath","esbuild","toFileURL","getUserConfigPath","path","tsConfigPath","findUp","NotInsideProjectError"]}
1
+ {"version":3,"sources":["../src/codegen/utils/format.ts","../src/codegen/utils/formatAndWrite.ts","../src/codegen/utils/posixPath.ts","../src/codegen/utils/renderMove/worldgen.ts","../src/codegen/utils/renderMove/common.ts","../src/codegen/utils/renderMove/generateSystem.ts","../src/codegen/utils/renderMove/generateToml.ts","../src/codegen/utils/renderMove/generateEntityKey.ts","../src/codegen/utils/renderMove/generateInit.ts","../src/codegen/utils/renderMove/generateSchema.ts","../src/codegen/utils/renderMove/generateScript.ts","../src/codegen/utils/renderMove/generateAppKey.ts","../src/codegen/utils/renderMove/generateEps.ts","../src/codegen/utils/config.ts","../src/codegen/utils/errors.ts"],"sourcesContent":["// import chalk from \"chalk\";\nimport * as prettier from \"prettier\";\nimport * as rustPlugin from \"prettier-plugin-rust\";\n\nexport async function formatMove(\n content: string,\n prettierConfigPath?: string\n): Promise<string> {\n let config;\n if (prettierConfigPath) {\n config = await prettier.resolveConfig(prettierConfigPath);\n }\n try {\n return prettier.format(content, {\n plugins: [rustPlugin],\n // parser: \"rustParse\",\n\n printWidth: 120,\n semi: true,\n tabWidth: 2,\n useTabs: false,\n bracketSpacing: true,\n\n ...config,\n });\n } catch (error) {\n let message;\n if (error instanceof Error) {\n message = error.message;\n } else {\n message = error;\n }\n console.log(`Error during output formatting: ${message}`);\n return content;\n }\n}\n\nexport async function formatTypescript(content: string): Promise<string> {\n return prettier.format(content, {\n parser: \"typescript\",\n });\n}\n","import { mkdirSync, writeFileSync } from \"fs\";\nimport { dirname } from \"path\";\nimport { formatMove, formatTypescript } from \"./format\";\n\nexport async function formatAndWriteMove(\n output: string,\n fullOutputPath: string,\n logPrefix?: string\n): Promise<void> {\n // const formattedOutput = await formatMove(output);\n // console.log(formattedOutput)\n mkdirSync(dirname(fullOutputPath), { recursive: true });\n\n writeFileSync(fullOutputPath, output);\n if (logPrefix !== undefined) {\n console.log(`${logPrefix}: ${fullOutputPath}`);\n }\n}\n\nexport async function formatAndWriteTypescript(\n output: string,\n fullOutputPath: string,\n logPrefix: string\n): Promise<void> {\n const formattedOutput = await formatTypescript(output);\n\n mkdirSync(dirname(fullOutputPath), { recursive: true });\n\n writeFileSync(fullOutputPath, formattedOutput);\n console.log(`${logPrefix}: ${fullOutputPath}`);\n}\n","/**\n * Explicitly normalize a given path to a posix path (using `/` as separator).\n * This should be used for generating Solidity files that will be consumed by solc,\n * because solc expects `/` as path separator, but path.join produces `\\` if the user is on windows.\n */\nexport function posixPath(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n}\n","import { SchemaMapType, ObeliskConfig } from \"../../types\";\nimport { rmdirSync, existsSync } from \"fs\";\nimport { deleteFolderRecursive } from \"./common\";\nimport { generateSystem } from \"./generateSystem\";\nimport { generateToml } from \"./generateToml\";\nimport { generateEntityKey } from \"./generateEntityKey\";\nimport { generateInit } from \"./generateInit\";\nimport { generateEps } from \"./generateEps\";\nimport { generateSchema } from \"./generateSchema\";\nimport {generateDeployHook, generateMigrate} from \"./generateScript\";\nimport {generateAppKey} from \"./generateAppKey\";\n\nexport function worldgen(config: ObeliskConfig, srcPrefix?: string) {\n let path = \"\";\n if (srcPrefix === undefined) {\n path = process.cwd();\n } else {\n path = srcPrefix;\n }\n\n if (existsSync(`${path}/contracts/${config.name}`)) {\n deleteFolderRecursive(`${path}/contracts/${config.name}/sources/codegen`);\n } else {\n generateToml(config, path);\n generateEntityKey(config, path);\n }\n\n generateSystem(config, path);\n generateDeployHook(config, path);\n generateMigrate(config, path);\n\n // generate codegen\n generateSchema(config, path);\n generateInit(config, path);\n generateAppKey(config, path);\n}\n","import { BaseType, SchemaMapType, BaseValueType, MoveType } from \"../../types\";\nimport fs from \"fs\";\n\nexport function deleteFolderRecursive(path: string) {\n if (fs.existsSync(path)) {\n fs.readdirSync(path).forEach((file) => {\n const curPath = `${path}/${file}`;\n if (fs.lstatSync(curPath).isDirectory()) {\n deleteFolderRecursive(curPath);\n } else {\n fs.unlinkSync(curPath);\n }\n });\n fs.rmdirSync(path);\n }\n}\n\nexport function capitalizeFirstLetter(input: string): string {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n\n/**\n * Convert snake_case to camelCase\n * @param str\n */\nexport function convertToCamelCase(str: string): string {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n let result = str.replace(/(_\\w)/g, (match) => match[1].toUpperCase());\n return result + \"Data\";\n}\n\n/**\n *\n * @param name\n * @param values\n * @return [use name::name_schema, use name::info_schema]\n */\nexport function getUseSchema(\n name: string,\n values: Record<string, SchemaMapType>\n): string[] {\n let schema: string[] = [];\n Object.entries(values).forEach(([key, value]) => {\n if (typeof value === \"object\" && value.ephemeral) {\n } else {\n schema.push(`\\tuse ${name}::${key}_schema;`);\n }\n });\n return schema;\n}\n\n/**\n * @param values\n * @return [ name_schema::register(&mut _obelisk_world, ctx) ,info_schema::register(&mut _obelisk_world, ctx) ]\n */\nexport function getRegisterSchema(\n values: Record<string, SchemaMapType>\n): string[] {\n let registers: string[] = [];\n Object.entries(values).forEach(([key, value]) => {\n if (typeof value === \"object\" && value.ephemeral) {\n } else {\n registers.push(\n `\\t\\t${key}_schema::register(&mut _obelisk_world, &admin_cap, ctx);`\n );\n }\n });\n return registers;\n}\n\n/**\n *\n * @param name\n * @param values\n * @return [ package name::name_system, package name::info_system ]\n */\nexport function getpackageSystem(name: string, values: string[]): string {\n return (\n values.map((key) => `\\tpackage ${name}::${key};`).join(\"\\n\") +\n `\\n\\tpackage ${name}::deploy_hook;`\n );\n}\n\n/**\n *\n * @param values\n * @param prefixArgs\n * @return [ name, age, birth_time ]\n */\nexport function getStructAttrs(\n values: Record<string, string> | string,\n prefixArgs: string\n): string[] {\n return typeof values === \"string\"\n ? [`${prefixArgs}value`]\n : Object.entries(values).map(([key, _]) => `${prefixArgs}${key}`);\n}\n\nfunction isAddress(str: string): boolean {\n const regex = /^0x[a-fA-F0-9]+$/;\n return regex.test(str);\n}\n\nexport function getStructInitValue(\n keys: BaseType | Record<string, BaseType>,\n values: BaseValueType | Record<string, BaseValueType>\n) {\n if (\n typeof values === \"string\" ||\n typeof values === \"boolean\" ||\n typeof values === \"number\"\n ) {\n if (keys === \"string\") {\n return [`string(b\"${values}\")`];\n }\n if (typeof values === \"string\") {\n if (isAddress(values)) {\n return [`@${values}`];\n }\n }\n return [`${values}`];\n } else if (Array.isArray(values)) {\n // Check the array element type\n if (values.length > 0) {\n if (\n typeof values[0] === \"string\" ||\n typeof values[0] === \"boolean\" ||\n typeof values[0] === \"number\"\n ) {\n if (keys === \"vector<string>\") {\n return [`vector[${values.map((item) => `string(b\"${item}\")`)}]`];\n }\n\n if (typeof values[0] === \"string\") {\n if (isAddress(values[0])) {\n return [`vector[${values.map((item) => `@${item}`)}]`];\n }\n }\n return [`vector[${values.map((item) => `${item}`)}]`];\n } else if (typeof values === \"object\") {\n let res = `vector[${values.map((item: any) => {\n return `vector[${item.map((data: any) => {\n return `${data}`;\n })}]`;\n })}]`;\n\n return [res];\n }\n } else {\n if (keys === \"vector<string>\") {\n return 'vector[string(b\"\")]';\n }\n return \"vector[]\";\n }\n } else if (typeof values === \"object\") {\n // It's an object, handle accordingly\n let res = Object.entries(values).map(([key, value]) => {\n if (\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n ) {\n if (typeof keys === \"string\") {\n if (keys === \"string\") {\n return `string(b\"${value}\")`;\n }\n } else {\n if (keys[key] === \"string\") {\n return `string(b\"${value}\")`;\n }\n }\n\n if (typeof value === \"string\") {\n if (isAddress(value)) {\n return `@${value}`;\n }\n }\n return `${value}`;\n } else if (Array.isArray(value)) {\n // Check the array element type\n if (value.length > 0) {\n if (\n typeof value[0] === \"string\" ||\n typeof value[0] === \"boolean\" ||\n typeof value[0] === \"number\"\n ) {\n if (typeof keys === \"string\") {\n if (keys === \"vector<string>\") {\n return `vector[${value.map((item) => `string(b\"${item}\")`)}]`;\n }\n } else {\n if (keys[key] === \"vector<string>\") {\n return `vector[${value.map((item) => `string(b\"${item}\")`)}]`;\n }\n }\n\n if (typeof value[0] === \"string\") {\n if (isAddress(value[0])) {\n return `vector[${value.map((item) => `@${item}`)}]`;\n }\n }\n return `vector[${value.map((item) => `${item}`)}]`;\n } else if (typeof value === \"object\") {\n let res = `vector[${value.map((item: any) => {\n return `vector[${item.map((data: any) => {\n return `${data}`;\n })}]`;\n })}]`;\n\n return res;\n }\n } else {\n if (typeof keys !== \"string\") {\n if (keys[key] === \"vector<string>\") {\n return 'vector[string(b\"\")]';\n }\n return \"vector[]\";\n }\n }\n }\n });\n return res;\n }\n // Handle other cases or return an empty array if type not recognized\n return [];\n}\n\n/**\n *\n * @param values\n * @return ( bool , u64 , u64)\n */\n// export function getStructTypes(values: SchemaMapType): string {\nexport function getStructTypes(\n values: MoveType | Record<string, MoveType>\n): string {\n return typeof values === \"string\"\n ? values\n : `(${Object.entries(values).map(([_, type]) => `${type}`)})`;\n}\n\n/**\n *\n * @param values\n * @return Attributes and types of the struct. [ name: string, age: u64 ]\n */\nexport function getStructAttrsWithType(\n values: Record<string, string> | string,\n prefix: string\n): string[] {\n return typeof values === \"string\"\n ? [`${prefix}value: ${values}`]\n : Object.entries(values).map(([key, type]) => `${prefix}${key}: ${type}`);\n}\n\n/**\n * @param values\n * @param prefixArgs\n * @return [ data.name, data.age ]\n */\nexport function getStructAttrsQuery(\n values: MoveType | Record<string, MoveType>,\n prefixArgs: string\n): string[] {\n return typeof values === \"string\"\n ? [`${prefixArgs}_obelisk_data.value`]\n : Object.entries(values).map(\n ([key, _]) => `${prefixArgs}_obelisk_data.${key}`\n );\n}\n\nexport function renderKeyName(values: Record<string, string> | string): string {\n return `\\t${getStructAttrs(values, \"// \").join(\"\\n\\t\")}`;\n}\n\nexport function renderStruct(\n structName: string,\n values: Record<string, string> | string,\n isEphemeral: boolean = false\n): string {\n return `\\tpublic struct ${structName} has copy, drop ${\n isEphemeral ? \"\" : \", store\"\n } {\n${getStructAttrsWithType(values, \"\\t\\t\").join(\",\\n\")}\n\\t}\\n`;\n}\n\nexport function renderNewStructFunc(\n structName: string,\n values: Record<string, string> | string\n): string {\n return `\\tpublic fun new(${getStructAttrsWithType(values, \"\").join(\n \", \"\n )}): ${structName} {\n\\t\\t${structName} {\n${getStructAttrs(values, \"\\t\\t\\t\").join(\", \\n\")}\n\\t\\t}\n\\t}\\n`;\n}\n\nexport function renderRegisterFunc(structName: string): string {\n return `\\tpublic fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, ctx: &mut TxContext) {\n\\t\\tschema::add<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID, table::new<address, ${structName}>(ctx), admin_cap);\n\\t}`;\n}\n\nexport function renderSetFunc(\n structName: string,\n values: Record<string, string> | string\n): string {\n return `\\tpublic(package) fun set(_obelisk_world: &mut World, _obelisk_entity_key: address, ${getStructAttrsWithType(\n values,\n \" \"\n )}) {\n\\t\\tlet _obelisk_schema = schema::get_mut<Table<address,${structName}>, AppKey>(app_key::new(), _obelisk_world, SCHEMA_ID);\n\\t\\tlet _obelisk_data = new(${getStructAttrs(values, \" \")});\n\\t\\tif(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key)) {\n\\t\\t\\t*table::borrow_mut<address, ${structName}>(_obelisk_schema, _obelisk_entity_key) = _obelisk_data;\n\\t\\t} else {\n\\t\\t\\ttable::add(_obelisk_schema, _obelisk_entity_key, _obelisk_data);\n\\t\\t};\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, some(_obelisk_entity_key), _obelisk_data)\n\\t}\n`;\n}\n\nexport function renderRemoveFunc(structName: string): string {\n return `\\tpublic(package) fun remove(_obelisk_world: &mut World, _obelisk_entity_key: address) {\n\\t\\tlet _obelisk_schema = schema::get_mut<Table<address,${structName}>, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\ttable::remove(_obelisk_schema, _obelisk_entity_key);\n\\t\\tevents::emit_remove(SCHEMA_ID, _obelisk_entity_key)\n\\t}\n`;\n}\n\nexport function renderSetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([key, type]) =>\n `\\tpublic(package) fun set_${key}(_obelisk_world: &mut World, _obelisk_entity_key: address, ${key}: ${type}) {\n\\t\\tlet _obelisk_schema = schema::get_mut<Table<address,${structName}>, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\tlet _obelisk_data = table::borrow_mut<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);\n\\t\\t_obelisk_data.${key} = ${key};\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, some(_obelisk_entity_key), *_obelisk_data)\n\\t}\n`\n )\n .join(\"\\n\");\n}\n\nexport function renderGetAllFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return `\\tpublic fun get(_obelisk_world: &World, _obelisk_entity_key: address): ${getStructTypes(\n struct\n )} {\n\\t\\tlet _obelisk_schema = schema::get<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\tlet _obelisk_data = table::borrow<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);\n\\t\\t(\n${getStructAttrsQuery(struct, \"\\t\\t\\t\").join(\",\\n\")}\n\\t\\t)\n\\t}\n`;\n}\n\nexport function renderGetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([\n key,\n type,\n ]) => `\\tpublic fun get_${key}(_obelisk_world: &World, _obelisk_entity_key: address): ${type} {\n\\t\\tlet _obelisk_schema = schema::get<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);\n\\t\\tlet _obelisk_data = table::borrow<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);\n\\t\\t_obelisk_data.${key}\n\\t}\n`\n )\n .join(\"\\n\");\n}\n\nexport function renderContainFunc(structName: string): string {\n return `\\tpublic fun contains(_obelisk_world: &World, _obelisk_entity_key: address): bool {\n\\t\\tlet _obelisk_schema = schema::get<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);\n\\t\\ttable::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key)\n\\t}`;\n}\n\nexport function renderRegisterFuncWithInit(\n structName: string,\n valueType: BaseType | Record<string, BaseType>,\n defaultValue: BaseValueType | Record<string, BaseValueType>\n): string {\n return `\\tpublic fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, _ctx: &mut TxContext) {\n\\t\\tlet _obelisk_schema = new(${getStructInitValue(valueType, defaultValue)});\n\\t\\tschema::add<${structName}>(_obelisk_world, SCHEMA_ID, _obelisk_schema, admin_cap);\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema);\n\\t}`;\n}\n\nexport function renderSingleSetFunc(\n structName: string,\n values: Record<string, string> | string\n): string {\n return `\\tpublic(package) fun set(_obelisk_world: &mut World, ${getStructAttrsWithType(\n values,\n \" \"\n )}) {\n\\t\\tlet _obelisk_schema = schema::get_mut<${structName}, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);\n${\n typeof values === \"string\"\n ? `\\t\\t_obelisk_schema.value = value;\n events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema.value);`\n : `\\t\\tlet _obelisk_data = new(${getStructAttrs(values, \" \")});\n *_obelisk_schema = _obelisk_data;\n events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_data);`\n}\n\\t}`;\n}\n\nexport function renderSingleSetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([key, type]) => `\n\\tpublic(package) fun set_${key}(_obelisk_world: &mut World, ${key}: ${type}) {\n\\t\\tlet _obelisk_schema = schema::get_mut<${structName}, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);\n\\t\\t_obelisk_schema.${key} = ${key};\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), *_obelisk_schema)\n\\t}`\n )\n .join(\"\\n\");\n}\n\nexport function renderSingleGetAllFunc(\n structName: string,\n values: MoveType | Record<string, MoveType>\n): string {\n return `\\tpublic fun get(_obelisk_world: &World): ${getStructTypes(values)} {\n\\t\\tlet _obelisk_schema = schema::get<${structName}>(_obelisk_world, SCHEMA_ID);\n\\t\\t(\n${\n typeof values === \"string\"\n ? `\\t\\t\\t_obelisk_schema.value`\n : Object.entries(values)\n .map(([key, _]) => `\\t\\t\\t_obelisk_schema.${key},`)\n .join(\"\\n\")\n}\n\\t\\t)\n\\t}`;\n}\n\nexport function renderSingleGetAttrsFunc(\n structName: string,\n struct: MoveType | Record<string, MoveType>\n): string {\n return typeof struct === \"string\"\n ? \"\"\n : \"\\n\" +\n Object.entries(struct)\n .map(\n ([key, type]) => `\n\\tpublic fun get_${key}(_obelisk_world: &World): ${type} {\n\\t\\tlet _obelisk_schema = schema::get<${structName}>(_obelisk_world, SCHEMA_ID);\n\\t\\t_obelisk_schema.${key}\n\\t}`\n )\n .join(\"\\n\");\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport { existsSync } from \"fs\";\n\nexport function generateSystem2(config: ObeliskConfig, srcPrefix: string) {\n config.systems.map((systemName) => {\n let code = `module ${config.name}::${systemName} {\n\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/system/${systemName}.move`,\n \"formatAndWriteMove\"\n );\n });\n}\n\nexport function generateNewSystem1(\n name: string,\n systemName: string,\n srcPrefix: string\n) {\n let code = `module ${name}::${systemName} {\n\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${name}/sources/system/${systemName}.move`,\n \"formatAndWriteMove\"\n );\n}\n\nexport function generateSystem(config: ObeliskConfig, srcPrefix: string) {\n config.systems.map((systemName) => {\n if (\n !existsSync(\n `${srcPrefix}/contracts/${config.name}/sources/system/${systemName}.move`\n )\n ) {\n let code = `module ${config.name}::${systemName} {\n\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/system/${systemName}.move`,\n \"formatAndWriteMove\"\n );\n }\n });\n}\n","import { ObeliskConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\n\nexport function generateToml(config: ObeliskConfig, srcPrefix: string) {\n\tlet code = `[package]\nname = \"${config.name}\"\nversion = \"0.0.1\"\nedition = \"2024.beta\"\n\n[dependencies]\nSui = { git = \"https://github.com/MystenLabs/sui.git\", subdir = \"crates/sui-framework/packages/sui-framework\", rev = \"mainnet-v1.31.1\" }\n# Obelisk = { git = \"https://github.com/0xobelisk/obelisk-engine.git\", subdir = \"packages/obelisk-framework\", rev = \"mainnet-v1.31.1\" }\nObelisk = { local = \"/Volumes/project/obelisk-engine/packages/obelisk-framework\" }\n\n[addresses]\nsui = \"0x2\"\nobelisk = \"0x6c93abd6e076235f51c6dd95b4adf9b0d4f5b6f6766c6a7b6653101a78a04d8c\"\n${config.name} = \"0x0\"\n`;\n\tformatAndWriteMove(\n\t\tcode,\n\t\t`${srcPrefix}/contracts/${config.name}/Move.toml`,\n\t\t'formatAndWriteMove'\n\t);\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\n\nexport function generateEntityKey(config: ObeliskConfig, srcPrefix: string) {\n let code = `module ${config.name}::entity_key {\n use sui::hash::keccak256;\n use sui::address;\n use sui::bcs;\n\n public fun from_object<T: key + store>(object: &T): address {\n object::id_address(object)\n }\n\n public fun from_bytes(bytes: vector<u8>): address {\n address::from_bytes(keccak256(&bytes))\n }\n\n public fun from_u256(x: u256): address {\n address::from_u256(x)\n }\n\n public fun from_address_with_seed(addr: address, seed: vector<u8>): address {\n let mut data = address::to_bytes(addr);\n vector::append(&mut data, seed);\n from_bytes(data)\n }\n\n public fun from_address_with_u256(addr: address, x: u256): address {\n let mut data = address::to_bytes(addr);\n vector::append(&mut data, bcs::to_bytes<u256>(&x));\n from_bytes(data)\n }\n\n public fun from_object_with_seed<T: key + store>(object: &T, seed: vector<u8>): address {\n let mut data = address::to_bytes(object::id_address(object));\n vector::append(&mut data, seed);\n from_bytes(data)\n }\n\n public fun from_object_with_u256<T: key + store>(object: &T, x: u256): address {\n let mut data = address::to_bytes(object::id_address(object));\n vector::append(&mut data, bcs::to_bytes<u256>(&x));\n from_bytes(data)\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/entity_key.move`,\n \"formatAndWriteMove\"\n );\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport {\n getRegisterSchema,\n getUseSchema,\n capitalizeFirstLetter,\n} from \"./common\";\n\nexport function generateInit(config: ObeliskConfig, srcPrefix: string) {\n let code = `#[allow(lint(share_owned))] \n\nmodule ${config.name}::init {\n use std::ascii::string;\n use ${config.name}::app_key::AppKey;\n use obelisk::access_control;\n use obelisk::world;\n${getUseSchema(config.name, config.schemas).join(\"\\n\")}\n\n fun init(ctx: &mut TxContext) {\n let (mut _obelisk_world, admin_cap) = world::create(string(b\"${capitalizeFirstLetter(\n config.name\n )}\"), string(b\"${capitalizeFirstLetter(config.description)}\"),ctx);\n \n // Authorize this application to access protected features of the World.\n access_control::authorize_app<AppKey>(&admin_cap, &mut _obelisk_world);\n\n // Add Schema\n${getRegisterSchema(config.schemas).join(\"\\n\")}\n\n transfer::public_share_object(_obelisk_world);\n transfer::public_transfer(admin_cap, tx_context::sender(ctx));\n }\n\n #[test_only]\n public fun init_world_for_testing(ctx: &mut TxContext){\n init(ctx)\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/codegen/init.move`,\n \"formatAndWriteMove\"\n );\n}\n","import {\n ObeliskConfig,\n BaseValueType,\n BaseType,\n RenderSchemaOptions,\n MoveType,\n} from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport {\n renderKeyName,\n renderSetFunc,\n renderContainFunc,\n renderRemoveFunc,\n renderStruct,\n renderNewStructFunc,\n convertToCamelCase,\n renderSetAttrsFunc,\n renderRegisterFunc,\n renderGetAllFunc,\n renderGetAttrsFunc,\n getStructAttrsWithType,\n getStructAttrs,\n renderRegisterFuncWithInit,\n renderSingleSetFunc,\n renderSingleSetAttrsFunc,\n renderSingleGetAllFunc,\n renderSingleGetAttrsFunc,\n} from \"./common\";\n\nexport function getRenderSchemaOptions(config: ObeliskConfig) {\n const options: RenderSchemaOptions[] = [];\n for (const schemaName of Object.keys(config.schemas)) {\n const schemaData = config.schemas[schemaName];\n let valueType: MoveType | Record<string, MoveType>;\n let realType: BaseType | Record<string, BaseType>;\n let defaultValue: BaseValueType | Record<string, BaseValueType> | undefined;\n let ephemeral = false;\n let singleton = false;\n let needImportString = false;\n if (typeof schemaData === \"string\") {\n realType = schemaData;\n\n if (schemaData === \"string\") {\n valueType = \"String\";\n needImportString = true;\n } else if (schemaData === \"vector<string>\") {\n valueType = \"vector<String>\";\n needImportString = true;\n } else {\n valueType = schemaData;\n }\n } else {\n realType = schemaData.valueType;\n\n if (typeof schemaData.valueType === \"string\") {\n if (schemaData.valueType === \"string\") {\n valueType = \"String\";\n needImportString = true;\n } else if (schemaData.valueType === \"vector<string>\") {\n valueType = \"vector<String>\";\n needImportString = true;\n } else {\n valueType = schemaData.valueType;\n }\n } else {\n valueType = { ...schemaData.valueType };\n for (const key in valueType) {\n if (valueType.hasOwnProperty(key)) {\n if (valueType[key] === \"string\") {\n valueType[key] = \"String\";\n needImportString = true;\n } else if (valueType[key] === \"vector<string>\") {\n valueType[key] = \"vector<String>\";\n needImportString = true;\n\n // needImport = \"\\tuse std::ascii::{String, string};\";\n }\n }\n }\n }\n defaultValue = schemaData.defaultValue;\n ephemeral =\n schemaData.ephemeral !== undefined ? schemaData.ephemeral : false;\n singleton = schemaData.defaultValue !== undefined ? true : false;\n }\n\n options.push({\n projectName: config.name,\n systems: config.systems,\n schemaName: schemaName,\n structName: convertToCamelCase(schemaName),\n ephemeral,\n singleton,\n valueType,\n realType,\n // structAttrs: [renderKeyName(valueType)],\n // structTypes: [renderStruct(convertToCamelCase(schemaName), valueType)],\n defaultValue,\n needImportString,\n });\n }\n return options;\n}\n\nexport function generateSchema(config: ObeliskConfig, srcPrefix: string) {\n const options = getRenderSchemaOptions(config);\n for (const option of options) {\n let code: string;\n if (option.ephemeral) {\n code = renderEphemeralSchema(option);\n } else if (option.defaultValue !== undefined) {\n code = renderSingleSchema(option);\n } else {\n code = renderSchema(option);\n }\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${option.projectName}/sources/codegen/schemas/${option.schemaName}.move`,\n \"formatAndWriteMove\"\n );\n }\n}\n\nfunction renderEphemeralSchema(option: RenderSchemaOptions): string {\n return `module ${option.projectName}::${option.schemaName}_schema {\n\tuse std::option::none;\n\tuse obelisk::events;\n \n const SCHEMA_ID: vector<u8> = b\"${option.schemaName}\";\n const SCHEMA_TYPE: u8 = 2;\n \n${renderKeyName(option.valueType)}\n${renderStruct(option.structName, option.valueType, option.ephemeral)} \n\\tpublic fun emit_${option.schemaName}(${getStructAttrsWithType(\n option.valueType,\n \" \"\n )}) {\n\\t\\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), ${option.structName} { ${getStructAttrs(\n option.valueType,\n \" \"\n )} })\n\\t}\n}`;\n}\n\nfunction renderSingleSchema(option: RenderSchemaOptions): string {\n return `module ${option.projectName}::${option.schemaName}_schema {\n${\n option.needImportString ? \"\\tuse std::ascii::{String,string};\\n\\t\" : \"\\t\"\n}use std::option::none;\n use ${option.projectName}::app_key;\n use ${option.projectName}::app_key::AppKey;\n use obelisk::schema;\n use obelisk::events;\n use obelisk::world::{World, AdminCap};\n\n\\tconst SCHEMA_ID: vector<u8> = b\"${option.schemaName}\";\n\\tconst SCHEMA_TYPE: u8 = 1;\n\n${renderKeyName(option.valueType)}\n${renderStruct(option.structName, option.valueType)}\n${renderNewStructFunc(option.structName, option.valueType)}\n${renderRegisterFuncWithInit(\n option.structName,\n option.realType,\n option.defaultValue!\n)}\n\n${renderSingleSetFunc(\n option.structName,\n option.valueType\n)}${renderSingleSetAttrsFunc(option.structName, option.valueType)}\n\n${renderSingleGetAllFunc(\n option.structName,\n option.valueType\n)}${renderSingleGetAttrsFunc(option.structName, option.valueType)}\n}\n`;\n}\n\nfunction renderSchema(option: RenderSchemaOptions) {\n return `module ${option.projectName}::${option.schemaName}_schema {\n${\n option.needImportString ? \"\\tuse std::ascii::String;\\n\\t\" : \"\\t\"\n}use std::option::some;\n use ${option.projectName}::app_key;\n use ${option.projectName}::app_key::AppKey;\n use sui::table::{Self, Table};\n use obelisk::schema;\n use obelisk::events;\n use obelisk::world::{World, AdminCap};\n\n\\t/// Entity does not exist\n\\tconst EEntityDoesNotExist: u64 = 0;\n\n\\tconst SCHEMA_ID: vector<u8> = b\"${option.schemaName}\";\n\\tconst SCHEMA_TYPE: u8 = 0;\n\n${renderKeyName(option.valueType)}\n${renderStruct(option.structName, option.valueType)}\n${renderNewStructFunc(option.structName, option.valueType)}\n${renderRegisterFunc(option.structName)}\n\n${renderSetFunc(option.structName, option.valueType)}${renderSetAttrsFunc(\n option.structName,\n option.valueType\n )}\n${renderGetAllFunc(option.structName, option.valueType)}${renderGetAttrsFunc(\n option.structName,\n option.valueType\n )}\n${renderRemoveFunc(option.structName)}\n${renderContainFunc(option.structName)}\n}\n`;\n}\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport { existsSync } from \"fs\";\n\nexport function generateDeployHook(config: ObeliskConfig, srcPrefix: string) {\n if (\n !existsSync(\n `${srcPrefix}/contracts/${config.name}/sources/script/deploy_hook.move`\n )\n ) {\n let code = `module ${config.name}::deploy_hook {\n use obelisk::world::{World, AdminCap};\n\n /// Not the right admin for this world\n const ENotAdmin: u64 = 0;\n\n public entry fun run(world: &mut World, admin_cap: &AdminCap) {\n assert!(world.admin() == object::id(admin_cap), ENotAdmin);\n \n // Logic that needs to be automated once the contract is deployed\n \n }\n\n #[test_only]\n public fun deploy_hook_for_testing(world: &mut World, admin_cap: &AdminCap){\n run(world, admin_cap)\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/script/deploy_hook.move`,\n \"formatAndWriteMove\"\n );\n }\n}\n\nexport function generateMigrate(config: ObeliskConfig, srcPrefix: string) {\n if (\n !existsSync(\n `${srcPrefix}/contracts/${config.name}/sources/script/migrate.move`\n )\n ) {\n let code = `module ${config.name}::migrate {\n use obelisk::world::{World, AdminCap};\n\n /// Not the right admin for this world\n const ENotAdmin: u64 = 0;\n const EWrongVersion: u64 = 1;\n const ENotUpgrade: u64 = 2;\n const VERSION: u64 = 1;\n\n public entry fun run(world: &mut World, admin_cap: &AdminCap) {\n assert!(world.admin() == object::id(admin_cap), ENotAdmin);\n assert!(world.version() < VERSION, ENotUpgrade);\n *obelisk::world::mut_version(world, admin_cap) = VERSION;\n }\n\n public fun assert_version(world: &World){\n assert!(world.version() == VERSION, EWrongVersion);\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/script/migrate.move`,\n \"formatAndWriteMove\"\n );\n }\n}\n\n","import { ObeliskConfig } from \"../../types\";\nimport { formatAndWriteMove } from \"../formatAndWrite\";\nimport {\n getRegisterSchema,\n getUseSchema,\n capitalizeFirstLetter,\n} from \"./common\";\n\nexport function generateAppKey(config: ObeliskConfig, srcPrefix: string) {\n let code = `module ${config.name}::app_key {\n /// Authorization token for the app.\n public struct AppKey has drop {}\n\n public(package) fun new(): AppKey {\n AppKey { }\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/codegen/app_key.move`,\n \"formatAndWriteMove\"\n );\n}\n","import { formatAndWriteMove } from \"../formatAndWrite\";\n\nexport function generateEps(\n projectName: string,\n srcPrefix: string,\n version?: number\n) {\n generateWorld(projectName, srcPrefix, version);\n generateEvents(projectName, srcPrefix);\n}\n\nfunction generateWorld(\n projectName: string,\n srcPrefix: string,\n version?: number\n) {\n if (version === undefined) {\n version = 1;\n }\n\n let code = `module ${projectName}::world {\n use std::ascii::{String, string};\n use std::vector;\n use sui::tx_context::TxContext;\n use sui::bag::{Self, Bag};\n use sui::object::{Self, UID, ID};\n \n const VERSION: u64 = ${version};\n\n /// Schema does not exist\n const ESchemaDoesNotExist: u64 = 0;\n /// Schema already exists\n const ESchemaAlreadyExists: u64 = 1;\n /// Not the right admin for this world\n const ENotAdmin: u64 = 2;\n /// Migration is not an upgrade\n const ENotUpgrade: u64 = 3;\n /// Calling functions from the wrong package version\n const EWrongVersion: u64 = 4;\n\n struct AdminCap has key, store {\n id: UID,\n }\n\n struct World has key, store {\n id: UID,\n /// Name of the world\n name: String,\n /// Description of the world\n description: String,\n /// Schemas of the world\n schemas: Bag,\n /// Schema names of the world\n schema_names: vector<String>,\n /// admin of the world\n admin: ID,\n /// Version of the world\n version: u64\n }\n\n public fun create(name: String, description: String, ctx: &mut TxContext): (World, AdminCap) {\n let admin_cap = AdminCap {\n id: object::new(ctx),\n };\n let _obelisk_world = World {\n id: object::new(ctx),\n name,\n description,\n schemas: bag::new(ctx),\n schema_names: vector::empty(),\n admin: object::id(&admin_cap),\n version: VERSION\n };\n (_obelisk_world, admin_cap)\n }\n \n public fun get_admin(_obelisk_world: &World): ID {\n _obelisk_world.admin\n }\n\n public fun info(_obelisk_world: &World): (String, String, u64) {\n (_obelisk_world.name, _obelisk_world.description, _obelisk_world.version)\n }\n \n public fun schema_names(_obelisk_world: &World): vector<String> {\n _obelisk_world.schema_names\n }\n\n public fun get_schema<T : store>(_obelisk_world: &World, _obelisk_schema_id: vector<u8>): &T {\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n assert!(bag::contains(&_obelisk_world.schemas, _obelisk_schema_id), ESchemaDoesNotExist);\n bag::borrow<vector<u8>, T>(&_obelisk_world.schemas, _obelisk_schema_id)\n }\n\n public fun get_mut_schema<T : store>(_obelisk_world: &mut World, _obelisk_schema_id: vector<u8>): &mut T {\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n assert!(bag::contains(&_obelisk_world.schemas, _obelisk_schema_id), ESchemaDoesNotExist);\n bag::borrow_mut<vector<u8>, T>(&mut _obelisk_world.schemas, _obelisk_schema_id)\n }\n\n public fun add_schema<T : store>(_obelisk_world: &mut World, _obelisk_schema_id: vector<u8>, schema: T, admin_cap: &AdminCap){\n assert!(_obelisk_world.admin == object::id(admin_cap), ENotAdmin);\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n assert!(!bag::contains(&_obelisk_world.schemas, _obelisk_schema_id), ESchemaAlreadyExists);\n vector::push_back(&mut _obelisk_world.schema_names, string(_obelisk_schema_id));\n bag::add<vector<u8>,T>(&mut _obelisk_world.schemas, _obelisk_schema_id, schema);\n }\n\n public fun contains(_obelisk_world: &mut World, _obelisk_schema_id: vector<u8>): bool {\n assert!(_obelisk_world.version == VERSION, EWrongVersion);\n bag::contains(&mut _obelisk_world.schemas, _obelisk_schema_id)\n }\n \n entry fun migrate(_obelisk_world: &mut World, admin_cap: &AdminCap) {\n assert!(_obelisk_world.admin == object::id(admin_cap), ENotAdmin);\n assert!(_obelisk_world.version < VERSION, ENotUpgrade);\n _obelisk_world.version = VERSION;\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${projectName}/sources/codegen/eps/world.move`,\n \"formatAndWriteMove\"\n );\n}\n\nfunction generateEvents(projectName: string, srcPrefix: string) {\n let code = `module ${projectName}::events {\n use sui::event;\n use std::option::Option;\n\n struct SchemaSetRecord<T: copy + drop> has copy, drop {\n _obelisk_schema_id: vector<u8>,\n _obelisk_schema_type: u8, // obelisk_schema_type_enum => { 0: common, 1: singleton, 2: ephemeral }\n _obelisk_entity_key: Option<address>,\n data: T\n }\n\n struct SchemaRemoveRecord has copy, drop {\n _obelisk_schema_id: vector<u8>,\n _obelisk_entity_key: address\n }\n\n public fun emit_set<T: copy + drop>(_obelisk_schema_id: vector<u8>, _obelisk_schema_type: u8, _obelisk_entity_key: Option<address>, data: T) {\n event::emit(SchemaSetRecord { _obelisk_schema_id, _obelisk_schema_type, _obelisk_entity_key, data})\n }\n\n public fun emit_remove(_obelisk_schema_id: vector<u8>, _obelisk_entity_key: address) {\n event::emit(SchemaRemoveRecord { _obelisk_schema_id, _obelisk_entity_key })\n }\n}\n`;\n formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${projectName}/sources/codegen/eps/events.move`,\n \"formatAndWriteMove\"\n );\n}\n","import { findUp } from \"find-up\";\nimport path from \"path\";\nimport esbuild from \"esbuild\";\nimport { NotInsideProjectError } from \"./errors\";\nimport { rmSync } from \"fs\";\nimport { pathToFileURL } from \"url\";\nimport os from \"os\";\n\n// In order of preference files are checked\nconst configFiles = [\n \"obelisk.config.js\",\n \"obelisk.config.mjs\",\n \"obelisk.config.ts\",\n \"obelisk.config.mts\",\n];\nconst TEMP_CONFIG = \"obelisk.config.example.mjs\";\n\nexport async function loadConfig(configPath?: string): Promise<unknown> {\n configPath = await resolveConfigPath(configPath);\n try {\n await esbuild.build({\n entryPoints: [configPath],\n format: \"esm\",\n outfile: TEMP_CONFIG,\n // https://esbuild.github.io/getting-started/#bundling-for-node\n platform: \"node\",\n // bundle local imports (otherwise it may error, js can't import ts)\n bundle: true,\n // avoid bundling external imports (it's unnecessary and esbuild can't handle all node features)\n packages: \"external\",\n });\n configPath = await resolveConfigPath(TEMP_CONFIG, true);\n // Node.js caches dynamic imports, so without appending a cache breaking\n // param like `?update={Date.now()}` this import always returns the same config\n // if called multiple times in a single process, like the `dev-contracts` cli\n return (await import(configPath + `?update=${Date.now()}`)).obeliskConfig;\n } finally {\n rmSync(TEMP_CONFIG, { force: true });\n }\n}\n\nexport async function resolveConfigPath(\n configPath: string | undefined,\n toFileURL?: boolean\n) {\n if (configPath === undefined) {\n configPath = await getUserConfigPath();\n } else {\n if (!path.isAbsolute(configPath)) {\n configPath = path.join(process.cwd(), configPath);\n configPath = path.normalize(configPath);\n }\n }\n\n // Add `file:///` for Windows support\n // (see https://github.com/nodejs/node/issues/31710)\n return toFileURL && os.platform() === \"win32\"\n ? pathToFileURL(configPath).href\n : configPath;\n}\n\nasync function getUserConfigPath() {\n const tsConfigPath = await findUp(configFiles);\n if (tsConfigPath === undefined) {\n throw new NotInsideProjectError();\n }\n return tsConfigPath;\n}\n","\nexport class NotInsideProjectError extends Error {\nname = \"NotInsideProjectError\";\nmessage = \"You are not inside a Obelisk project\";\n}"],"mappings":"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","names":["prettier","rustPlugin","formatMove","content","prettierConfigPath","config","error","message","formatTypescript","mkdirSync","writeFileSync","dirname","formatAndWriteMove","output","fullOutputPath","logPrefix","mkdirSync","dirname","writeFileSync","formatAndWriteTypescript","formattedOutput","formatTypescript","posixPath","path","existsSync","fs","deleteFolderRecursive","path","file","curPath","capitalizeFirstLetter","input","convertToCamelCase","str","match","getUseSchema","name","values","schema","key","value","getRegisterSchema","registers","getStructAttrs","values","prefixArgs","key","_","isAddress","str","getStructInitValue","keys","item","data","value","getStructTypes","type","getStructAttrsWithType","prefix","getStructAttrsQuery","renderKeyName","renderStruct","structName","isEphemeral","renderNewStructFunc","renderRegisterFunc","renderSetFunc","renderRemoveFunc","renderSetAttrsFunc","struct","renderGetAllFunc","renderGetAttrsFunc","renderContainFunc","renderRegisterFuncWithInit","valueType","defaultValue","renderSingleSetFunc","renderSingleSetAttrsFunc","renderSingleGetAllFunc","renderSingleGetAttrsFunc","existsSync","generateSystem","config","srcPrefix","systemName","existsSync","code","formatAndWriteMove","generateToml","config","srcPrefix","code","formatAndWriteMove","generateEntityKey","config","srcPrefix","code","formatAndWriteMove","generateInit","config","srcPrefix","code","getUseSchema","capitalizeFirstLetter","getRegisterSchema","formatAndWriteMove","getRenderSchemaOptions","config","options","schemaName","schemaData","valueType","realType","defaultValue","ephemeral","singleton","needImportString","key","convertToCamelCase","generateSchema","srcPrefix","option","code","renderEphemeralSchema","renderSingleSchema","renderSchema","formatAndWriteMove","renderKeyName","renderStruct","getStructAttrsWithType","getStructAttrs","renderNewStructFunc","renderRegisterFuncWithInit","renderSingleSetFunc","renderSingleSetAttrsFunc","renderSingleGetAllFunc","renderSingleGetAttrsFunc","renderRegisterFunc","renderSetFunc","renderSetAttrsFunc","renderGetAllFunc","renderGetAttrsFunc","renderRemoveFunc","renderContainFunc","existsSync","generateDeployHook","config","srcPrefix","code","formatAndWriteMove","generateMigrate","generateAppKey","config","srcPrefix","code","formatAndWriteMove","worldgen","config","srcPrefix","path","existsSync","deleteFolderRecursive","generateToml","generateEntityKey","generateSystem","generateDeployHook","generateMigrate","generateSchema","generateInit","generateAppKey","generateEps","projectName","srcPrefix","version","generateWorld","generateEvents","code","formatAndWriteMove","findUp","path","esbuild","NotInsideProjectError","rmSync","pathToFileURL","os","configFiles","TEMP_CONFIG","loadConfig","configPath","resolveConfigPath","esbuild","toFileURL","getUserConfigPath","path","tsConfigPath","findUp","NotInsideProjectError"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xobelisk/sui-common",
3
- "version": "0.5.7",
3
+ "version": "0.5.9",
4
4
  "description": "Common low level logic shared between packages",
5
5
  "keywords": [
6
6
  "sui",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "types": "src/index.ts",
37
37
  "dependencies": {
38
- "@mysten/sui.js": "^0.51.2",
38
+ "@mysten/sui": "^1.1.2",
39
39
  "chalk": "^5.0.1",
40
40
  "dotenv": "^16.0.3",
41
41
  "ejs": "^3.1.8",
@@ -72,12 +72,12 @@ export function getRegisterSchema(
72
72
  *
73
73
  * @param name
74
74
  * @param values
75
- * @return [ friend name::name_system, friend name::info_system ]
75
+ * @return [ package name::name_system, package name::info_system ]
76
76
  */
77
- export function getFriendSystem(name: string, values: string[]): string {
77
+ export function getpackageSystem(name: string, values: string[]): string {
78
78
  return (
79
- values.map((key) => `\tfriend ${name}::${key};`).join("\n") +
80
- `\n\tfriend ${name}::deploy_hook;`
79
+ values.map((key) => `\tpackage ${name}::${key};`).join("\n") +
80
+ `\n\tpackage ${name}::deploy_hook;`
81
81
  );
82
82
  }
83
83
 
@@ -278,7 +278,7 @@ export function renderStruct(
278
278
  values: Record<string, string> | string,
279
279
  isEphemeral: boolean = false
280
280
  ): string {
281
- return `\tstruct ${structName} has copy, drop ${
281
+ return `\tpublic struct ${structName} has copy, drop ${
282
282
  isEphemeral ? "" : ", store"
283
283
  } {
284
284
  ${getStructAttrsWithType(values, "\t\t").join(",\n")}
@@ -300,7 +300,7 @@ ${getStructAttrs(values, "\t\t\t").join(", \n")}
300
300
 
301
301
  export function renderRegisterFunc(structName: string): string {
302
302
  return `\tpublic fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, ctx: &mut TxContext) {
303
- \t\tworld::add_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID, table::new<address, ${structName}>(ctx), admin_cap);
303
+ \t\tschema::add<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID, table::new<address, ${structName}>(ctx), admin_cap);
304
304
  \t}`;
305
305
  }
306
306
 
@@ -308,11 +308,11 @@ export function renderSetFunc(
308
308
  structName: string,
309
309
  values: Record<string, string> | string
310
310
  ): string {
311
- return `\tpublic(friend) fun set(_obelisk_world: &mut World, _obelisk_entity_key: address, ${getStructAttrsWithType(
311
+ return `\tpublic(package) fun set(_obelisk_world: &mut World, _obelisk_entity_key: address, ${getStructAttrsWithType(
312
312
  values,
313
313
  " "
314
314
  )}) {
315
- \t\tlet _obelisk_schema = world::get_mut_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
315
+ \t\tlet _obelisk_schema = schema::get_mut<Table<address,${structName}>, AppKey>(app_key::new(), _obelisk_world, SCHEMA_ID);
316
316
  \t\tlet _obelisk_data = new(${getStructAttrs(values, " ")});
317
317
  \t\tif(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key)) {
318
318
  \t\t\t*table::borrow_mut<address, ${structName}>(_obelisk_schema, _obelisk_entity_key) = _obelisk_data;
@@ -325,8 +325,8 @@ export function renderSetFunc(
325
325
  }
326
326
 
327
327
  export function renderRemoveFunc(structName: string): string {
328
- return `\tpublic(friend) fun remove(_obelisk_world: &mut World, _obelisk_entity_key: address) {
329
- \t\tlet _obelisk_schema = world::get_mut_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
328
+ return `\tpublic(package) fun remove(_obelisk_world: &mut World, _obelisk_entity_key: address) {
329
+ \t\tlet _obelisk_schema = schema::get_mut<Table<address,${structName}>, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
330
330
  \t\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
331
331
  \t\ttable::remove(_obelisk_schema, _obelisk_entity_key);
332
332
  \t\tevents::emit_remove(SCHEMA_ID, _obelisk_entity_key)
@@ -344,8 +344,8 @@ export function renderSetAttrsFunc(
344
344
  Object.entries(struct)
345
345
  .map(
346
346
  ([key, type]) =>
347
- `\tpublic(friend) fun set_${key}(_obelisk_world: &mut World, _obelisk_entity_key: address, ${key}: ${type}) {
348
- \t\tlet _obelisk_schema = world::get_mut_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
347
+ `\tpublic(package) fun set_${key}(_obelisk_world: &mut World, _obelisk_entity_key: address, ${key}: ${type}) {
348
+ \t\tlet _obelisk_schema = schema::get_mut<Table<address,${structName}>, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
349
349
  \t\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
350
350
  \t\tlet _obelisk_data = table::borrow_mut<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);
351
351
  \t\t_obelisk_data.${key} = ${key};
@@ -363,7 +363,7 @@ export function renderGetAllFunc(
363
363
  return `\tpublic fun get(_obelisk_world: &World, _obelisk_entity_key: address): ${getStructTypes(
364
364
  struct
365
365
  )} {
366
- \t\tlet _obelisk_schema = world::get_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
366
+ \t\tlet _obelisk_schema = schema::get<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
367
367
  \t\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
368
368
  \t\tlet _obelisk_data = table::borrow<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);
369
369
  \t\t(
@@ -386,7 +386,7 @@ export function renderGetAttrsFunc(
386
386
  key,
387
387
  type,
388
388
  ]) => `\tpublic fun get_${key}(_obelisk_world: &World, _obelisk_entity_key: address): ${type} {
389
- \t\tlet _obelisk_schema = world::get_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
389
+ \t\tlet _obelisk_schema = schema::get<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
390
390
  \t\tassert!(table::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key), EEntityDoesNotExist);
391
391
  \t\tlet _obelisk_data = table::borrow<address, ${structName}>(_obelisk_schema, _obelisk_entity_key);
392
392
  \t\t_obelisk_data.${key}
@@ -398,7 +398,7 @@ export function renderGetAttrsFunc(
398
398
 
399
399
  export function renderContainFunc(structName: string): string {
400
400
  return `\tpublic fun contains(_obelisk_world: &World, _obelisk_entity_key: address): bool {
401
- \t\tlet _obelisk_schema = world::get_schema<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
401
+ \t\tlet _obelisk_schema = schema::get<Table<address,${structName}>>(_obelisk_world, SCHEMA_ID);
402
402
  \t\ttable::contains<address, ${structName}>(_obelisk_schema, _obelisk_entity_key)
403
403
  \t}`;
404
404
  }
@@ -410,7 +410,7 @@ export function renderRegisterFuncWithInit(
410
410
  ): string {
411
411
  return `\tpublic fun register(_obelisk_world: &mut World, admin_cap: &AdminCap, _ctx: &mut TxContext) {
412
412
  \t\tlet _obelisk_schema = new(${getStructInitValue(valueType, defaultValue)});
413
- \t\tworld::add_schema<${structName}>(_obelisk_world, SCHEMA_ID, _obelisk_schema, admin_cap);
413
+ \t\tschema::add<${structName}>(_obelisk_world, SCHEMA_ID, _obelisk_schema, admin_cap);
414
414
  \t\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema);
415
415
  \t}`;
416
416
  }
@@ -419,17 +419,18 @@ export function renderSingleSetFunc(
419
419
  structName: string,
420
420
  values: Record<string, string> | string
421
421
  ): string {
422
- return `\tpublic(friend) fun set(_obelisk_world: &mut World, ${getStructAttrsWithType(
422
+ return `\tpublic(package) fun set(_obelisk_world: &mut World, ${getStructAttrsWithType(
423
423
  values,
424
424
  " "
425
425
  )}) {
426
- \t\tlet _obelisk_schema = world::get_mut_schema<${structName}>(_obelisk_world, SCHEMA_ID);
426
+ \t\tlet _obelisk_schema = schema::get_mut<${structName}, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
427
427
  ${
428
428
  typeof values === "string"
429
- ? `\t\t_obelisk_schema.value = value;`
430
- : Object.entries(values)
431
- .map(([key, _]) => `\t\t_obelisk_schema.${key} = ${key};`)
432
- .join("\n")
429
+ ? `\t\t_obelisk_schema.value = value;
430
+ events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_schema.value);`
431
+ : `\t\tlet _obelisk_data = new(${getStructAttrs(values, " ")});
432
+ *_obelisk_schema = _obelisk_data;
433
+ events::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), _obelisk_data);`
433
434
  }
434
435
  \t}`;
435
436
  }
@@ -444,8 +445,8 @@ export function renderSingleSetAttrsFunc(
444
445
  Object.entries(struct)
445
446
  .map(
446
447
  ([key, type]) => `
447
- \tpublic(friend) fun set_${key}(_obelisk_world: &mut World, ${key}: ${type}) {
448
- \t\tlet _obelisk_schema = world::get_mut_schema<${structName}>(_obelisk_world, SCHEMA_ID);
448
+ \tpublic(package) fun set_${key}(_obelisk_world: &mut World, ${key}: ${type}) {
449
+ \t\tlet _obelisk_schema = schema::get_mut<${structName}, AppKey>(app_key::new(),_obelisk_world, SCHEMA_ID);
449
450
  \t\t_obelisk_schema.${key} = ${key};
450
451
  \t\tevents::emit_set(SCHEMA_ID, SCHEMA_TYPE, none(), *_obelisk_schema)
451
452
  \t}`
@@ -458,7 +459,7 @@ export function renderSingleGetAllFunc(
458
459
  values: MoveType | Record<string, MoveType>
459
460
  ): string {
460
461
  return `\tpublic fun get(_obelisk_world: &World): ${getStructTypes(values)} {
461
- \t\tlet _obelisk_schema = world::get_schema<${structName}>(_obelisk_world, SCHEMA_ID);
462
+ \t\tlet _obelisk_schema = schema::get<${structName}>(_obelisk_world, SCHEMA_ID);
462
463
  \t\t(
463
464
  ${
464
465
  typeof values === "string"
@@ -482,7 +483,7 @@ export function renderSingleGetAttrsFunc(
482
483
  .map(
483
484
  ([key, type]) => `
484
485
  \tpublic fun get_${key}(_obelisk_world: &World): ${type} {
485
- \t\tlet _obelisk_schema = world::get_schema<${structName}>(_obelisk_world, SCHEMA_ID);
486
+ \t\tlet _obelisk_schema = schema::get<${structName}>(_obelisk_world, SCHEMA_ID);
486
487
  \t\t_obelisk_schema.${key}
487
488
  \t}`
488
489
  )
@@ -0,0 +1,24 @@
1
+ import { ObeliskConfig } from "../../types";
2
+ import { formatAndWriteMove } from "../formatAndWrite";
3
+ import {
4
+ getRegisterSchema,
5
+ getUseSchema,
6
+ capitalizeFirstLetter,
7
+ } from "./common";
8
+
9
+ export function generateAppKey(config: ObeliskConfig, srcPrefix: string) {
10
+ let code = `module ${config.name}::app_key {
11
+ /// Authorization token for the app.
12
+ public struct AppKey has drop {}
13
+
14
+ public(package) fun new(): AppKey {
15
+ AppKey { }
16
+ }
17
+ }
18
+ `;
19
+ formatAndWriteMove(
20
+ code,
21
+ `${srcPrefix}/contracts/${config.name}/sources/codegen/app_key.move`,
22
+ "formatAndWriteMove"
23
+ );
24
+ }
@@ -5,8 +5,7 @@ export function generateEntityKey(config: ObeliskConfig, srcPrefix: string) {
5
5
  let code = `module ${config.name}::entity_key {
6
6
  use sui::hash::keccak256;
7
7
  use sui::address;
8
- use sui::object;
9
- use std::vector;
8
+ use sui::bcs;
10
9
 
11
10
  public fun from_object<T: key + store>(object: &T): address {
12
11
  object::id_address(object)
@@ -20,28 +19,28 @@ export function generateEntityKey(config: ObeliskConfig, srcPrefix: string) {
20
19
  address::from_u256(x)
21
20
  }
22
21
 
23
- public fun from_address_with_seed(addr: address, seed: vector<u8>): address {
24
- let data = address::to_bytes(addr);
22
+ public fun from_address_with_seed(addr: address, seed: vector<u8>): address {
23
+ let mut data = address::to_bytes(addr);
25
24
  vector::append(&mut data, seed);
26
25
  from_bytes(data)
27
26
  }
28
27
 
29
28
  public fun from_address_with_u256(addr: address, x: u256): address {
30
- let data = address::to_bytes(addr);
29
+ let mut data = address::to_bytes(addr);
31
30
  vector::append(&mut data, bcs::to_bytes<u256>(&x));
32
31
  from_bytes(data)
33
32
  }
34
33
 
35
34
  public fun from_object_with_seed<T: key + store>(object: &T, seed: vector<u8>): address {
36
- let data = address::to_bytes(object::id_address(object));
37
- vector::append(&mut data, seed);
38
- from_bytes(data)
35
+ let mut data = address::to_bytes(object::id_address(object));
36
+ vector::append(&mut data, seed);
37
+ from_bytes(data)
39
38
  }
40
39
 
41
40
  public fun from_object_with_u256<T: key + store>(object: &T, x: u256): address {
42
- let data = address::to_bytes(object::id_address(object));
43
- vector::append(&mut data, bcs::to_bytes<u256>(&x));
44
- from_bytes(data)
41
+ let mut data = address::to_bytes(object::id_address(object));
42
+ vector::append(&mut data, bcs::to_bytes<u256>(&x));
43
+ from_bytes(data)
45
44
  }
46
45
  }
47
46
  `;
@@ -7,17 +7,22 @@ import {
7
7
  } from "./common";
8
8
 
9
9
  export function generateInit(config: ObeliskConfig, srcPrefix: string) {
10
- let code = `module ${config.name}::init {
10
+ let code = `#[allow(lint(share_owned))]
11
+
12
+ module ${config.name}::init {
11
13
  use std::ascii::string;
12
- use sui::transfer;
13
- use sui::tx_context::{Self, TxContext};
14
- use ${config.name}::world;
14
+ use ${config.name}::app_key::AppKey;
15
+ use obelisk::access_control;
16
+ use obelisk::world;
15
17
  ${getUseSchema(config.name, config.schemas).join("\n")}
16
18
 
17
19
  fun init(ctx: &mut TxContext) {
18
- let (_obelisk_world, admin_cap) = world::create(string(b"${capitalizeFirstLetter(
20
+ let (mut _obelisk_world, admin_cap) = world::create(string(b"${capitalizeFirstLetter(
19
21
  config.name
20
22
  )}"), string(b"${capitalizeFirstLetter(config.description)}"),ctx);
23
+
24
+ // Authorize this application to access protected features of the World.
25
+ access_control::authorize_app<AppKey>(&admin_cap, &mut _obelisk_world);
21
26
 
22
27
  // Add Schema
23
28
  ${getRegisterSchema(config.schemas).join("\n")}
@@ -7,7 +7,6 @@ import {
7
7
  } from "../../types";
8
8
  import { formatAndWriteMove } from "../formatAndWrite";
9
9
  import {
10
- getFriendSystem,
11
10
  renderKeyName,
12
11
  renderSetFunc,
13
12
  renderContainFunc,
@@ -124,8 +123,8 @@ export function generateSchema(config: ObeliskConfig, srcPrefix: string) {
124
123
 
125
124
  function renderEphemeralSchema(option: RenderSchemaOptions): string {
126
125
  return `module ${option.projectName}::${option.schemaName}_schema {
127
- use std::option::none;
128
- use ${option.projectName}::events;
126
+ use std::option::none;
127
+ use obelisk::events;
129
128
 
130
129
  const SCHEMA_ID: vector<u8> = b"${option.schemaName}";
131
130
  const SCHEMA_TYPE: u8 = 2;
@@ -149,11 +148,11 @@ function renderSingleSchema(option: RenderSchemaOptions): string {
149
148
  ${
150
149
  option.needImportString ? "\tuse std::ascii::{String,string};\n\t" : "\t"
151
150
  }use std::option::none;
152
- use sui::tx_context::TxContext;
153
- use ${option.projectName}::events;
154
- use ${option.projectName}::world::{Self, World, AdminCap};
155
- // Systems
156
- ${getFriendSystem(option.projectName, option.systems)}
151
+ use ${option.projectName}::app_key;
152
+ use ${option.projectName}::app_key::AppKey;
153
+ use obelisk::schema;
154
+ use obelisk::events;
155
+ use obelisk::world::{World, AdminCap};
157
156
 
158
157
  \tconst SCHEMA_ID: vector<u8> = b"${option.schemaName}";
159
158
  \tconst SCHEMA_TYPE: u8 = 1;
@@ -185,13 +184,12 @@ function renderSchema(option: RenderSchemaOptions) {
185
184
  ${
186
185
  option.needImportString ? "\tuse std::ascii::String;\n\t" : "\t"
187
186
  }use std::option::some;
188
- use sui::tx_context::TxContext;
187
+ use ${option.projectName}::app_key;
188
+ use ${option.projectName}::app_key::AppKey;
189
189
  use sui::table::{Self, Table};
190
- use ${option.projectName}::events;
191
- use ${option.projectName}::world::{Self, World, AdminCap};
192
-
193
- // Systems
194
- ${getFriendSystem(option.projectName, option.systems)}
190
+ use obelisk::schema;
191
+ use obelisk::events;
192
+ use obelisk::world::{World, AdminCap};
195
193
 
196
194
  \t/// Entity does not exist
197
195
  \tconst EEntityDoesNotExist: u64 = 0;
@@ -2,21 +2,20 @@ import { ObeliskConfig } from "../../types";
2
2
  import { formatAndWriteMove } from "../formatAndWrite";
3
3
  import { existsSync } from "fs";
4
4
 
5
- export function generateScript(config: ObeliskConfig, srcPrefix: string) {
5
+ export function generateDeployHook(config: ObeliskConfig, srcPrefix: string) {
6
6
  if (
7
7
  !existsSync(
8
8
  `${srcPrefix}/contracts/${config.name}/sources/script/deploy_hook.move`
9
9
  )
10
10
  ) {
11
11
  let code = `module ${config.name}::deploy_hook {
12
- use ${config.name}::world::{World, AdminCap, get_admin};
13
- use sui::object;
12
+ use obelisk::world::{World, AdminCap};
14
13
 
15
14
  /// Not the right admin for this world
16
15
  const ENotAdmin: u64 = 0;
17
16
 
18
17
  public entry fun run(world: &mut World, admin_cap: &AdminCap) {
19
- assert!( get_admin(world) == object::id(admin_cap), ENotAdmin);
18
+ assert!(world.admin() == object::id(admin_cap), ENotAdmin);
20
19
 
21
20
  // Logic that needs to be automated once the contract is deployed
22
21
 
@@ -35,3 +34,38 @@ export function generateScript(config: ObeliskConfig, srcPrefix: string) {
35
34
  );
36
35
  }
37
36
  }
37
+
38
+ export function generateMigrate(config: ObeliskConfig, srcPrefix: string) {
39
+ if (
40
+ !existsSync(
41
+ `${srcPrefix}/contracts/${config.name}/sources/script/migrate.move`
42
+ )
43
+ ) {
44
+ let code = `module ${config.name}::migrate {
45
+ use obelisk::world::{World, AdminCap};
46
+
47
+ /// Not the right admin for this world
48
+ const ENotAdmin: u64 = 0;
49
+ const EWrongVersion: u64 = 1;
50
+ const ENotUpgrade: u64 = 2;
51
+ const VERSION: u64 = 1;
52
+
53
+ public entry fun run(world: &mut World, admin_cap: &AdminCap) {
54
+ assert!(world.admin() == object::id(admin_cap), ENotAdmin);
55
+ assert!(world.version() < VERSION, ENotUpgrade);
56
+ *obelisk::world::mut_version(world, admin_cap) = VERSION;
57
+ }
58
+
59
+ public fun assert_version(world: &World){
60
+ assert!(world.version() == VERSION, EWrongVersion);
61
+ }
62
+ }
63
+ `;
64
+ formatAndWriteMove(
65
+ code,
66
+ `${srcPrefix}/contracts/${config.name}/sources/script/migrate.move`,
67
+ "formatAndWriteMove"
68
+ );
69
+ }
70
+ }
71
+
@@ -5,12 +5,16 @@ export function generateToml(config: ObeliskConfig, srcPrefix: string) {
5
5
  let code = `[package]
6
6
  name = "${config.name}"
7
7
  version = "0.0.1"
8
+ edition = "2024.beta"
8
9
 
9
10
  [dependencies]
10
- Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "testnet-v1.23.0" }
11
+ Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "mainnet-v1.31.1" }
12
+ # Obelisk = { git = "https://github.com/0xobelisk/obelisk-engine.git", subdir = "packages/obelisk-framework", rev = "mainnet-v1.31.1" }
13
+ Obelisk = { local = "/Volumes/project/obelisk-engine/packages/obelisk-framework" }
11
14
 
12
15
  [addresses]
13
16
  sui = "0x2"
17
+ obelisk = "0x6c93abd6e076235f51c6dd95b4adf9b0d4f5b6f6766c6a7b6653101a78a04d8c"
14
18
  ${config.name} = "0x0"
15
19
  `;
16
20
  formatAndWriteMove(
@@ -7,7 +7,8 @@ import { generateEntityKey } from "./generateEntityKey";
7
7
  import { generateInit } from "./generateInit";
8
8
  import { generateEps } from "./generateEps";
9
9
  import { generateSchema } from "./generateSchema";
10
- import {generateScript} from "./generateScript";
10
+ import {generateDeployHook, generateMigrate} from "./generateScript";
11
+ import {generateAppKey} from "./generateAppKey";
11
12
 
12
13
  export function worldgen(config: ObeliskConfig, srcPrefix?: string) {
13
14
  let path = "";
@@ -25,10 +26,11 @@ export function worldgen(config: ObeliskConfig, srcPrefix?: string) {
25
26
  }
26
27
 
27
28
  generateSystem(config, path);
28
- generateScript(config, path);
29
+ generateDeployHook(config, path);
30
+ generateMigrate(config, path);
29
31
 
30
32
  // generate codegen
31
33
  generateSchema(config, path);
32
- generateEps(config.name, path);
33
34
  generateInit(config, path);
35
+ generateAppKey(config, path);
34
36
  }