"use strict"; const { message, onMessage } = props; return <iframe style={{ display: "none" }} srcDoc={'<html><body><script>"use strict";(()=>{function h(t){return e=>e.split(`\n`).map(n=>n.length?" ".repeat(t)+n:"").join(`\n`)}function g(t){if(t.length===0)return"()";if(t.length===1)return t[0];{let e=t[0],n=t.slice(1);return`(${e}, ${g(n)})`}}var m=class{constructor(e){this.config=e}generate(e){let n=[{path:["near_sdk_contract_tools","ft","*"]},{path:["near_sdk","env"]}],l="decimals"in this.config?+this.config.decimals:24,o=Math.max(0,Math.min(38,l)),a=[`\nNep148Controller::set_metadata(\n &mut contract,\n &FungibleTokenMetadata::new("${this.config.name}".to_string(), "${this.config.symbol}".to_string(), ${o}),\n);\n`.trim()];if((this.config.preMint&&+this.config.preMint>0?(this.config.preMint+"").trim():void 0)!==void 0){let c;this.config.preMintReceiver?c=`"${this.config.preMintReceiver}".parse().unwrap()`:c="env::predecessor_account_id()",a.push(`\nNep141Controller::mint(\n &mut contract,\n &Nep141Mint {\n amount: ${this.config.preMint}u128,\n receiver_id: &${c},\n memo: None,\n },\n)\n.unwrap_or_else(|e| env::panic_str(&e.to_string()));\n`.trim())}let i=[];if(this.config.mintable){n.push({path:["near_sdk","AccountId"]}),n.push({path:["near_sdk","env"]}),n.push({path:["near_sdk","json_types","U128"]});let c=`\npub fn mint(&mut self, account_id: AccountId, amount: U128) {\n Nep141Controller::mint(\n self,\n &Nep141Mint {\n amount: amount.into(),\n receiver_id: &account_id,\n memo: None,\n },\n )\n .unwrap_or_else(|e| env::panic_str(&e.to_string()));\n}\n`.trim();i.push(c)}if(this.config.burnable){n.push({path:["near_sdk","env"]}),n.push({path:["near_sdk","json_types","U128"]});let c=`\npub fn burn(&mut self, amount: U128) {\n Nep141Controller::burn(\n self,\n &Nep141Burn {\n amount: amount.into(),\n owner_id: &env::predecessor_account_id(),\n memo: None,\n },\n )\n .unwrap_or_else(|e| env::panic_str(&e.to_string()));\n}\n`.trim();i.push(c)}let s=i.join(`\n\n`)||void 0,r=[];e.all.length!==0&&r.push(`all_hooks = "${g(e.all)}"`),e.authorized.length!==0&&r.push(`mint_hook = "${g(e.authorized)}"`);let p=r.length>0?`#[fungible_token(${r.join(", ")})]`:void 0;return{imports:n,deriveMacroName:"FungibleToken",deriveMacroAttribute:p,constructorCode:a.join(`\n\n`),bindgenCode:s}}},f=class{constructor(e){this.config=e}generate(e){let n=[{path:["near_sdk_contract_tools","nft","*"]}],l=`\ncontract.set_contract_metadata(ContractMetadata::new(\n "${this.config.name}".to_string(),\n "${this.config.symbol}".to_string(),\n ${this.config.baseUri?`Some("${this.config.baseUri}".to_string())`:"None"},\n));\n `.trim(),o,a=[];if(this.config.mintable){n.push({path:["near_sdk","AccountId"]}),n.push({path:["near_sdk","env"]});let r=`\npub fn mint(&mut self, token_id: TokenId, account_id: AccountId, metadata: TokenMetadata) {\n Nep177Controller::mint_with_metadata(self, token_id, account_id, metadata)\n .unwrap_or_else(|e| env::panic_str(&e.to_string()));\n}\n `.trim();a.push(r)}if(this.config.burnable){n.push({path:["near_sdk","env"]});let r=`\npub fn burn(&mut self, token_id: TokenId) {\n Nep177Controller::burn_with_metadata(self, token_id, &env::predecessor_account_id())\n .unwrap_or_else(|e| env::panic_str(&e.to_string()));\n}\n `.trim();a.push(r)}let d=a.join(`\n\n`)||void 0,i=[];e.all.length!==0&&i.push(`all_hooks = "${g(e.all)}"`),e.authorized.length!==0&&i.push(`mint_hook = "${g(e.authorized)}"`);let s=i.length>0?`#[non_fungible_token(${i.join(", ")})]`:void 0;return{imports:n,deriveMacroName:"NonFungibleToken",deriveMacroAttribute:s,constructorCode:l,bindgenCode:d,otherCode:o}}},_=class{constructor(e){this.config=e}generate(){let e=[{path:["near_sdk","borsh","self"]},{path:["near_sdk","borsh","BorshSerialize"]},{path:["near_sdk","BorshStorageKey"]},{path:["near_sdk_contract_tools","Rbac"]},{path:["near_sdk_contract_tools","rbac","*"]},{path:["near_sdk_contract_tools","hook","Hook"]}],n;return this.config.accountId?n=`"${this.config.accountId}".parse().unwrap()`:(e.push({path:["near_sdk","env"]}),n="env::predecessor_account_id()"),{imports:e,deriveMacroName:"Rbac",deriveMacroAttribute:\'#[rbac(roles = "Role")]\',hooks:{all:[],authorized:["OnlyAdmin"]},constructorCode:`contract.add_role(${n}, &Role::Admin);`,otherCode:`\n#[derive(BorshSerialize, BorshStorageKey)]\npub enum Role {\n Admin,\n}\n\npub struct OnlyAdmin;\n\nimpl<A> Hook<Contract, A> for OnlyAdmin {\n fn hook<R>(contract: &mut Contract, _args: &A, f: impl FnOnce(&mut Contract) -> R) -> R {\n <Contract as Rbac>::require_role(&Role::Admin);\n f(contract)\n }\n}\n`.trim()}}},b=class{constructor(e){this.config=e}generate(){let e=[{path:["near_sdk_contract_tools","Owner"]},{path:["near_sdk_contract_tools","owner","*"]},{path:["near_sdk_contract_tools","owner","hooks","OnlyOwner"]}];this.config.accountId||e.push({path:["near_sdk","env"]});let l=`Owner::init(&mut contract, &${this.config.accountId?`"${this.config.accountId}".parse().unwrap()`:"env::predecessor_account_id()"});`;return{imports:e,deriveMacroName:"Owner",constructorCode:l,hooks:{all:[],authorized:["OnlyOwner"]}}}},k=class{constructor(e){}generate(){return{imports:[{path:["near_sdk_contract_tools","Pause"]},{path:["near_sdk_contract_tools","pause","*"]},{path:["near_sdk_contract_tools","pause","hooks","PausableHook"]}],deriveMacroName:"Pause",hooks:{all:["PausableHook"],authorized:[]}}}};function v(t){return t&&typeof t=="object"&&typeof t.token=="object"&&typeof t.token.which=="string"}function M(t){let e=t.token.which==="ft"?new m(t.token.config):new f(t.token.config),n=Object.entries(t.plugins).map(([l,o])=>{switch(l){case"owner":return new b(o);case"pause":return new k(o);case"rbac":return new _(o);default:throw new Error(`Unknown plugin: "${l}"`)}});return{token:e,plugins:n}}function $(t){let e={part:"",children:{}};function n(o,a){if(a.length==0)return;let[d,...i]=a;o.children[d]==null&&(o.children[d]={part:d,children:{}}),n(o.children[d],i)}for(let o of t)n(e,o.path);function l(o,a=80){let d=Object.values(o.children),i=`${o.part}::`;if(d.length===1)return`${i}${l(d[0],a-i.length)}`;if(d.length>1){let s=d.map(c=>l(c,a-i.length));s.sort();let r=[s.shift()];for(;s.length>0;){let c=s.shift();if(c.includes(`\n`)){r.push(h(1)(c));continue}let u=r[r.length-1]+", "+c;u.length>a?r.push(h(1)(c)):r[r.length-1]=u}if(r.length===1){let c=r[0],u=`${i}{${c}}`;return u.length<=a?u:`${i}{\n${h(1)(c)}\n}`}r[0]=h(1)(r[0]);let p=r.join(`,\n`);return`${i}{\n${p},\n}`}else return o.part}return Object.values(e.children).map(o=>`use ${l(o,75)};`).join(`\n`)}function C(t){let e;v(t)?e=M(t):e=t;let n=[{path:["near_sdk","near_bindgen"]},{path:["near_sdk","PanicOnDefault"]},{path:["near_sdk","borsh","self"]},{path:["near_sdk","borsh","BorshSerialize"]},{path:["near_sdk","borsh","BorshDeserialize"]}],l={all:[],authorized:[]},o=["BorshSerialize","BorshDeserialize","PanicOnDefault"],a=[],d=[],i=[];Object.values(e.plugins).forEach(c=>{let u=c.generate();n.push(...u.imports),l.all.push(...u.hooks.all),l.authorized.push(...u.hooks.authorized),u.constructorCode&&d.push(u.constructorCode),u.deriveMacroName&&o.push(u.deriveMacroName),u.deriveMacroAttribute&&a.push(u.deriveMacroAttribute),u.otherCode&&i.push(u.otherCode)});let s=e.token.generate(l);n.push(...s.imports),s.deriveMacroName&&o.push(s.deriveMacroName),s.deriveMacroAttribute&&a.push(s.deriveMacroAttribute),s.constructorCode&&d.push(s.constructorCode),s.otherCode&&i.push(s.otherCode),a.push("#[near_bindgen]");let r=`\nSelf {}`;d.length>0&&(r=`\nlet mut contract = Self {};\n\n${d.join(`\n`)}\n\ncontract`);let p="";return s.bindgenCode&&(p=`\n\n${s.bindgenCode}`),`\n${$(n)}\n\n#[derive(${o.join(", ")})]\n${a.join(`\n`)}\npub struct Contract {}\n\n#[near_bindgen]\nimpl Contract {\n #[init]\n pub fn new() -> Self {${h(2)(r)}\n }${h(1)(p)}\n}\n\n${i.join(`\n\n`)}\n`.trim()+`\n`}window.addEventListener("message",t=>{window.top.postMessage(C(t.data),"*")});})();\n<\/script></body></html>'} message={message} onMessage={onMessage} />;