@0xobelisk/sui-common 1.1.5 → 1.1.7

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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/codegen/utils/format.ts","../src/codegen/utils/formatAndWrite.ts","../src/debug.ts","../src/codegen/debug.ts","../src/codegen/utils/posixPath.ts","../src/codegen/utils/renderMove/schemaGen.ts","../src/codegen/utils/renderMove/common.ts","../src/codegen/utils/renderMove/generateToml.ts","../src/codegen/utils/renderMove/generateSchema.ts","../src/codegen/utils/renderMove/generateScript.ts","../src/codegen/utils/renderMove/generateEvent.ts","../src/codegen/utils/renderMove/generateSystem.ts","../src/codegen/utils/renderMove/generateError.ts","../src/codegen/utils/renderMove/generateDefaultSchema.ts","../src/codegen/utils/renderMove/generateInit.ts","../src/codegen/utils/config.ts","../src/codegen/utils/errors.ts","../src/parseData/parser/index.ts"],"sourcesContent":["import prettier from 'prettier';\nimport prettierPluginMove from 'prettier-plugin-move-js';\n\nexport async function formatMove(\n\tcontent: string,\n\tprettierConfigPath?: string\n): Promise<string> {\n\tlet config;\n\tif (prettierConfigPath) {\n\t\tconfig = await prettier.resolveConfig(prettierConfigPath);\n\t}\n\ttry {\n\t\treturn prettier.format(content, {\n\t\t\tplugins: [prettierPluginMove],\n\t\t\tparser: 'move-parse',\n\t\t\tprintWidth: 120,\n\t\t\tsemi: true,\n\t\t\ttabWidth: 2,\n\t\t\tuseTabs: false,\n\t\t\tbracketSpacing: true,\n\t\t\t...config,\n\t\t});\n\t} catch (error) {\n\t\tlet message;\n\t\tif (error instanceof Error) {\n\t\t\tmessage = error.message;\n\t\t} else {\n\t\t\tmessage = error;\n\t\t}\n\t\tconsole.log(`Error during output formatting: ${message}`);\n\t\treturn content;\n\t}\n}\n\nexport async function formatTypescript(content: string): Promise<string> {\n\treturn prettier.format(content, {\n\t\tparser: 'typescript',\n\t});\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { formatMove, formatTypescript } from \"./format\";\nimport { debug } from \"../debug\";\n\nexport async function formatAndWriteMove(\n output: string,\n fullOutputPath: string,\n logPrefix?: string\n): Promise<void> {\n const formattedOutput = await formatMove(output);\n let schemaPrefix =\n` // Copyright (c) Obelisk Labs, Inc.\n // SPDX-License-Identifier: Apache-2.0\n #[allow(unused_use)]\n \n /* Autogenerated file. Do not edit manually. */\n \n `\n\n let initPrefix = `#[test_only]`\n\n let code = schemaPrefix + formattedOutput\n\n let deployHookPrefix = `#[allow(lint(share_owned))]`\n\n if (fullOutputPath.includes(\".toml\") || fullOutputPath.includes(\"system\") || fullOutputPath.includes(\"migrate\")) {\n code = formattedOutput\n } else if (fullOutputPath.includes(\"init\")) {\n code = initPrefix + formattedOutput\n } else if (fullOutputPath.includes(\"genesis\")) {\n code = deployHookPrefix + formattedOutput\n }\n\n await fs.mkdir(path.dirname(fullOutputPath), { recursive: true });\n await fs.writeFile(fullOutputPath, code);\n debug(`${logPrefix}: ${fullOutputPath}`);\n}\n\n/**\n * Formats typescript code using prettier and write it to a file\n * @param output typescript code\n * @param fullOutputPath full path to the output file\n * @param logPrefix prefix for debug logs\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 await fs.mkdir(path.dirname(fullOutputPath), { recursive: true });\n\n await fs.writeFile(fullOutputPath, formattedOutput);\n debug(`${logPrefix}: ${fullOutputPath}`);\n}\n","import createDebug from \"debug\";\n\nexport const debug = createDebug(\"dubhe:common\");\nexport const error = createDebug(\"dubhe:common\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"codegen\");\nexport const error = parentDebug.extend(\"codegen\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\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 { SchemaType, DubheConfig } from '../../types';\nimport { rmdirSync, existsSync } from 'fs';\nimport { deleteFolderRecursive } from './common';\nimport { generateToml } from './generateToml';\nimport { generateSchemaData, generateSchemaStructure } from './generateSchema';\nimport { generateDeployHook, generateMigrate } from './generateScript';\nimport { generateDappKey } from './generateDappKey';\nimport { generateSchemaEvent } from './generateEvent';\nimport { generateSystem } from './generateSystem';\nimport { generateSchemaHub } from './generateSchemaHub';\nimport { generateSchemaError } from './generateError';\nimport {generateDefaultSchema} from \"./generateDefaultSchema\";\nimport {generateInit} from \"./generateInit\";\n\nexport async function schemaGen(\n config: DubheConfig,\n srcPrefix?: string,\n network?: 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n) {\n console.log('\\nšŸš€ Starting Schema Generation Process...');\n console.log('šŸ“‹ Project Configuration:');\n console.log(` ā”œā”€ Name: ${config.name}`);\n console.log(\n ` ā”œā”€ Description: ${config.description || 'No description provided'}`,\n );\n console.log(` ā”œā”€ Network: ${network || 'testnet'}`);\n\n const path = srcPrefix ?? process.cwd();\n\n if (existsSync(`${path}/contracts/${config.name}`)) {\n deleteFolderRecursive(\n `${path}/contracts/${config.name}/sources/codegen`,\n );\n }\n\n if (!existsSync(`${path}/contracts/${config.name}/Move.toml`)) {\n await generateToml(config, path);\n }\n\n if (\n !existsSync(\n `${path}/contracts/${config.name}/sources/script/deploy_hook.move`,\n )\n ) {\n await generateDeployHook(config, path);\n }\n\n if (config.events) {\n if (config.data) {\n await generateSchemaEvent(config.name, config.data, config.events, path);\n } else {\n await generateSchemaEvent(config.name, null, config.events, path);\n }\n }\n\n if (config.data) {\n await generateSchemaData(config.name, config.data, path);\n await generateSchemaStructure(config.name, config.data, config.schemas, path);\n } else {\n await generateSchemaStructure(config.name, null, config.schemas, path);\n }\n\n if (config.errors) {\n await generateSchemaError(config.name, config.errors, path);\n }\n\n await generateDefaultSchema(config, path);\n await generateInit(config, path);\n await generateSystem(config, path);\n await generateMigrate(config, path);\n\n console.log('āœ… Schema Generation Process Complete!\\n');\n}\n","import { MoveType } from '../../types';\nimport fs from 'fs';\n\nexport function deleteFolderRecursive(path: string) {\n\tif (fs.existsSync(path)) {\n\t\tfs.readdirSync(path).forEach(file => {\n\t\t\tconst curPath = `${path}/${file}`;\n\t\t\tif (fs.lstatSync(curPath).isDirectory()) {\n\t\t\t\tdeleteFolderRecursive(curPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(curPath);\n\t\t\t}\n\t\t});\n\t\tfs.rmdirSync(path);\n\t}\n}\n\nexport function capitalizeFirstLetter(input: string): string {\n\treturn input.charAt(0).toUpperCase() + input.slice(1);\n}\n\n/**\n *\n * @param values\n * @param prefixArgs\n * @return [ name, age, birth_time ]\n */\nexport function getStructAttrs(\n\tvalues: Record<string, string> | string\n): string {\n\treturn Object.entries(values)\n\t\t.map(([key, _]) => `${key}`)\n\t\t.join(',');\n}\n\nfunction isAddress(str: string): boolean {\n\tconst regex = /^0x[a-fA-F0-9]+$/;\n\treturn regex.test(str);\n}\n\n/**\n *\n * @param values\n * @return ( bool , u64 , u64)\n */\n// export function getStructTypes(values: SchemaType): string {\nexport function getStructTypes(\n\tvalues: Record<string, string>\n): string {\n\treturn `(${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\tvalues: Record<string, string>\n): string[] {\n\treturn Object.entries(values).map(([key, type]) => `${key}: ${type}`);\n}\n\n/**\n * @param values\n * @return [ data.name, data.age ]\n */\nexport function getStructAttrsQuery(\n\tvalues: Record<string, string>,\n): string[] {\n\treturn Object.entries(values).map(([key, _]) => `self.${key}`);\n}\n\nexport function containsString(obj: Record<string, any>, searchString: string): boolean {\n\tfor (const key in obj) {\n\t\tif (obj.hasOwnProperty(key)) {\n\t\t\tconst value = obj[key];\n\t\t\tif (typeof value === 'string' && value === searchString) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\n\nexport async function generateToml(\n\tconfig: DubheConfig,\n\tsrcPrefix: string,\n) {\n\tconsole.log('\\nšŸ“„ Starting Move.toml Generation...');\n\tconsole.log(\n\t\t` └─ Output path: ${srcPrefix}/contracts/${config.name}/Move.toml`\n\t);\n\n\tlet code = `[package]\nname = \"${config.name}\"\nversion = \"1.0.0\"\nedition = \"2024\"\n\n[dependencies]\nSui = { git = \"https://github.com/MystenLabs/sui.git\", subdir = \"crates/sui-framework/packages/sui-framework\", rev = \"mainnet-v1.38.3\" }\nDubhe = { git = \"https://github.com/0xobelisk/dubhe-framework.git\", rev = \"dubhe-mainnet-v1.1.0\" }\n\n[addresses]\nsui = \"0x2\"\n${config.name} = \"0x0\"\n`;\n\tawait formatAndWriteMove(\n\t\tcode,\n\t\t`${srcPrefix}/contracts/${config.name}/Move.toml`,\n\t\t'formatAndWriteMove'\n\t);\n\tconsole.log('āœ… Move.toml Generation Complete\\n');\n}\n","import {BaseType, SchemaData, SchemaType} from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport {\n\tgetStructAttrsWithType,\n\tgetStructAttrs,\n\tgetStructTypes,\n\tgetStructAttrsQuery, containsString,\n} from './common';\n\nfunction sortByFirstLetter(arr: string[]): string[] {\n\treturn arr.sort((a, b) => {\n\t\tconst firstLetterA = a.charAt(0).toLowerCase();\n\t\tconst firstLetterB = b.charAt(0).toLowerCase();\n\n\t\tif (firstLetterA < firstLetterB) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (firstLetterA > firstLetterB) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n}\n\nexport function capitalizeAndRemoveUnderscores(input: string): string {\n\treturn input\n\t\t.split('_')\n\t\t.map((word, index) => {\n\t\t\treturn index === 0\n\t\t\t\t? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n\t\t\t\t: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n\t\t})\n\t\t.join('');\n}\n\nexport function renderSetAttrsFunc(\n\tschemaName: string,\n\tfields: BaseType | Record<string, BaseType>,\n): string {\n\treturn Object.entries(fields)\n\t\t.map(\n\t\t\t([key, type]) =>\n\t\t\t\t`public(package) fun set_${key}(self: &mut ${schemaName}, ${key}: ${type}) {\n self.${key} = ${key};\n }`,\n\t\t)\n\t\t.join('\\n');\n}\n\nexport function renderSetFunc(\n\tschemaName: string,\n\tfields: Record<string, string>,\n): string {\n\treturn `public(package) fun set(self: &mut ${schemaName}, ${getStructAttrsWithType(\n\t\tfields,\n\t)}) {\n ${Object.entries(fields)\n\t\t.map(([fieldName]) => `self.${fieldName} = ${fieldName};`)\n\t\t.join('\\n')}\n }`;\n}\n\nexport function renderGetAllFunc(\n\tschemaName: string,\n\tfields: Record<string, string>,\n): string {\n\treturn `public fun get(self: &${schemaName}): ${getStructTypes(fields)} {\n (${getStructAttrsQuery(fields)})\n }`;\n}\n\nexport function renderGetAttrsFunc(\n\tschemaName: string,\n\tfields: BaseType | Record<string, BaseType>,\n): string {\n\treturn Object.entries(fields)\n\t\t.map(\n\t\t\t([\n\t\t\t\t key,\n\t\t\t\t type,\n\t\t\t ]) => `public fun get_${key}(self: &${schemaName}): ${type} {\n self.${key}\n }`,\n\t\t)\n\t\t.join('\\n');\n}\n\nfunction convertToSnakeCase(input: string): string {\n\treturn input\n\t\t.replace(/([A-Z])/g, '_$1')\n\t\t.toLowerCase()\n\t\t.replace(/^_/, '');\n}\n\nexport async function generateSchemaData(\n\tprojectName: string,\n\tdata: Record<string, SchemaData>,\n\tpath: string,\n) {\n\tconsole.log('\\nšŸ“¦ Starting Schema Data Generation...');\n\tfor (const key of Object.keys(data)) {\n\t\t\t\tconst name = key;\n\t\t\t\tconst fields = data[key];\n\t\t\t\tconsole.log(\n\t\t\t\t\t` └─ Generating ${name} ${\n\t\t\t\t\t\tArray.isArray(fields) ? '(enum)' : '(struct)'\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t\tlet code = '';\n\n\t\t\t\tconst enumNames = Object.keys(data)\n\t\t\t\t\t.filter(item => Array.isArray(data[item]))\n\t\t\t\t\t.map(item => item);\n\n\t\t\tconsole.log(enumNames)\n\n\t\t\t\tif (Array.isArray(fields)) {\n\t\t\t\t\tconst sortByFirstLetterFields = sortByFirstLetter(fields);\n\t\t\t\t\tcode = `module ${projectName}::${projectName}_${convertToSnakeCase(\n\t\t\t\t\t\tname,\n\t\t\t\t\t)} {\n public enum ${name} has copy, drop , store {\n ${sortByFirstLetterFields}\n }\n \n ${sortByFirstLetterFields\n\t\t\t\t\t\t.map((field: string) => {\n\t\t\t\t\t\t\treturn `public fun new_${convertToSnakeCase(\n\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t)}(): ${name} {\n ${name}::${field}\n }`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join('')}`;\n\t\t\t\t} else {\n\t\t\t\t\tcode = `module ${projectName}::${projectName}_${convertToSnakeCase(\n\t\t\t\t\t\tname,\n\t\t\t\t\t)} {\n use std::ascii::String;\n \n\t\t\t\t\t\t${\n\t\t\t\t\t\tObject.keys(data)\n\t\t\t\t\t\t\t.map(name => {\n\t\t\t\t\t\t\t\tif (containsString(fields, name)) {\n\t\t\t\t\t\t\t\t\treturn `use ${projectName}::${projectName}_${convertToSnakeCase(name)}::${name};`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join('\\n')\n\t\t\t\t\t}\n\n public struct ${name} has copy, drop , store {\n ${getStructAttrsWithType(fields)}\n }\n \n public fun new(${getStructAttrsWithType(\n\t\t\t\t\t\tfields,\n\t\t\t\t\t)}): ${name} {\n ${name} {\n ${getStructAttrs(fields)}\n }\n }\n \n ${renderGetAllFunc(name, fields)}\n ${renderGetAttrsFunc(name, fields)}\n ${renderSetAttrsFunc(name, fields)}\n ${renderSetFunc(name, fields)}\n }`;\n\t\t\t\t}\n\n\t\t\t\tawait formatAndWriteMove(\n\t\t\t\t\tcode,\n\t\t\t\t\t`${path}/contracts/${projectName}/sources/codegen/data/${convertToSnakeCase(\n\t\t\t\t\t\tname,\n\t\t\t\t\t)}.move`,\n\t\t\t\t\t'formatAndWriteMove',\n\t\t\t\t);\n\t\t\t}\n\tconsole.log('āœ… Schema Data Generation Complete\\n');\n}\n\nfunction generateImport(\n\tprojectName: string,\n\tdata: Record<string, SchemaData> | null,\n) {\n\tif (data != null) {\n\t\tconst names = Object.keys(data);\n\t\treturn names\n\t\t\t.map(name => {\n\t\t\t\treturn `use ${projectName}::${projectName}_${convertToSnakeCase(\n\t\t\t\t\tname,\n\t\t\t\t)}::${name};`;\n\t\t\t})\n\t\t\t.join('\\n');\n\t} else {\n\t\treturn '';\n\t}\n}\n\nexport async function generateSchemaStructure(\n\tprojectName: string,\n\tdata: Record<string, SchemaData> | null,\n\tschemas: Record<string, SchemaType>,\n\tpath: string,\n) {\n\tconsole.log('\\nšŸ”Ø Starting Schema Structure Generation...');\n\t\tconsole.log(\n\t\t\t` ā”œā”€ Output path: ${path}/contracts/${projectName}/sources/codegen/schema.move`,\n\t\t);\n\t\tconsole.log(\n\t\t\t` └─ Structure fields: ${\n\t\t\t\tObject.values(schemas).length\n\t\t\t}`,\n\t\t);\n\t\tconst schemaMoudle = `module ${projectName}::${projectName}_schema {\n use std::ascii::String;\n use std::ascii::string;\n use sui::package::UpgradeCap;\n use std::type_name; \n use dubhe::storage;\n use dubhe::storage_value::{Self, StorageValue};\n use dubhe::storage_map::{Self, StorageMap};\n use dubhe::storage_double_map::{Self, StorageDoubleMap};\n use sui::dynamic_field as df;\n \n ${generateImport(projectName, data)}\n\n public struct Schema has key, store { id: UID } \n \n ${Object.entries(schemas)\n\t\t\t.map(([key, value]) => {\n\t\t\t\treturn `public fun borrow_${key}(self: &Schema) : &${value} {\n storage::borrow_field(&self.id, b\"${key}\")\n }\n \n public(package) fun ${key}(self: &mut Schema): &mut ${value} {\n storage::borrow_mut_field(&mut self.id, b\"${key}\")\n }\n `;\n\t\t\t})\n\t\t\t.join('')} \n \n \n public(package) fun create(ctx: &mut TxContext): Schema {\n let mut id = object::new(ctx);\n ${Object.entries(schemas)\n\t\t\t.map(([key, value]) => {\n\t\t\t\tlet storage_type = '';\n\t\t\t\tif (value.includes('StorageValue')) {\n\t\t\t\t\tstorage_type = `storage_value::new(b\"${key}\", ctx)`;\n\t\t\t\t} else if (value.includes('StorageMap')) {\n\t\t\t\t\tstorage_type = `storage_map::new(b\"${key}\", ctx)`;\n\t\t\t\t} else if (\n\t\t\t\t\tvalue.includes('StorageDoubleMap')\n\t\t\t\t) {\n\t\t\t\t\tstorage_type = `storage_double_map::new(b\"${key}\", ctx)`;\n\t\t\t\t}\n\t\t\t\treturn `storage::add_field<${value}>(&mut id, b\"${key}\", ${storage_type});`;\n\t\t\t})\n\t\t\t.join('\\n')}\n \n Schema { id }\n }\n \n public(package) fun id(self: &mut Schema): &mut UID {\n\t\t\t\t\t &mut self.id\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tpublic(package) fun borrow_id(self: &Schema): &UID {\n\t\t\t\t\t &self.id\n\t\t\t\t\t}\n \n public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) { }\n\n \n // ======================================== View Functions ========================================\n ${Object.entries(schemas)\n\t\t\t.map(([key, value]) => {\n\t\t\t\t// @ts-ignore\n\t\t\t\tlet all_types = value.match(/<(.+)>/)[1].split(',').map(type => type.trim());\n\t\t\t\tlet para_key: string[] = [];\n\t\t\t\tlet para_value = '';\n\t\t\t\tlet borrow_key = '';\n\t\t\t\tif (value.includes('StorageValue')) {\n\t\t\t\t\tpara_key = [];\n\t\t\t\t\tpara_value = `${all_types[0]}`;\n\t\t\t\t\tborrow_key = 'get()';\n\t\t\t\t} else if (value.includes('StorageMap')) {\n\t\t\t\t\tpara_key = [`key: ${all_types[0]}`];\n\t\t\t\t\tpara_value = `${all_types[1]}`;\n\t\t\t\t\tborrow_key = 'get(key)';\n\t\t\t\t} else if (value.includes('StorageDoubleMap')) {\n\t\t\t\t\tpara_key = [`key1: ${all_types[0]}`, `key2: ${all_types[1]}`];\n\t\t\t\t\tpara_value = `${all_types[2]}`;\n\t\t\t\t\tborrow_key = 'get(key1, key2)';\n\t\t\t\t}\n\t\t\t\treturn `public fun get_${key}(self: &Schema, ${para_key}) : &${para_value} {\n\t\t\t\t\t\t\t\t\tself.borrow_${key}().${borrow_key}\n\t\t\t\t\t\t\t\t}`\n\t\t\t}).join('\\n')}\n // =========================================================================================================\n\t\t\t}`\n\t\tawait formatAndWriteMove(\n\t\t\tschemaMoudle,\n\t\t\t`${path}/contracts/${projectName}/sources/codegen/schema.move`,\n\t\t\t'formatAndWriteMove',\n\t\t);\n\t\tconsole.log('āœ… Schema Structure Generation Complete\\n');\n}\n\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport { capitalizeAndRemoveUnderscores } from './generateSchema';\n\nimport { readFileSync } from 'fs';\n\nexport async function generateDeployHook(\n\tconfig: DubheConfig,\n\tsrcPrefix: string\n) {\n\tconsole.log('\\nšŸ“ Starting Deploy Hook Generation...');\n\tconsole.log(\n\t\t` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/scripts/deploy_hook.move`\n\t);\n\n\tconst path = `${srcPrefix}/contracts/${config.name}/sources/scripts/deploy_hook.move`;\n\tif (!existsSync(path)) {\n\t\tconst code = `module ${config.name}::${config.name}_deploy_hook {\n\t\t\t use ${config.name}::${config.name}_schema::Schema;\n\n public(package) fun run(_schema: &mut Schema, _ctx: &mut TxContext) {\n\n }\n}`\n\t\tawait formatAndWriteMove(\n\t\t\tcode,\n\t\t\tpath,\n\t\t\t'formatAndWriteMove'\n\t\t);\n\t}\n\tconsole.log('āœ… Deploy Hook Generation Complete\\n');\n}\n\nexport async function generateMigrate(config: DubheConfig, srcPrefix: string) {\n\tif (\n\t\t!existsSync(\n\t\t\t`${srcPrefix}/contracts/${config.name}/sources/scripts/migrate.move`\n\t\t)\n\t) {\n\t\tlet code = `module ${config.name}::${config.name}_migrate {\n const ON_CHAIN_VERSION: u32 = 1;\n\n public fun on_chain_version(): u32 {\n ON_CHAIN_VERSION\n }\n}\n`;\n\t\tawait formatAndWriteMove(\n\t\t\tcode,\n\t\t\t`${srcPrefix}/contracts/${config.name}/sources/scripts/migrate.move`,\n\t\t\t'formatAndWriteMove'\n\t\t);\n\t}\n}\n","import {BaseType, EventData, SchemaData, SchemaType} from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport {\n\tgetStructAttrsWithType,\n\tgetStructAttrs,\n\tgetStructTypes,\n\tgetStructAttrsQuery,\n} from './common';\n\nfunction capitalizeAndRemoveUnderscores(input: string): string {\n\treturn input\n\t\t.split('_')\n\t\t.map((word, index) => {\n\t\t\treturn index === 0\n\t\t\t\t? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n\t\t\t\t: word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n\t\t})\n\t\t.join('');\n}\n\nfunction convertToSnakeCase(input: string): string {\n\treturn input\n\t\t.replace(/([A-Z])/g, '_$1')\n\t\t.toLowerCase()\n\t\t.replace(/^_/, '');\n}\n\nfunction generateImport(\n\tprojectName: string,\n\tdata: Record<string, SchemaData> | null,\n) {\n\tif (data != null) {\n\t\tconst names = Object.keys(data);\n\t\treturn names\n\t\t\t.map(name => {\n\t\t\t\treturn `use ${projectName}::${projectName}_${convertToSnakeCase(\n\t\t\t\t\tname,\n\t\t\t\t)}::${name};`;\n\t\t\t})\n\t\t\t.join('\\n');\n\t} else {\n\t\treturn '';\n\t}\n}\n\nexport async function generateSchemaEvent(\n\tprojectName: string,\n\tdata: Record<string, SchemaData> | null,\n\tevents: Record<string, EventData>,\n\tpath: string\n) {\n\tconsole.log('\\nšŸ“¦ Starting Schema Event Generation...');\n\tfor (const key of Object.keys(events)) {\n\t\t\t\tconst name = key;\n\t\t\t\tconst fields = events[key];\n\t\t\t\tconsole.log(\n\t\t\t\t\t` └─ Generating ${name} event: ${fields}`\n\t\t\t\t);\n\n\t\t\t\tlet\tcode = `module ${projectName}::${projectName}_${convertToSnakeCase(name)}_event {\n\t\t\t\t\t\tuse sui::event;\n\t\t\t\t\t\tuse std::ascii::String;\n\t\t\t\t\t\t${generateImport(projectName, data)}\n\n public struct ${name}Event has copy, drop {\n ${getStructAttrsWithType(fields as Record<string, string>)}\n }\n\n public fun new(${getStructAttrsWithType(fields as Record<string, string>)}): ${name}Event {\n ${name}Event {\n ${getStructAttrs(fields as Record<string, string>)}\n }\n }\n }`;\n\t\t\t\tawait formatAndWriteMove(\n\t\t\t\t\tcode,\n\t\t\t\t\t`${path}/contracts/${projectName}/sources/codegen/data/${convertToSnakeCase(\n\t\t\t\t\t\tname\n\t\t\t\t\t)}_event.move`,\n\t\t\t\t\t'formatAndWriteMove'\n\t\t\t\t);\n\t\t\t}\n\n\tlet\tcode = `module ${projectName}::${projectName}_events {\n\t \tuse std::ascii::{String, string};\n\t \t${generateImport(projectName, data)}\n\t\t${Object.entries(events).map(([name, fields]) => {\n\t\treturn `\nuse ${projectName}::${projectName}_${convertToSnakeCase(name)}_event::${name}Event;\nuse ${projectName}::${projectName}_${convertToSnakeCase(name)}_event;\n\t\t\tpublic fun ${convertToSnakeCase(name)}_event(${getStructAttrsWithType(fields as Record<string, string>)}) {\n\t\t\t dubhe::storage_event::emit_set_record<${name}Event, ${name}Event, ${name}Event>(\n\t\t\t\tstring(b\"${convertToSnakeCase(name)}_event\"),\n\t\t\t\toption::none(),\n\t\t\t \toption::none(),\n\t\t\t option::some(${projectName}_${convertToSnakeCase(name)}_event::new(${getStructAttrs(fields as Record<string, string>)}))\n\t\t\t )\n\t\t\t}\n\t\t`\n\t}).join('\\n')}\t\t\n }`\n\n\n\tawait formatAndWriteMove(\n\t\tcode,\n\t\t`${path}/contracts/${projectName}/sources/codegen/events.move`,\n\t\t'formatAndWriteMove'\n\t);\n\tconsole.log('āœ… Schema Event Generation Complete\\n');\n}","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport async function generateSystem(config: DubheConfig, srcPrefix: string) {\n\tconsole.log('\\nāš™ļø Starting System Generation...');\n\t\tconsole.log(` ā”œā”€ Generating systems`);\n\t\tconsole.log(\n\t\t\t` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/systems`\n\t\t);\n\n\t\tif (\n\t\t\t!existsSync(\n\t\t\t\t`${srcPrefix}/contracts/${config.name}/sources/systems`\n\t\t\t)\n\t\t) {\n\t\t\tawait fs.mkdir(`${srcPrefix}/contracts/${config.name}/sources/systems`, { recursive: true })\n\t\t}\n\tconsole.log('āœ… System Generation Complete\\n');\n}\n","import {BaseType, ErrorData, SchemaType} from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport {\n\tgetStructAttrsWithType,\n\tgetStructAttrs,\n\tgetStructTypes,\n\tgetStructAttrsQuery,\n} from './common';\n\nfunction convertToSnakeCase(input: string): string {\n\treturn input\n\t\t.replace(/([A-Z])/g, '_$1')\n\t\t.toLowerCase()\n\t\t.replace(/^_/, '');\n}\n\nexport async function generateSchemaError(\n\tprojectName: string,\n\terrors: ErrorData,\n\tpath: string\n) {\n\tconsole.log('\\nšŸ“¦ Starting Schema Error Generation...');\n\n\tlet\tcode = `module ${projectName}::${projectName}_errors {\n\t\t${Object.entries(errors).map(([name, message]) => {\n\t\t\tconsole.log(` ā”œā”€ Generating Error: ${name}`);\n\t\tconsole.log(` │ └─ Message: ${message}`);\n\t\treturn `#[error]\n\t\t\t\tconst ${name}: vector<u8> = b\"${message}\";\n\t\t\t\tpublic fun ${convertToSnakeCase(name)}_error(condition: bool) { assert!(condition, ${name}) }\n\t\t`\n\t}).join('\\n')}\t\t\n }`\n\n\n\tawait formatAndWriteMove(\n\t\tcode,\n\t\t`${path}/contracts/${projectName}/sources/codegen/errors.move`,\n\t\t'formatAndWriteMove'\n\t);\n\tconsole.log('āœ… Schema Error Generation Complete\\n');\n}","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport { capitalizeAndRemoveUnderscores } from './generateSchema';\n\nexport async function generateDefaultSchema(\n\tconfig: DubheConfig,\n\tsrcPrefix: string\n) {\n\tawait generateDappSchemaMetadata(config, srcPrefix);\n\tawait generateDappSchema(config, srcPrefix);\n\tawait generateDappSystem(config, srcPrefix);\n}\n\nasync function generateDappSchemaMetadata(config: DubheConfig, srcPrefix: string) {\n\tconst path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/metadata.move`\n\tif (!existsSync(path)) {\n\t\tlet code = `module ${config.name}::${config.name}_dapp_metadata {\n use std::ascii::String;\n\n public struct DappMetadata has drop, copy, store {\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n created_at: u64,\n partners: vector<String>,\n }\n\n public fun new(\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n created_at: u64,\n partners: vector<String>,\n ): DappMetadata {\n DappMetadata {\n name,\n description,\n icon_url,\n website_url,\n created_at,\n partners,\n }\n }\n\n public fun set(\n self: &mut DappMetadata,\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n created_at: u64,\n partners: vector<String>,\n ) {\n self.name = name;\n self.description = description;\n self.icon_url = icon_url;\n self.website_url = website_url;\n self.created_at = created_at;\n self.partners = partners;\n }\n\n public fun set_name(self: &mut DappMetadata, name: String) {\n self.name = name;\n }\n\n public fun set_description(self: &mut DappMetadata, description: String) {\n self.description = description;\n }\n\n public fun set_icon_url(self: &mut DappMetadata, icon_url: String) {\n self.icon_url = icon_url;\n }\n\n public fun set_website_url(self: &mut DappMetadata, website_url: String) {\n self.website_url = website_url;\n }\n\n public fun set_created_at(self: &mut DappMetadata, created_at: u64) {\n self.created_at = created_at;\n }\n\n public fun set_partners(self: &mut DappMetadata, partners: vector<String>) {\n self.partners = partners;\n }\n\n public fun get_name(self: &DappMetadata): String {\n self.name\n }\n\n public fun get_description(self: &DappMetadata): String {\n self.description\n }\n\n public fun get_icon_url(self: &DappMetadata): String {\n self.icon_url\n }\n\n public fun get_website_url(self: &DappMetadata): String {\n self.website_url\n }\n\n public fun get_created_at(self: &DappMetadata): u64 {\n self.created_at\n }\n\n public fun get_partners(self: &DappMetadata): vector<String> {\n self.partners\n }\n\n}\n`;\n\t\tawait formatAndWriteMove(\n\t\t\tcode,\n\t\t\tpath,\n\t\t\t'formatAndWriteMove'\n\t\t);\n\t}\n}\n\n\nasync function generateDappSchema(config: DubheConfig, srcPrefix: string) {\n\tconst path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/schema.move`\n\tif (!existsSync(path)) {\n\t\tlet code = `module ${config.name}::${config.name}_dapp_schema {\n use ${config.name}::${config.name}_dapp_metadata::DappMetadata;\n use dubhe::storage_value;\n use dubhe::storage_value::StorageValue;\n use dubhe::storage;\n use sui::transfer::public_share_object;\n use dubhe::type_info;\n \n public struct Dapp has key, store {\n id: UID,\n }\n\n public fun borrow_admin(self: &Dapp): &StorageValue<address> {\n storage::borrow_field(&self.id, b\"admin\")\n }\n\n public(package) fun admin(self: &mut Dapp): &mut StorageValue<address> {\n storage::borrow_mut_field(&mut self.id, b\"admin\")\n }\n\n public fun borrow_package_id(self: &Dapp): &StorageValue<address> {\n storage::borrow_field(&self.id, b\"package_id\")\n }\n\n public(package) fun package_id(self: &mut Dapp): &mut StorageValue<address> {\n storage::borrow_mut_field(&mut self.id, b\"package_id\")\n }\n\n public fun borrow_version(self: &Dapp): &StorageValue<u32> {\n storage::borrow_field(&self.id, b\"version\")\n }\n\n public(package) fun version(self: &mut Dapp): &mut StorageValue<u32> {\n storage::borrow_mut_field(&mut self.id, b\"version\")\n }\n\n public fun borrow_metadata(self: &Dapp): &StorageValue<DappMetadata> {\n storage::borrow_field(&self.id, b\"metadata\")\n }\n\n public(package) fun metadata(self: &mut Dapp): &mut StorageValue<DappMetadata> {\n storage::borrow_mut_field(&mut self.id, b\"metadata\")\n }\n\n public fun borrow_safe_mode(self: &Dapp): &StorageValue<bool> {\n storage::borrow_field(&self.id, b\"safe_mode\")\n }\n\n public(package) fun safe_mode(self: &mut Dapp): &mut StorageValue<bool> {\n storage::borrow_mut_field(&mut self.id, b\"safe_mode\")\n }\n \n public(package) fun borrow_schemas(self: &Dapp): &StorageValue<vector<address>> {\n storage::borrow_field(&self.id, b\"schemas\")\n }\n\n public(package) fun schemas(self: &mut Dapp): &mut StorageValue<vector<address>> {\n storage::borrow_mut_field(&mut self.id, b\"schemas\")\n }\n\n\n public(package) fun create(ctx: &mut TxContext): Dapp {\n let mut id = object::new(ctx);\n storage::add_field<StorageValue<address>>(&mut id, b\"admin\", storage_value::new(b\"admin\", ctx));\n storage::add_field<StorageValue<address>>(&mut id, b\"package_id\", storage_value::new(b\"package_id\", ctx));\n storage::add_field<StorageValue<u32>>(&mut id, b\"version\", storage_value::new(b\"version\", ctx));\n storage::add_field<StorageValue<DappMetadata>>(&mut id, b\"metadata\", storage_value::new(b\"metadata\", ctx));\n storage::add_field<StorageValue<bool>>(&mut id, b\"safe_mode\", storage_value::new(b\"safe_mode\", ctx));\n storage::add_field<StorageValue<vector<address>>>(&mut id, b\"schemas\", storage_value::new(b\"schemas\", ctx));\n Dapp { id }\n }\n\n public(package) fun upgrade<DappKey: drop>(dapp: &mut Dapp, ctx: &TxContext) {\n assert!(dapp.borrow_metadata().contains(), 0);\n assert!(dapp.borrow_admin().get() == ctx.sender(), 0);\n let new_package_id = type_info::current_package_id<DappKey>();\n dapp.package_id().set(new_package_id);\n let current_version = dapp.version()[];\n dapp.version().set(current_version + 1);\n }\n \n public(package) fun add_schema<Schema: key + store>(dapp: &mut Dapp, schema: Schema) {\n let mut schemas = dapp.schemas()[];\n schemas.push_back(object::id_address<Schema>(&schema));\n dapp.schemas().set(schemas);\n public_share_object(schema);\n }\n\n #[test_only]\n\n public fun create_dapp_for_testing(ctx: &mut TxContext): Dapp {\n create(ctx)\n }\n\n #[test_only]\n\n public fun distroy_dapp_for_testing(dapp: Dapp) {\n let Dapp { id } = dapp;\n id.delete();\n }\n}\n`;\n\t\tawait formatAndWriteMove(\n\t\t\tcode,\n\t\t\tpath,\n\t\t\t'formatAndWriteMove'\n\t\t);\n\t}\n}\n\nasync function generateDappSystem(config: DubheConfig, srcPrefix: string) {\n\tconst path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/system.move`\n\tif (!existsSync(path)) {\n\t\tlet code = `module ${config.name}::${config.name}_dapp_system {\n use std::ascii::String;\n use std::ascii;\n use dubhe::type_info;\n use sui::clock::Clock;\n use ${config.name}::${config.name}_dapp_schema;\n use ${config.name}::${config.name}_dapp_metadata;\n use ${config.name}::${config.name}_dapp_schema::Dapp;\n \n public struct DappKey has drop {}\n public(package) fun new(): DappKey {\n DappKey { }\n }\n\n public(package) fun create(name: String, description: String, clock: &Clock, ctx: &mut TxContext): Dapp {\n let mut dapp = ${config.name}_dapp_schema::create(ctx);\n assert!(!dapp.borrow_metadata().contains(), 0);\n dapp.metadata().set(\n ${config.name}_dapp_metadata::new(\n name,\n description,\n ascii::string(b\"\"),\n ascii::string(b\"\"),\n clock.timestamp_ms(),\n vector[]\n )\n );\n let package_id = type_info::current_package_id<DappKey>();\n dapp.package_id().set(package_id);\n dapp.admin().set(ctx.sender());\n dapp.version().set(1);\n dapp.safe_mode().set(false);\n dapp.schemas().set(vector[]);\n dapp\n }\n\n public entry fun set_metadata(\n dapp: &mut Dapp,\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n partners: vector<String>,\n ctx: &TxContext,\n ) {\n let admin = dapp.admin().try_get();\n assert!(admin == option::some(ctx.sender()), 0);\n let created_at = dapp.metadata().get().get_created_at();\n dapp.metadata().set(\n ${config.name}_dapp_metadata::new(\n name,\n description,\n icon_url,\n website_url,\n created_at,\n partners\n )\n );\n }\n\n public entry fun transfer_ownership(dapp: &mut Dapp, new_admin: address, ctx: &mut TxContext) {\n let admin = dapp.admin().try_get();\n assert!(admin == option::some(ctx.sender()), 0);\n dapp.admin().set(new_admin);\n }\n\n public entry fun set_safe_mode(dapp: &mut Dapp, safe_mode: bool, ctx: &TxContext) {\n let admin = dapp.admin().try_get();\n assert!(admin == option::some(ctx.sender()), 0);\n dapp.safe_mode().set(safe_mode);\n }\n\n public fun ensure_no_safe_mode(dapp: &Dapp) {\n assert!(!dapp.borrow_safe_mode()[], 0);\n }\n\n public fun ensure_has_authority(dapp: &Dapp, ctx: &TxContext) {\n assert!(dapp.borrow_admin().get() == ctx.sender(), 0);\n }\n\n public fun ensure_has_schema<Schema: key + store>(dapp: &Dapp, schema: &Schema) {\n let schema_id = object::id_address(schema);\n assert!(dapp.borrow_schemas().get().contains(&schema_id), 0);\n }\n}\n\n\n`;\n\t\tawait formatAndWriteMove(\n\t\t\tcode,\n\t\t\tpath,\n\t\t\t'formatAndWriteMove'\n\t\t);\n\t}\n}","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport { capitalizeAndRemoveUnderscores } from './generateSchema';\n\nexport async function generateInit(\n\tconfig: DubheConfig,\n\tsrcPrefix: string\n) {\n\tconsole.log('\\nšŸ“ Starting Init Generation...');\n\tconsole.log(\n\t\t` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/tests/init.move`\n\t);\n\n\t\tlet init_test_code = `module ${config.name}::${config.name}_init_test {\n use ${config.name}::${config.name}_dapp_schema::Dapp;\n use sui::clock;\n use sui::test_scenario;\n use sui::test_scenario::Scenario;\n \n public fun deploy_dapp_for_testing(sender: address): (Scenario, Dapp) {\n let mut scenario = test_scenario::begin(sender);\n let ctx = test_scenario::ctx(&mut scenario);\n let clock = clock::create_for_testing(ctx);\n ${config.name}::${config.name}_genesis::run(&clock, ctx);\n clock::destroy_for_testing(clock);\n test_scenario::next_tx(&mut scenario,sender);\n let dapp = test_scenario::take_shared<Dapp>(&scenario);\n (scenario, dapp)\n }\n}\n`;\n\t\tawait formatAndWriteMove(\n\t\t\tinit_test_code,\n\t\t\t`${srcPrefix}/contracts/${config.name}/sources/tests/init.move`,\n\t\t\t'formatAndWriteMove'\n\t\t);\n\n\tlet init_code = `module ${config.name}::${config.name}_genesis {\n use std::ascii::string;\n\n use sui::clock::Clock;\n\n use ${config.name}::${config.name}_dapp_system;\n\n public entry fun run(clock: &Clock, ctx: &mut TxContext) {\n // Create a dapp.\n let mut dapp = ${config.name}_dapp_system::create(string(b\"${config.name}\"),string(b\"${config.description}\"), clock , ctx);\n // Create schemas\n let mut schema = ${config.name}::${config.name}_schema::create(ctx);\n // Logic that needs to be automated once the contract is deployed\n ${config.name}::${config.name}_deploy_hook::run(&mut schema, ctx);\n // Authorize schemas and public share objects\n dapp.add_schema(schema);\n sui::transfer::public_share_object(dapp);\n }\n}\n`;\n\tawait formatAndWriteMove(\n\t\tinit_code,\n\t\t`${srcPrefix}/contracts/${config.name}/sources/codegen/genesis.move`,\n\t\t'formatAndWriteMove'\n\t);\n\n\tconsole.log('āœ… Init Generation Complete\\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 \"dubhe.config.js\",\n \"dubhe.config.mjs\",\n \"dubhe.config.ts\",\n \"dubhe.config.mts\",\n];\nconst TEMP_CONFIG = \"dubhe.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()}`)).dubheConfig;\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 Dubhe project\";\n}","export const parseData = (data: any) => {\n if (typeof data !== 'object' || data === null) {\n return data;\n }\n const parsedData: any = {};\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n // @ts-ignore\n const value = data[key];\n // console.log(\"===========\", value)\n if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n parsedData[key] = handleArray(value);\n } else if (value.hasOwnProperty('variant')) {\n parsedData[key] = { [value.variant]: { } };\n } else if (value.hasOwnProperty('fields')) {\n parsedData[key] = parseData(value.fields);\n } else {\n parsedData[key] = parseData(value);\n }\n } else {\n parsedData[key] = value;\n }\n }\n }\n return parsedData;\n}\n\nconst handleArray = (data: any[]): any[] => {\n let returnData: any[] = [];\n data.forEach((item) => {\n if (typeof item === 'object' && item !== null) {\n if (Array.isArray(item)) {\n returnData.push(handleArray(item));\n } else if (item.hasOwnProperty('variant')) {\n returnData.push({ [item.variant]: { } });\n } else if (item.hasOwnProperty('fields')) {\n returnData.push(parseData(item.fields));\n } else {\n returnData.push(parseData(item));\n }\n } else {\n returnData.push(item);\n }\n });\n return returnData\n}"],"mappings":"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","names":["prettier","prettierPluginMove","formatMove","content","prettierConfigPath","config","error","message","formatTypescript","fs","path","createDebug","debug","error","debug","error","formatAndWriteMove","output","fullOutputPath","logPrefix","formattedOutput","formatMove","schemaPrefix","initPrefix","code","deployHookPrefix","fs","path","debug","formatAndWriteTypescript","formatTypescript","posixPath","path","existsSync","fs","deleteFolderRecursive","path","file","curPath","getStructAttrs","values","key","_","getStructTypes","values","_","type","getStructAttrsWithType","key","getStructAttrsQuery","containsString","obj","searchString","value","generateToml","config","srcPrefix","code","formatAndWriteMove","sortByFirstLetter","arr","a","b","firstLetterA","firstLetterB","renderSetAttrsFunc","schemaName","fields","key","type","renderSetFunc","getStructAttrsWithType","fieldName","renderGetAllFunc","getStructTypes","getStructAttrsQuery","renderGetAttrsFunc","convertToSnakeCase","input","generateSchemaData","projectName","data","path","name","code","enumNames","item","sortByFirstLetterFields","sortByFirstLetter","field","containsString","getStructAttrs","formatAndWriteMove","generateImport","generateSchemaStructure","schemas","schemaMoudle","value","storage_type","all_types","para_key","para_value","borrow_key","existsSync","generateDeployHook","config","srcPrefix","path","code","formatAndWriteMove","generateMigrate","convertToSnakeCase","input","generateImport","projectName","data","name","generateSchemaEvent","events","path","key","fields","code","getStructAttrsWithType","getStructAttrs","formatAndWriteMove","existsSync","fs","generateSystem","config","srcPrefix","convertToSnakeCase","input","generateSchemaError","projectName","errors","path","code","name","message","formatAndWriteMove","existsSync","generateDefaultSchema","config","srcPrefix","generateDappSchemaMetadata","generateDappSchema","generateDappSystem","path","code","formatAndWriteMove","generateInit","config","srcPrefix","init_test_code","formatAndWriteMove","init_code","schemaGen","config","srcPrefix","network","path","existsSync","deleteFolderRecursive","generateToml","generateDeployHook","generateSchemaEvent","generateSchemaData","generateSchemaStructure","generateSchemaError","generateDefaultSchema","generateInit","generateSystem","generateMigrate","findUp","path","esbuild","NotInsideProjectError","rmSync","pathToFileURL","os","configFiles","TEMP_CONFIG","loadConfig","configPath","resolveConfigPath","esbuild","toFileURL","getUserConfigPath","path","tsConfigPath","findUp","NotInsideProjectError","parseData","data","parsedData","key","value","handleArray","returnData","item"]}
1
+ {"version":3,"sources":["../src/codegen/utils/format.ts","../src/codegen/utils/formatAndWrite.ts","../src/debug.ts","../src/codegen/debug.ts","../src/codegen/utils/posixPath.ts","../src/codegen/utils/renderMove/schemaGen.ts","../src/codegen/utils/renderMove/common.ts","../src/codegen/utils/renderMove/generateToml.ts","../src/codegen/utils/renderMove/generateSchema.ts","../src/codegen/utils/renderMove/generateScript.ts","../src/codegen/utils/renderMove/generateEvent.ts","../src/codegen/utils/renderMove/generateSystem.ts","../src/codegen/utils/renderMove/generateError.ts","../src/codegen/utils/renderMove/generateDefaultSchema.ts","../src/codegen/utils/renderMove/generateInit.ts","../src/codegen/utils/config.ts","../src/codegen/utils/errors.ts","../src/codegen/types/index.ts","../src/parseData/parser/index.ts","../src/primitives/index.ts"],"sourcesContent":["import prettier from 'prettier';\nimport prettierPluginMove from 'prettier-plugin-move-js';\n\nexport async function formatMove(content: string, prettierConfigPath?: string): Promise<string> {\n let config;\n if (prettierConfigPath) {\n config = await prettier.resolveConfig(prettierConfigPath);\n }\n try {\n return prettier.format(content, {\n plugins: [prettierPluginMove],\n parser: 'move-parse',\n printWidth: 120,\n semi: true,\n tabWidth: 2,\n useTabs: false,\n bracketSpacing: true,\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { formatMove, formatTypescript } from './format';\nimport { debug } from '../debug';\n\nexport async function formatAndWriteMove(\n output: string,\n fullOutputPath: string,\n logPrefix?: string\n): Promise<void> {\n const formattedOutput = await formatMove(output);\n let schemaPrefix = ` // Copyright (c) Obelisk Labs, Inc.\n // SPDX-License-Identifier: Apache-2.0\n #[allow(unused_use)]\n \n /* Autogenerated file. Do not edit manually. */\n \n `;\n\n let initPrefix = `#[test_only]`;\n\n let code = schemaPrefix + formattedOutput;\n\n let deployHookPrefix = `#[allow(lint(share_owned))]`;\n\n if (\n fullOutputPath.includes('.toml') ||\n fullOutputPath.includes('system') ||\n fullOutputPath.includes('migrate')\n ) {\n code = formattedOutput;\n } else if (fullOutputPath.includes('init')) {\n code = initPrefix + formattedOutput;\n } else if (fullOutputPath.includes('genesis')) {\n code = deployHookPrefix + formattedOutput;\n }\n\n await fs.mkdir(path.dirname(fullOutputPath), { recursive: true });\n await fs.writeFile(fullOutputPath, code);\n debug(`${logPrefix}: ${fullOutputPath}`);\n}\n\n/**\n * Formats typescript code using prettier and write it to a file\n * @param output typescript code\n * @param fullOutputPath full path to the output file\n * @param logPrefix prefix for debug logs\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 await fs.mkdir(path.dirname(fullOutputPath), { recursive: true });\n\n await fs.writeFile(fullOutputPath, formattedOutput);\n debug(`${logPrefix}: ${fullOutputPath}`);\n}\n","import createDebug from 'debug';\n\nexport const debug = createDebug('dubhe:common');\nexport const error = createDebug('dubhe:common');\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { debug as parentDebug } from '../debug';\n\nexport const debug = parentDebug.extend('codegen');\nexport const error = parentDebug.extend('codegen');\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\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 { SchemaType, DubheConfig } from '../../types';\nimport { rmdirSync, existsSync } from 'fs';\nimport { deleteFolderRecursive } from './common';\nimport { generateToml } from './generateToml';\nimport { generateSchemaData, generateSchemaStructure } from './generateSchema';\nimport { generateDeployHook, generateMigrate } from './generateScript';\nimport { generateDappKey } from './generateDappKey';\nimport { generateSchemaEvent } from './generateEvent';\nimport { generateSystem } from './generateSystem';\nimport { generateSchemaHub } from './generateSchemaHub';\nimport { generateSchemaError } from './generateError';\nimport { generateDefaultSchema } from './generateDefaultSchema';\nimport { generateInit } from './generateInit';\n\nexport async function schemaGen(\n config: DubheConfig,\n srcPrefix?: string,\n network?: 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n) {\n console.log('\\nšŸš€ Starting Schema Generation Process...');\n console.log('šŸ“‹ Project Configuration:');\n console.log(` ā”œā”€ Name: ${config.name}`);\n console.log(` ā”œā”€ Description: ${config.description || 'No description provided'}`);\n console.log(` ā”œā”€ Network: ${network || 'testnet'}`);\n\n const path = srcPrefix ?? process.cwd();\n\n if (existsSync(`${path}/contracts/${config.name}`)) {\n deleteFolderRecursive(`${path}/contracts/${config.name}/sources/codegen`);\n }\n\n if (!existsSync(`${path}/contracts/${config.name}/Move.toml`)) {\n await generateToml(config, path);\n }\n\n if (!existsSync(`${path}/contracts/${config.name}/sources/script/deploy_hook.move`)) {\n await generateDeployHook(config, path);\n }\n\n if (config.events) {\n if (config.data) {\n await generateSchemaEvent(config.name, config.data, config.events, path);\n } else {\n await generateSchemaEvent(config.name, null, config.events, path);\n }\n }\n\n if (config.data) {\n await generateSchemaData(config.name, config.data, path);\n await generateSchemaStructure(config.name, config.data, config.schemas, path);\n } else {\n await generateSchemaStructure(config.name, null, config.schemas, path);\n }\n\n if (config.errors) {\n await generateSchemaError(config.name, config.errors, path);\n }\n\n await generateDefaultSchema(config, path);\n await generateInit(config, path);\n await generateSystem(config, path);\n await generateMigrate(config, path);\n\n console.log('āœ… Schema Generation Process Complete!\\n');\n}\n","import { 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 *\n * @param values\n * @param prefixArgs\n * @return [ name, age, birth_time ]\n */\nexport function getStructAttrs(values: Record<string, string> | string): string {\n return Object.entries(values)\n .map(([key, _]) => `${key}`)\n .join(',');\n}\n\nfunction isAddress(str: string): boolean {\n const regex = /^0x[a-fA-F0-9]+$/;\n return regex.test(str);\n}\n\n/**\n *\n * @param values\n * @return ( bool , u64 , u64)\n */\n// export function getStructTypes(values: SchemaType): string {\nexport function getStructTypes(values: Record<string, string>): string {\n return `(${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(values: Record<string, string>): string[] {\n return Object.entries(values).map(([key, type]) => `${key}: ${type}`);\n}\n\n/**\n * @param values\n * @return [ data.name, data.age ]\n */\nexport function getStructAttrsQuery(values: Record<string, string>): string[] {\n return Object.entries(values).map(([key, _]) => `self.${key}`);\n}\n\nexport function containsString(obj: Record<string, any>, searchString: string): boolean {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n const value = obj[key];\n if (typeof value === 'string' && value === searchString) {\n return true;\n }\n }\n }\n return false;\n}\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\n\nexport async function generateToml(config: DubheConfig, srcPrefix: string) {\n console.log('\\nšŸ“„ Starting Move.toml Generation...');\n console.log(` └─ Output path: ${srcPrefix}/contracts/${config.name}/Move.toml`);\n\n let code = `[package]\nname = \"${config.name}\"\nversion = \"1.0.0\"\nedition = \"2024\"\n\n[dependencies]\nSui = { git = \"https://github.com/MystenLabs/sui.git\", subdir = \"crates/sui-framework/packages/sui-framework\", rev = \"mainnet-v1.38.3\" }\nDubhe = { git = \"https://github.com/0xobelisk/dubhe-framework.git\", rev = \"dubhe-mainnet-v1.1.0\" }\n\n[addresses]\nsui = \"0x2\"\n${config.name} = \"0x0\"\n`;\n await formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/Move.toml`,\n 'formatAndWriteMove'\n );\n console.log('āœ… Move.toml Generation Complete\\n');\n}\n","import { BaseType, SchemaData, SchemaType } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport {\n getStructAttrsWithType,\n getStructAttrs,\n getStructTypes,\n getStructAttrsQuery,\n containsString\n} from './common';\n\nfunction sortByFirstLetter(arr: string[]): string[] {\n return arr.sort((a, b) => {\n const firstLetterA = a.charAt(0).toLowerCase();\n const firstLetterB = b.charAt(0).toLowerCase();\n\n if (firstLetterA < firstLetterB) {\n return -1;\n }\n if (firstLetterA > firstLetterB) {\n return 1;\n }\n return 0;\n });\n}\n\nexport function capitalizeAndRemoveUnderscores(input: string): string {\n return input\n .split('_')\n .map((word, index) => {\n return index === 0\n ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n })\n .join('');\n}\n\nexport function renderSetAttrsFunc(\n schemaName: string,\n fields: BaseType | Record<string, BaseType>\n): string {\n return Object.entries(fields)\n .map(\n ([key, type]) =>\n `public(package) fun set_${key}(self: &mut ${schemaName}, ${key}: ${type}) {\n self.${key} = ${key};\n }`\n )\n .join('\\n');\n}\n\nexport function renderSetFunc(schemaName: string, fields: Record<string, string>): string {\n return `public(package) fun set(self: &mut ${schemaName}, ${getStructAttrsWithType(fields)}) {\n ${Object.entries(fields)\n .map(([fieldName]) => `self.${fieldName} = ${fieldName};`)\n .join('\\n')}\n }`;\n}\n\nexport function renderGetAllFunc(schemaName: string, fields: Record<string, string>): string {\n return `public fun get(self: &${schemaName}): ${getStructTypes(fields)} {\n (${getStructAttrsQuery(fields)})\n }`;\n}\n\nexport function renderGetAttrsFunc(\n schemaName: string,\n fields: BaseType | Record<string, BaseType>\n): string {\n return Object.entries(fields)\n .map(\n ([key, type]) => `public fun get_${key}(self: &${schemaName}): ${type} {\n self.${key}\n }`\n )\n .join('\\n');\n}\n\nfunction convertToSnakeCase(input: string): string {\n return input\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/^_/, '');\n}\n\nexport async function generateSchemaData(\n projectName: string,\n data: Record<string, SchemaData>,\n path: string\n) {\n console.log('\\nšŸ“¦ Starting Schema Data Generation...');\n for (const key of Object.keys(data)) {\n const name = key;\n const fields = data[key];\n console.log(` └─ Generating ${name} ${Array.isArray(fields) ? '(enum)' : '(struct)'}`);\n let code = '';\n\n const enumNames = Object.keys(data)\n .filter((item) => Array.isArray(data[item]))\n .map((item) => item);\n\n console.log(enumNames);\n\n if (Array.isArray(fields)) {\n const sortByFirstLetterFields = sortByFirstLetter(fields);\n code = `module ${projectName}::${projectName}_${convertToSnakeCase(name)} {\n public enum ${name} has copy, drop , store {\n ${sortByFirstLetterFields}\n }\n \n ${sortByFirstLetterFields\n .map((field: string) => {\n return `public fun new_${convertToSnakeCase(field)}(): ${name} {\n ${name}::${field}\n }`;\n })\n .join('')}`;\n } else {\n code = `module ${projectName}::${projectName}_${convertToSnakeCase(name)} {\n use std::ascii::String;\n \n\t\t\t\t\t\t${Object.keys(data)\n .map((name) => {\n if (containsString(fields, name)) {\n return `use ${projectName}::${projectName}_${convertToSnakeCase(name)}::${name};`;\n }\n return undefined;\n })\n .filter(Boolean)\n .join('\\n')}\n\n public struct ${name} has copy, drop , store {\n ${getStructAttrsWithType(fields)}\n }\n \n public fun new(${getStructAttrsWithType(fields)}): ${name} {\n ${name} {\n ${getStructAttrs(fields)}\n }\n }\n \n ${renderGetAllFunc(name, fields)}\n ${renderGetAttrsFunc(name, fields)}\n ${renderSetAttrsFunc(name, fields)}\n ${renderSetFunc(name, fields)}\n }`;\n }\n\n await formatAndWriteMove(\n code,\n `${path}/contracts/${projectName}/sources/codegen/data/${convertToSnakeCase(name)}.move`,\n 'formatAndWriteMove'\n );\n }\n console.log('āœ… Schema Data Generation Complete\\n');\n}\n\nfunction generateImport(projectName: string, data: Record<string, SchemaData> | null) {\n if (data != null) {\n const names = Object.keys(data);\n return names\n .map((name) => {\n return `use ${projectName}::${projectName}_${convertToSnakeCase(name)}::${name};`;\n })\n .join('\\n');\n } else {\n return '';\n }\n}\n\nexport async function generateSchemaStructure(\n projectName: string,\n data: Record<string, SchemaData> | null,\n schemas: Record<string, SchemaType>,\n path: string\n) {\n console.log('\\nšŸ”Ø Starting Schema Structure Generation...');\n console.log(` ā”œā”€ Output path: ${path}/contracts/${projectName}/sources/codegen/schema.move`);\n console.log(` └─ Structure fields: ${Object.values(schemas).length}`);\n const schemaMoudle = `module ${projectName}::${projectName}_schema {\n use std::ascii::String;\n use std::ascii::string;\n use sui::package::UpgradeCap;\n use std::type_name; \n use dubhe::storage;\n use dubhe::storage_value::{Self, StorageValue};\n use dubhe::storage_map::{Self, StorageMap};\n use dubhe::storage_double_map::{Self, StorageDoubleMap};\n use sui::dynamic_field as df;\n \n ${generateImport(projectName, data)}\n\n public struct Schema has key, store { id: UID } \n \n ${Object.entries(schemas)\n .map(([key, value]) => {\n return `public fun borrow_${key}(self: &Schema) : &${value} {\n storage::borrow_field(&self.id, b\"${key}\")\n }\n \n public(package) fun ${key}(self: &mut Schema): &mut ${value} {\n storage::borrow_mut_field(&mut self.id, b\"${key}\")\n }\n `;\n })\n .join('')} \n \n \n public(package) fun create(ctx: &mut TxContext): Schema {\n let mut id = object::new(ctx);\n ${Object.entries(schemas)\n .map(([key, value]) => {\n let storage_type = '';\n if (value.includes('StorageValue')) {\n storage_type = `storage_value::new(b\"${key}\", ctx)`;\n } else if (value.includes('StorageMap')) {\n storage_type = `storage_map::new(b\"${key}\", ctx)`;\n } else if (value.includes('StorageDoubleMap')) {\n storage_type = `storage_double_map::new(b\"${key}\", ctx)`;\n }\n return `storage::add_field<${value}>(&mut id, b\"${key}\", ${storage_type});`;\n })\n .join('\\n')}\n \n Schema { id }\n }\n \n public(package) fun id(self: &mut Schema): &mut UID {\n\t\t\t\t\t &mut self.id\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tpublic(package) fun borrow_id(self: &Schema): &UID {\n\t\t\t\t\t &self.id\n\t\t\t\t\t}\n \n public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) { }\n\n \n // ======================================== View Functions ========================================\n ${Object.entries(schemas)\n .map(([key, value]) => {\n // @ts-ignore\n let all_types = value\n .match(/<(.+)>/)[1]\n .split(',')\n .map((type) => type.trim());\n let para_key: string[] = [];\n let para_value = '';\n let borrow_key = '';\n if (value.includes('StorageValue')) {\n para_key = [];\n para_value = `${all_types[0]}`;\n borrow_key = 'get()';\n } else if (value.includes('StorageMap')) {\n para_key = [`key: ${all_types[0]}`];\n para_value = `${all_types[1]}`;\n borrow_key = 'get(key)';\n } else if (value.includes('StorageDoubleMap')) {\n para_key = [`key1: ${all_types[0]}`, `key2: ${all_types[1]}`];\n para_value = `${all_types[2]}`;\n borrow_key = 'get(key1, key2)';\n }\n return `public fun get_${key}(self: &Schema, ${para_key}) : &${para_value} {\n\t\t\t\t\t\t\t\t\tself.borrow_${key}().${borrow_key}\n\t\t\t\t\t\t\t\t}`;\n })\n .join('\\n')}\n // =========================================================================================================\n\t\t\t}`;\n await formatAndWriteMove(\n schemaMoudle,\n `${path}/contracts/${projectName}/sources/codegen/schema.move`,\n 'formatAndWriteMove'\n );\n console.log('āœ… Schema Structure Generation Complete\\n');\n}\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport { capitalizeAndRemoveUnderscores } from './generateSchema';\n\nimport { readFileSync } from 'fs';\n\nexport async function generateDeployHook(config: DubheConfig, srcPrefix: string) {\n console.log('\\nšŸ“ Starting Deploy Hook Generation...');\n console.log(\n ` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/scripts/deploy_hook.move`\n );\n\n const path = `${srcPrefix}/contracts/${config.name}/sources/scripts/deploy_hook.move`;\n if (!existsSync(path)) {\n const code = `module ${config.name}::${config.name}_deploy_hook {\n\t\t\t use ${config.name}::${config.name}_schema::Schema;\n\n public(package) fun run(_schema: &mut Schema, _ctx: &mut TxContext) {\n\n }\n}`;\n await formatAndWriteMove(code, path, 'formatAndWriteMove');\n }\n console.log('āœ… Deploy Hook Generation Complete\\n');\n}\n\nexport async function generateMigrate(config: DubheConfig, srcPrefix: string) {\n if (!existsSync(`${srcPrefix}/contracts/${config.name}/sources/scripts/migrate.move`)) {\n let code = `module ${config.name}::${config.name}_migrate {\n const ON_CHAIN_VERSION: u32 = 1;\n\n public fun on_chain_version(): u32 {\n ON_CHAIN_VERSION\n }\n}\n`;\n await formatAndWriteMove(\n code,\n `${srcPrefix}/contracts/${config.name}/sources/scripts/migrate.move`,\n 'formatAndWriteMove'\n );\n }\n}\n","import { BaseType, EventData, SchemaData, SchemaType } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport {\n getStructAttrsWithType,\n getStructAttrs,\n getStructTypes,\n getStructAttrsQuery\n} from './common';\n\n// account_not_found => AccountNotFound,\nfunction toPascalCase(str: string): string {\n return str\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('');\n}\n\nfunction convertToSnakeCase(input: string): string {\n return input\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/^_/, '');\n}\n\nfunction generateImport(projectName: string, data: Record<string, SchemaData> | null) {\n if (data != null) {\n const names = Object.keys(data);\n return names\n .map((name) => {\n return `use ${projectName}::${projectName}_${convertToSnakeCase(name)}::${name};`;\n })\n .join('\\n');\n } else {\n return '';\n }\n}\n\nexport async function generateSchemaEvent(\n projectName: string,\n data: Record<string, SchemaData> | null,\n events: Record<string, EventData>,\n path: string\n) {\n console.log('\\nšŸ“¦ Starting Schema Event Generation...');\n for (const key of Object.keys(events)) {\n const name = key;\n const fields = events[key];\n console.log(` └─ Generating ${name} event: ${fields}`);\n\n let code = `module ${projectName}::${projectName}_${name}_event {\n\t\t\t\t\t\tuse sui::event;\n\t\t\t\t\t\tuse std::ascii::String;\n\t\t\t\t\t\t${generateImport(projectName, data)}\n\n public struct ${toPascalCase(name)}Event has copy, drop {\n ${getStructAttrsWithType(fields as Record<string, string>)}\n }\n\n public fun new(${getStructAttrsWithType(fields as Record<string, string>)}): ${toPascalCase(name)}Event {\n ${toPascalCase(name)}Event {\n ${getStructAttrs(fields as Record<string, string>)}\n }\n }\n }`;\n await formatAndWriteMove(\n code,\n `${path}/contracts/${projectName}/sources/codegen/data/${name}_event.move`,\n 'formatAndWriteMove'\n );\n }\n\n let code = `module ${projectName}::${projectName}_events {\n\t \tuse std::ascii::{String, string};\n\t \t${generateImport(projectName, data)}\n\t\t${Object.entries(events)\n .map(([name, fields]) => {\n return `\nuse ${projectName}::${projectName}_${name}_event::${toPascalCase(name)}Event;\nuse ${projectName}::${projectName}_${name}_event;\n\t\t\tpublic fun ${name}_event(${getStructAttrsWithType(fields as Record<string, string>)}) {\n\t\t\t dubhe::storage_event::emit_set_record<${toPascalCase(name)}Event, ${toPascalCase(name)}Event, ${toPascalCase(name)}Event>(\n\t\t\t\tstring(b\"${name}_event\"),\n\t\t\t\toption::none(),\n\t\t\t \toption::none(),\n\t\t\t option::some(${projectName}_${name}_event::new(${getStructAttrs(fields as Record<string, string>)}))\n\t\t\t )\n\t\t\t}\n\t\t`;\n })\n .join('\\n')}\t\t\n }`;\n\n await formatAndWriteMove(\n code,\n `${path}/contracts/${projectName}/sources/codegen/events.move`,\n 'formatAndWriteMove'\n );\n console.log('āœ… Schema Event Generation Complete\\n');\n}\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport async function generateSystem(config: DubheConfig, srcPrefix: string) {\n console.log('\\nāš™ļø Starting System Generation...');\n console.log(` ā”œā”€ Generating systems`);\n console.log(` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/systems`);\n\n if (!existsSync(`${srcPrefix}/contracts/${config.name}/sources/systems`)) {\n await fs.mkdir(`${srcPrefix}/contracts/${config.name}/sources/systems`, { recursive: true });\n }\n console.log('āœ… System Generation Complete\\n');\n}\n","import { BaseType, ErrorData, SchemaType } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport {\n getStructAttrsWithType,\n getStructAttrs,\n getStructTypes,\n getStructAttrsQuery\n} from './common';\n\nfunction convertToSnakeCase(input: string): string {\n return input\n .replace(/([A-Z])/g, '_$1')\n .toLowerCase()\n .replace(/^_/, '');\n}\n\nexport async function generateSchemaError(projectName: string, errors: ErrorData, path: string) {\n console.log('\\nšŸ“¦ Starting Schema Error Generation...');\n\n let code = `module ${projectName}::${projectName}_errors {\n\t\t${Object.entries(errors)\n .map(([name, message]) => {\n console.log(` ā”œā”€ Generating Error: ${name}`);\n console.log(` │ └─ Message: ${message}`);\n return `#[error]\n\t\t\t\tconst ${name.toUpperCase()}: vector<u8> = b\"${message}\";\n\t\t\t\tpublic fun ${name}_error(condition: bool) { assert!(condition, ${name.toUpperCase()}) }\n\t\t`;\n })\n .join('\\n')}\t\t\n }`;\n\n await formatAndWriteMove(\n code,\n `${path}/contracts/${projectName}/sources/codegen/errors.move`,\n 'formatAndWriteMove'\n );\n console.log('āœ… Schema Error Generation Complete\\n');\n}\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport { capitalizeAndRemoveUnderscores } from './generateSchema';\n\nexport async function generateDefaultSchema(config: DubheConfig, srcPrefix: string) {\n await generateDappSchemaMetadata(config, srcPrefix);\n await generateDappSchema(config, srcPrefix);\n await generateDappSystem(config, srcPrefix);\n}\n\nasync function generateDappSchemaMetadata(config: DubheConfig, srcPrefix: string) {\n const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/metadata.move`;\n if (!existsSync(path)) {\n let code = `module ${config.name}::${config.name}_dapp_metadata {\n use std::ascii::String;\n\n public struct DappMetadata has drop, copy, store {\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n created_at: u64,\n partners: vector<String>,\n }\n\n public fun new(\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n created_at: u64,\n partners: vector<String>,\n ): DappMetadata {\n DappMetadata {\n name,\n description,\n icon_url,\n website_url,\n created_at,\n partners,\n }\n }\n\n public fun set(\n self: &mut DappMetadata,\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n created_at: u64,\n partners: vector<String>,\n ) {\n self.name = name;\n self.description = description;\n self.icon_url = icon_url;\n self.website_url = website_url;\n self.created_at = created_at;\n self.partners = partners;\n }\n\n public fun set_name(self: &mut DappMetadata, name: String) {\n self.name = name;\n }\n\n public fun set_description(self: &mut DappMetadata, description: String) {\n self.description = description;\n }\n\n public fun set_icon_url(self: &mut DappMetadata, icon_url: String) {\n self.icon_url = icon_url;\n }\n\n public fun set_website_url(self: &mut DappMetadata, website_url: String) {\n self.website_url = website_url;\n }\n\n public fun set_created_at(self: &mut DappMetadata, created_at: u64) {\n self.created_at = created_at;\n }\n\n public fun set_partners(self: &mut DappMetadata, partners: vector<String>) {\n self.partners = partners;\n }\n\n public fun get_name(self: &DappMetadata): String {\n self.name\n }\n\n public fun get_description(self: &DappMetadata): String {\n self.description\n }\n\n public fun get_icon_url(self: &DappMetadata): String {\n self.icon_url\n }\n\n public fun get_website_url(self: &DappMetadata): String {\n self.website_url\n }\n\n public fun get_created_at(self: &DappMetadata): u64 {\n self.created_at\n }\n\n public fun get_partners(self: &DappMetadata): vector<String> {\n self.partners\n }\n\n}\n`;\n await formatAndWriteMove(code, path, 'formatAndWriteMove');\n }\n}\n\nasync function generateDappSchema(config: DubheConfig, srcPrefix: string) {\n const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/schema.move`;\n if (!existsSync(path)) {\n let code = `module ${config.name}::${config.name}_dapp_schema {\n use ${config.name}::${config.name}_dapp_metadata::DappMetadata;\n use dubhe::storage_value;\n use dubhe::storage_value::StorageValue;\n use dubhe::storage;\n use sui::transfer::public_share_object;\n use dubhe::type_info;\n \n public struct Dapp has key, store {\n id: UID,\n }\n\n public fun borrow_admin(self: &Dapp): &StorageValue<address> {\n storage::borrow_field(&self.id, b\"admin\")\n }\n\n public(package) fun admin(self: &mut Dapp): &mut StorageValue<address> {\n storage::borrow_mut_field(&mut self.id, b\"admin\")\n }\n\n public fun borrow_package_id(self: &Dapp): &StorageValue<address> {\n storage::borrow_field(&self.id, b\"package_id\")\n }\n\n public(package) fun package_id(self: &mut Dapp): &mut StorageValue<address> {\n storage::borrow_mut_field(&mut self.id, b\"package_id\")\n }\n\n public fun borrow_version(self: &Dapp): &StorageValue<u32> {\n storage::borrow_field(&self.id, b\"version\")\n }\n\n public(package) fun version(self: &mut Dapp): &mut StorageValue<u32> {\n storage::borrow_mut_field(&mut self.id, b\"version\")\n }\n\n public fun borrow_metadata(self: &Dapp): &StorageValue<DappMetadata> {\n storage::borrow_field(&self.id, b\"metadata\")\n }\n\n public(package) fun metadata(self: &mut Dapp): &mut StorageValue<DappMetadata> {\n storage::borrow_mut_field(&mut self.id, b\"metadata\")\n }\n\n public fun borrow_safe_mode(self: &Dapp): &StorageValue<bool> {\n storage::borrow_field(&self.id, b\"safe_mode\")\n }\n\n public(package) fun safe_mode(self: &mut Dapp): &mut StorageValue<bool> {\n storage::borrow_mut_field(&mut self.id, b\"safe_mode\")\n }\n \n public(package) fun borrow_schemas(self: &Dapp): &StorageValue<vector<address>> {\n storage::borrow_field(&self.id, b\"schemas\")\n }\n\n public(package) fun schemas(self: &mut Dapp): &mut StorageValue<vector<address>> {\n storage::borrow_mut_field(&mut self.id, b\"schemas\")\n }\n\n\n public(package) fun create(ctx: &mut TxContext): Dapp {\n let mut id = object::new(ctx);\n storage::add_field<StorageValue<address>>(&mut id, b\"admin\", storage_value::new(b\"admin\", ctx));\n storage::add_field<StorageValue<address>>(&mut id, b\"package_id\", storage_value::new(b\"package_id\", ctx));\n storage::add_field<StorageValue<u32>>(&mut id, b\"version\", storage_value::new(b\"version\", ctx));\n storage::add_field<StorageValue<DappMetadata>>(&mut id, b\"metadata\", storage_value::new(b\"metadata\", ctx));\n storage::add_field<StorageValue<bool>>(&mut id, b\"safe_mode\", storage_value::new(b\"safe_mode\", ctx));\n storage::add_field<StorageValue<vector<address>>>(&mut id, b\"schemas\", storage_value::new(b\"schemas\", ctx));\n Dapp { id }\n }\n\n public(package) fun upgrade<DappKey: drop>(dapp: &mut Dapp, ctx: &TxContext) {\n assert!(dapp.borrow_metadata().contains(), 0);\n assert!(dapp.borrow_admin().get() == ctx.sender(), 0);\n let new_package_id = type_info::current_package_id<DappKey>();\n dapp.package_id().set(new_package_id);\n let current_version = dapp.version()[];\n dapp.version().set(current_version + 1);\n }\n \n public(package) fun add_schema<Schema: key + store>(dapp: &mut Dapp, schema: Schema) {\n let mut schemas = dapp.schemas()[];\n schemas.push_back(object::id_address<Schema>(&schema));\n dapp.schemas().set(schemas);\n public_share_object(schema);\n }\n\n #[test_only]\n\n public fun create_dapp_for_testing(ctx: &mut TxContext): Dapp {\n create(ctx)\n }\n\n #[test_only]\n\n public fun distroy_dapp_for_testing(dapp: Dapp) {\n let Dapp { id } = dapp;\n id.delete();\n }\n}\n`;\n await formatAndWriteMove(code, path, 'formatAndWriteMove');\n }\n}\n\nasync function generateDappSystem(config: DubheConfig, srcPrefix: string) {\n const path = `${srcPrefix}/contracts/${config.name}/sources/codegen/dapp/system.move`;\n if (!existsSync(path)) {\n let code = `module ${config.name}::${config.name}_dapp_system {\n use std::ascii::String;\n use std::ascii;\n use dubhe::type_info;\n use sui::clock::Clock;\n use ${config.name}::${config.name}_dapp_schema;\n use ${config.name}::${config.name}_dapp_metadata;\n use ${config.name}::${config.name}_dapp_schema::Dapp;\n \n public struct DappKey has drop {}\n public(package) fun new(): DappKey {\n DappKey { }\n }\n\n public(package) fun create(name: String, description: String, clock: &Clock, ctx: &mut TxContext): Dapp {\n let mut dapp = ${config.name}_dapp_schema::create(ctx);\n assert!(!dapp.borrow_metadata().contains(), 0);\n dapp.metadata().set(\n ${config.name}_dapp_metadata::new(\n name,\n description,\n ascii::string(b\"\"),\n ascii::string(b\"\"),\n clock.timestamp_ms(),\n vector[]\n )\n );\n let package_id = type_info::current_package_id<DappKey>();\n dapp.package_id().set(package_id);\n dapp.admin().set(ctx.sender());\n dapp.version().set(1);\n dapp.safe_mode().set(false);\n dapp.schemas().set(vector[]);\n dapp\n }\n\n public entry fun set_metadata(\n dapp: &mut Dapp,\n name: String,\n description: String,\n icon_url: String,\n website_url: String,\n partners: vector<String>,\n ctx: &TxContext,\n ) {\n let admin = dapp.admin().try_get();\n assert!(admin == option::some(ctx.sender()), 0);\n let created_at = dapp.metadata().get().get_created_at();\n dapp.metadata().set(\n ${config.name}_dapp_metadata::new(\n name,\n description,\n icon_url,\n website_url,\n created_at,\n partners\n )\n );\n }\n\n public entry fun transfer_ownership(dapp: &mut Dapp, new_admin: address, ctx: &mut TxContext) {\n let admin = dapp.admin().try_get();\n assert!(admin == option::some(ctx.sender()), 0);\n dapp.admin().set(new_admin);\n }\n\n public entry fun set_safe_mode(dapp: &mut Dapp, safe_mode: bool, ctx: &TxContext) {\n let admin = dapp.admin().try_get();\n assert!(admin == option::some(ctx.sender()), 0);\n dapp.safe_mode().set(safe_mode);\n }\n\n public fun ensure_no_safe_mode(dapp: &Dapp) {\n assert!(!dapp.borrow_safe_mode()[], 0);\n }\n\n public fun ensure_has_authority(dapp: &Dapp, ctx: &TxContext) {\n assert!(dapp.borrow_admin().get() == ctx.sender(), 0);\n }\n\n public fun ensure_has_schema<Schema: key + store>(dapp: &Dapp, schema: &Schema) {\n let schema_id = object::id_address(schema);\n assert!(dapp.borrow_schemas().get().contains(&schema_id), 0);\n }\n}\n\n\n`;\n await formatAndWriteMove(code, path, 'formatAndWriteMove');\n }\n}\n","import { DubheConfig } from '../../types';\nimport { formatAndWriteMove } from '../formatAndWrite';\nimport { existsSync } from 'fs';\nimport { capitalizeAndRemoveUnderscores } from './generateSchema';\n\nexport async function generateInit(config: DubheConfig, srcPrefix: string) {\n console.log('\\nšŸ“ Starting Init Generation...');\n console.log(` └─ Output path: ${srcPrefix}/contracts/${config.name}/sources/tests/init.move`);\n\n let init_test_code = `module ${config.name}::${config.name}_init_test {\n use ${config.name}::${config.name}_dapp_schema::Dapp;\n use sui::clock;\n use sui::test_scenario;\n use sui::test_scenario::Scenario;\n \n public fun deploy_dapp_for_testing(sender: address): (Scenario, Dapp) {\n let mut scenario = test_scenario::begin(sender);\n let ctx = test_scenario::ctx(&mut scenario);\n let clock = clock::create_for_testing(ctx);\n ${config.name}::${config.name}_genesis::run(&clock, ctx);\n clock::destroy_for_testing(clock);\n test_scenario::next_tx(&mut scenario,sender);\n let dapp = test_scenario::take_shared<Dapp>(&scenario);\n (scenario, dapp)\n }\n}\n`;\n await formatAndWriteMove(\n init_test_code,\n `${srcPrefix}/contracts/${config.name}/sources/tests/init.move`,\n 'formatAndWriteMove'\n );\n\n let init_code = `module ${config.name}::${config.name}_genesis {\n use std::ascii::string;\n\n use sui::clock::Clock;\n\n use ${config.name}::${config.name}_dapp_system;\n\n public entry fun run(clock: &Clock, ctx: &mut TxContext) {\n // Create a dapp.\n let mut dapp = ${config.name}_dapp_system::create(string(b\"${config.name}\"),string(b\"${config.description}\"), clock , ctx);\n // Create schemas\n let mut schema = ${config.name}::${config.name}_schema::create(ctx);\n // Logic that needs to be automated once the contract is deployed\n ${config.name}::${config.name}_deploy_hook::run(&mut schema, ctx);\n // Authorize schemas and public share objects\n dapp.add_schema(schema);\n sui::transfer::public_share_object(dapp);\n }\n}\n`;\n await formatAndWriteMove(\n init_code,\n `${srcPrefix}/contracts/${config.name}/sources/codegen/genesis.move`,\n 'formatAndWriteMove'\n );\n\n console.log('āœ… Init Generation Complete\\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 = ['dubhe.config.js', 'dubhe.config.mjs', 'dubhe.config.ts', 'dubhe.config.mts'];\nconst TEMP_CONFIG = 'dubhe.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()}`)).dubheConfig;\n } finally {\n rmSync(TEMP_CONFIG, { force: true });\n }\n}\n\nexport async function resolveConfigPath(configPath: string | undefined, toFileURL?: boolean) {\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' ? pathToFileURL(configPath).href : 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","export class NotInsideProjectError extends Error {\n name = 'NotInsideProjectError';\n message = 'You are not inside a Dubhe project';\n}\n","export type BaseType =\n | 'String'\n | 'vector<String>'\n | 'address'\n | 'bool'\n | 'u8'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'vector<address>'\n | 'vector<bool>'\n | 'vector<u8>'\n | 'vector<vector<u8>>'\n | 'vector<u32>'\n | 'vector<u64>'\n | 'vector<u128>'\n | string;\n\nexport type StorageDataType = 'Struct' | 'Enum';\n\nexport type StorageMapType = 'Map' | 'Bag' | 'Table';\n\ntype Address = string;\ntype Bool = boolean;\ntype U8 = number;\ntype U32 = number;\ntype U64 = number;\ntype U128 = number;\ntype Vector<T> = T[];\n\nexport type BaseValueType =\n | String\n | Address\n | Bool\n | U8\n | U32\n | U64\n | U128\n | Vector<Address>\n | Vector<Bool>\n | Vector<U8>\n | Vector<Vector<U8>>\n | Vector<U64>\n | Vector<U128>;\n\nexport type SchemaData = Record<string, string> | string[];\nexport type SchemaType = string;\nexport type EventData = Record<string, string>;\nexport type ErrorData = Record<string, string>;\n\ntype DataType = any;\n\nexport function storage<T extends DataType>(value: T): SchemaType;\nexport function storage<K extends DataType, V extends DataType>(key: K, value: V): SchemaType;\nexport function storage<K1 extends DataType, K2 extends DataType, V extends DataType>(\n key1: K1,\n key2: K2,\n value: V\n): SchemaType;\nexport function storage(...args: DataType[]): SchemaType {\n if (args.length === 1) {\n return `StorageValue<${args[0]}>`;\n } else if (args.length === 2) {\n return `StorageMap<${args[0]}, ${args[1]}>`;\n } else if (args.length === 3) {\n return `StorageDoubleMap<${args[0]}, ${args[1]}, ${args[2]}>`;\n }\n throw new Error('Invalid number of arguments for storage()');\n}\n\nexport type DubheConfig = {\n name: string;\n description: string;\n data?: Record<string, SchemaData>;\n schemas: Record<string, SchemaType>;\n events?: Record<string, EventData>;\n errors?: ErrorData;\n};\n\nexport type MoveType =\n | 'string'\n | 'vector<string>'\n | 'String'\n | 'vector<String>'\n | 'address'\n | 'bool'\n | 'u8'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'vector<address>'\n | 'vector<bool>'\n | 'vector<u8>'\n | 'vector<vector<u8>>'\n | 'vector<u32>'\n | 'vector<u64>'\n | 'vector<u128>';\n","export const parseData = (data: any) => {\n if (typeof data !== 'object' || data === null) {\n return data;\n }\n const parsedData: any = {};\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n // @ts-ignore\n const value = data[key];\n // console.log(\"===========\", value)\n if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n parsedData[key] = handleArray(value);\n } else if (value.hasOwnProperty('variant')) {\n parsedData[key] = { [value.variant]: {} };\n } else if (value.hasOwnProperty('fields')) {\n parsedData[key] = parseData(value.fields);\n } else {\n parsedData[key] = parseData(value);\n }\n } else {\n parsedData[key] = value;\n }\n }\n }\n return parsedData;\n};\n\nconst handleArray = (data: any[]): any[] => {\n let returnData: any[] = [];\n data.forEach((item) => {\n if (typeof item === 'object' && item !== null) {\n if (Array.isArray(item)) {\n returnData.push(handleArray(item));\n } else if (item.hasOwnProperty('variant')) {\n returnData.push({ [item.variant]: {} });\n } else if (item.hasOwnProperty('fields')) {\n returnData.push(parseData(item.fields));\n } else {\n returnData.push(parseData(item));\n }\n } else {\n returnData.push(item);\n }\n });\n return returnData;\n};\n","export enum SubscriptionKind {\n Event = 'event',\n Schema = 'schema'\n}\n\nexport type SubscribableType =\n | { kind: SubscriptionKind.Event; name?: string; sender?: string }\n | { kind: SubscriptionKind.Schema; name?: string };\n"],"mappings":"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","names":["prettier","prettierPluginMove","formatMove","content","prettierConfigPath","config","error","message","formatTypescript","fs","path","createDebug","debug","error","debug","error","formatAndWriteMove","output","fullOutputPath","logPrefix","formattedOutput","formatMove","schemaPrefix","initPrefix","code","deployHookPrefix","fs","path","debug","formatAndWriteTypescript","formatTypescript","posixPath","path","existsSync","fs","deleteFolderRecursive","path","file","curPath","getStructAttrs","values","key","_","getStructTypes","values","_","type","getStructAttrsWithType","key","getStructAttrsQuery","containsString","obj","searchString","value","generateToml","config","srcPrefix","code","formatAndWriteMove","sortByFirstLetter","arr","a","b","firstLetterA","firstLetterB","renderSetAttrsFunc","schemaName","fields","key","type","renderSetFunc","getStructAttrsWithType","fieldName","renderGetAllFunc","getStructTypes","getStructAttrsQuery","renderGetAttrsFunc","convertToSnakeCase","input","generateSchemaData","projectName","data","path","name","code","enumNames","item","sortByFirstLetterFields","sortByFirstLetter","field","containsString","getStructAttrs","formatAndWriteMove","generateImport","generateSchemaStructure","schemas","schemaMoudle","value","storage_type","all_types","para_key","para_value","borrow_key","existsSync","generateDeployHook","config","srcPrefix","path","code","formatAndWriteMove","generateMigrate","toPascalCase","str","word","convertToSnakeCase","input","generateImport","projectName","data","name","generateSchemaEvent","events","path","key","fields","code","getStructAttrsWithType","getStructAttrs","formatAndWriteMove","existsSync","fs","generateSystem","config","srcPrefix","generateSchemaError","projectName","errors","path","code","name","message","formatAndWriteMove","existsSync","generateDefaultSchema","config","srcPrefix","generateDappSchemaMetadata","generateDappSchema","generateDappSystem","path","code","formatAndWriteMove","generateInit","config","srcPrefix","init_test_code","formatAndWriteMove","init_code","schemaGen","config","srcPrefix","network","path","existsSync","deleteFolderRecursive","generateToml","generateDeployHook","generateSchemaEvent","generateSchemaData","generateSchemaStructure","generateSchemaError","generateDefaultSchema","generateInit","generateSystem","generateMigrate","findUp","path","esbuild","NotInsideProjectError","rmSync","pathToFileURL","os","configFiles","TEMP_CONFIG","loadConfig","configPath","resolveConfigPath","esbuild","toFileURL","getUserConfigPath","path","tsConfigPath","findUp","NotInsideProjectError","storage","args","parseData","data","parsedData","key","value","handleArray","returnData","item","SubscriptionKind"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xobelisk/sui-common",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "Common low level logic shared between packages",
5
5
  "keywords": [
6
6
  "sui",
@@ -38,7 +38,6 @@
38
38
  },
39
39
  "types": "./dist/index.d.ts",
40
40
  "dependencies": {
41
- "@mysten/sui": "^1.7.0",
42
41
  "chalk": "^5.0.1",
43
42
  "debug": "^4.3.4",
44
43
  "dotenv": "^16.0.3",
@@ -65,7 +64,10 @@
65
64
  "@types/yargs": "^17.0.10",
66
65
  "tsup": "^6.7.0",
67
66
  "tsx": "^3.12.6",
68
- "vitest": "^2.1.3"
67
+ "vitest": "^2.1.3",
68
+ "eslint": "^8.56.0",
69
+ "eslint-config-prettier": "^9.1.0",
70
+ "prettier": "3.3.3"
69
71
  },
70
72
  "scripts": {
71
73
  "build": "pnpm run build:js",
@@ -74,6 +76,10 @@
74
76
  "clean:js": "rimraf dist",
75
77
  "dev": "tsup --watch",
76
78
  "lint": "eslint . --ext .ts",
77
- "test": "vitest"
79
+ "test": "vitest",
80
+ "format": "prettier --write .",
81
+ "format:check": "prettier --check .",
82
+ "type-check": "tsc --noEmit",
83
+ "validate": "pnpm format:check && pnpm type-check"
78
84
  }
79
85
  }
@@ -1,7 +1,7 @@
1
- import { debug as parentDebug } from "../debug";
1
+ import { debug as parentDebug } from '../debug';
2
2
 
3
- export const debug = parentDebug.extend("codegen");
4
- export const error = parentDebug.extend("codegen");
3
+ export const debug = parentDebug.extend('codegen');
4
+ export const error = parentDebug.extend('codegen');
5
5
 
6
6
  // Pipe debug output to stdout instead of stderr
7
7
  debug.log = console.debug.bind(console);
@@ -1,3 +1,3 @@
1
1
  // import "./modules.d";
2
- export * from "./utils";
3
- export * from "./types";
2
+ export * from './utils';
3
+ export * from './types';
@@ -1 +1 @@
1
- declare module "prettier-plugin-rust";
1
+ declare module 'prettier-plugin-rust';
@@ -16,14 +16,9 @@ export type BaseType =
16
16
  | 'vector<u128>'
17
17
  | string;
18
18
 
19
- export type StorageDataType =
20
- | 'Struct'
21
- | 'Enum';
19
+ export type StorageDataType = 'Struct' | 'Enum';
22
20
 
23
- export type StorageMapType =
24
- | 'Map'
25
- | 'Bag'
26
- | 'Table';
21
+ export type StorageMapType = 'Map' | 'Bag' | 'Table';
27
22
 
28
23
  type Address = string;
29
24
  type Bool = boolean;
@@ -48,15 +43,29 @@ export type BaseValueType =
48
43
  | Vector<U64>
49
44
  | Vector<U128>;
50
45
 
51
- export type SchemaData = Record<string, string> | string[]
52
- export type SchemaType = string
53
- export type EventData = Record<string, string>
54
- export type ErrorData = Record<string, string>
55
- export type DependencyType = {
56
- name: string;
57
- git: string;
58
- subdir?: string;
59
- rev: string;
46
+ export type SchemaData = Record<string, string> | string[];
47
+ export type SchemaType = string;
48
+ export type EventData = Record<string, string>;
49
+ export type ErrorData = Record<string, string>;
50
+
51
+ type DataType = any;
52
+
53
+ export function storage<T extends DataType>(value: T): SchemaType;
54
+ export function storage<K extends DataType, V extends DataType>(key: K, value: V): SchemaType;
55
+ export function storage<K1 extends DataType, K2 extends DataType, V extends DataType>(
56
+ key1: K1,
57
+ key2: K2,
58
+ value: V
59
+ ): SchemaType;
60
+ export function storage(...args: DataType[]): SchemaType {
61
+ if (args.length === 1) {
62
+ return `StorageValue<${args[0]}>`;
63
+ } else if (args.length === 2) {
64
+ return `StorageMap<${args[0]}, ${args[1]}>`;
65
+ } else if (args.length === 3) {
66
+ return `StorageDoubleMap<${args[0]}, ${args[1]}, ${args[2]}>`;
67
+ }
68
+ throw new Error('Invalid number of arguments for storage()');
60
69
  }
61
70
 
62
71
  export type DubheConfig = {
@@ -66,7 +75,6 @@ export type DubheConfig = {
66
75
  schemas: Record<string, SchemaType>;
67
76
  events?: Record<string, EventData>;
68
77
  errors?: ErrorData;
69
- dependencies: DependencyType[];
70
78
  };
71
79
 
72
80
  export type MoveType =
@@ -1,33 +1,28 @@
1
- import { findUp } from "find-up";
2
- import path from "path";
3
- import esbuild from "esbuild";
4
- import { NotInsideProjectError } from "./errors";
5
- import { rmSync } from "fs";
6
- import { pathToFileURL } from "url";
7
- import os from "os";
1
+ import { findUp } from 'find-up';
2
+ import path from 'path';
3
+ import esbuild from 'esbuild';
4
+ import { NotInsideProjectError } from './errors';
5
+ import { rmSync } from 'fs';
6
+ import { pathToFileURL } from 'url';
7
+ import os from 'os';
8
8
 
9
9
  // In order of preference files are checked
10
- const configFiles = [
11
- "dubhe.config.js",
12
- "dubhe.config.mjs",
13
- "dubhe.config.ts",
14
- "dubhe.config.mts",
15
- ];
16
- const TEMP_CONFIG = "dubhe.config.example.mjs";
10
+ const configFiles = ['dubhe.config.js', 'dubhe.config.mjs', 'dubhe.config.ts', 'dubhe.config.mts'];
11
+ const TEMP_CONFIG = 'dubhe.config.example.mjs';
17
12
 
18
13
  export async function loadConfig(configPath?: string): Promise<unknown> {
19
14
  configPath = await resolveConfigPath(configPath);
20
15
  try {
21
16
  await esbuild.build({
22
17
  entryPoints: [configPath],
23
- format: "esm",
18
+ format: 'esm',
24
19
  outfile: TEMP_CONFIG,
25
20
  // https://esbuild.github.io/getting-started/#bundling-for-node
26
- platform: "node",
21
+ platform: 'node',
27
22
  // bundle local imports (otherwise it may error, js can't import ts)
28
23
  bundle: true,
29
24
  // avoid bundling external imports (it's unnecessary and esbuild can't handle all node features)
30
- packages: "external",
25
+ packages: 'external'
31
26
  });
32
27
  configPath = await resolveConfigPath(TEMP_CONFIG, true);
33
28
  // Node.js caches dynamic imports, so without appending a cache breaking
@@ -39,10 +34,7 @@ export async function loadConfig(configPath?: string): Promise<unknown> {
39
34
  }
40
35
  }
41
36
 
42
- export async function resolveConfigPath(
43
- configPath: string | undefined,
44
- toFileURL?: boolean
45
- ) {
37
+ export async function resolveConfigPath(configPath: string | undefined, toFileURL?: boolean) {
46
38
  if (configPath === undefined) {
47
39
  configPath = await getUserConfigPath();
48
40
  } else {
@@ -54,9 +46,7 @@ export async function resolveConfigPath(
54
46
 
55
47
  // Add `file:///` for Windows support
56
48
  // (see https://github.com/nodejs/node/issues/31710)
57
- return toFileURL && os.platform() === "win32"
58
- ? pathToFileURL(configPath).href
59
- : configPath;
49
+ return toFileURL && os.platform() === 'win32' ? pathToFileURL(configPath).href : configPath;
60
50
  }
61
51
 
62
52
  async function getUserConfigPath() {
@@ -1,5 +1,4 @@
1
-
2
1
  export class NotInsideProjectError extends Error {
3
- name = "NotInsideProjectError";
4
- message = "You are not inside a Dubhe project";
5
- }
2
+ name = 'NotInsideProjectError';
3
+ message = 'You are not inside a Dubhe project';
4
+ }
@@ -1,39 +1,36 @@
1
1
  import prettier from 'prettier';
2
2
  import prettierPluginMove from 'prettier-plugin-move-js';
3
3
 
4
- export async function formatMove(
5
- content: string,
6
- prettierConfigPath?: string
7
- ): Promise<string> {
8
- let config;
9
- if (prettierConfigPath) {
10
- config = await prettier.resolveConfig(prettierConfigPath);
11
- }
12
- try {
13
- return prettier.format(content, {
14
- plugins: [prettierPluginMove],
15
- parser: 'move-parse',
16
- printWidth: 120,
17
- semi: true,
18
- tabWidth: 2,
19
- useTabs: false,
20
- bracketSpacing: true,
21
- ...config,
22
- });
23
- } catch (error) {
24
- let message;
25
- if (error instanceof Error) {
26
- message = error.message;
27
- } else {
28
- message = error;
29
- }
30
- console.log(`Error during output formatting: ${message}`);
31
- return content;
32
- }
4
+ export async function formatMove(content: string, prettierConfigPath?: string): Promise<string> {
5
+ let config;
6
+ if (prettierConfigPath) {
7
+ config = await prettier.resolveConfig(prettierConfigPath);
8
+ }
9
+ try {
10
+ return prettier.format(content, {
11
+ plugins: [prettierPluginMove],
12
+ parser: 'move-parse',
13
+ printWidth: 120,
14
+ semi: true,
15
+ tabWidth: 2,
16
+ useTabs: false,
17
+ bracketSpacing: true,
18
+ ...config
19
+ });
20
+ } catch (error) {
21
+ let message;
22
+ if (error instanceof Error) {
23
+ message = error.message;
24
+ } else {
25
+ message = error;
26
+ }
27
+ console.log(`Error during output formatting: ${message}`);
28
+ return content;
29
+ }
33
30
  }
34
31
 
35
32
  export async function formatTypescript(content: string): Promise<string> {
36
- return prettier.format(content, {
37
- parser: 'typescript',
38
- });
33
+ return prettier.format(content, {
34
+ parser: 'typescript'
35
+ });
39
36
  }