@taqueria/plugin-metadata 0.39.18 → 0.39.20
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/index.cjs +9 -0
- package/index.cjs.map +1 -1
- package/index.d.cts +2 -0
- package/index.d.ts +1 -0
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/package.json +6 -6
package/index.cjs
CHANGED
|
@@ -14,6 +14,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
14
14
|
return to;
|
|
15
15
|
};
|
|
16
16
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
17
21
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
18
22
|
mod
|
|
19
23
|
));
|
|
@@ -69,6 +73,7 @@ var createContractMetadata = async (contractName, config) => {
|
|
|
69
73
|
if (!defaultValues && config.metadata) {
|
|
70
74
|
defaultValues = {
|
|
71
75
|
...config.metadata,
|
|
76
|
+
// use the contractName instead of the projectName as the name default
|
|
72
77
|
name: contractName
|
|
73
78
|
};
|
|
74
79
|
}
|
|
@@ -112,6 +117,9 @@ var createContractMetadata = async (contractName, config) => {
|
|
|
112
117
|
message: "Enter contract license",
|
|
113
118
|
initial: (defaultValues == null ? void 0 : defaultValues.license) ?? "ISC"
|
|
114
119
|
}
|
|
120
|
+
// TODO: errors - mapping of error codes to human readable error messages
|
|
121
|
+
// TODO: views - off-chain views
|
|
122
|
+
// TODO: select optional interfaces and answer additional prompts
|
|
115
123
|
]);
|
|
116
124
|
const contractMetadata = {
|
|
117
125
|
name: response.name,
|
|
@@ -179,6 +187,7 @@ var createProjectMetadata = async (loadedConfig) => {
|
|
|
179
187
|
};
|
|
180
188
|
const updatedConfig = {
|
|
181
189
|
...import_node_sdk.Config.create(loadedConfig),
|
|
190
|
+
// config is actually LoadedConfig
|
|
182
191
|
metadata: projectMetadata
|
|
183
192
|
};
|
|
184
193
|
await (0, import_node_sdk.writeJsonFile)(loadedConfig.configFile)(updatedConfig);
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts","src/proxy.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task } from '@taqueria/node-sdk';\nimport proxy from './src/proxy';\n\nPlugin.create(() => ({\n\tschema: '0.1',\n\tversion: '0.4.0',\n\talias: 'metadata',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'generate-metadata',\n\t\t\tcommand: 'generate-metadata [contractName]',\n\t\t\tdescription: 'Create contract metadata.',\n\t\t\taliases: ['metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tpositionals: [\n\t\t\t\tPositionalArg.create({\n\t\t\t\t\tplaceholder: 'contractName',\n\t\t\t\t\tdescription: 'Which contract?',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'generate-project-metadata',\n\t\t\tcommand: 'generate-project-metadata',\n\t\t\tdescription: 'Create project metadata to be used as defaults for contracts.',\n\t\t\taliases: ['project-metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t],\n\tproxy,\n}), process.argv);\n","import {\n\tConfig,\n\tgetContracts,\n\tLoadedConfig,\n\tPluginProxyResponse,\n\tRequestArgs,\n\tsendAsyncErr,\n\tsendJsonRes,\n\tsendRes,\n\twriteJsonFile,\n} from '@taqueria/node-sdk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport prompts from 'prompts';\n\ninterface Opts extends RequestArgs.t {\n\treadonly contractName?: string;\n\treadonly task?: string;\n}\n\nconst createContractMetadata = async (\n\tcontractName: undefined | string,\n\tconfig: Config.t,\n): Promise<PluginProxyResponse> => {\n\tconst contracts = Object.keys(config.contracts ?? {}).map(x => path.basename(x, path.extname(x)));\n\n\tif (!contractName) {\n\t\tif (contracts?.length) {\n\t\t\t// Show contract options\n\t\t\t// console.log('contracts', { contracts });\n\n\t\t\tconst result = contracts.length > 1\n\t\t\t\t? await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `select`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Pick a contract`,\n\t\t\t\t\t\tchoices: contracts.map(x => ({ title: x, value: x })),\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t\t: await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `text`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Enter a contract name`,\n\t\t\t\t\t\tinitial: contracts[0],\n\t\t\t\t\t},\n\t\t\t\t]) as { contract: string };\n\n\t\t\tcontractName = result.contract;\n\t\t}\n\n\t\tif (!contractName) {\n\t\t\tthrow new Error(`contractName was not provided`);\n\t\t}\n\t}\n\n\tconst destFilePath = path.resolve(process.cwd(), `./artifacts/${contractName}.json`);\n\n\tconst loadContractMetadata = async (otherContractName: string) => {\n\t\ttry {\n\t\t\tconst otherContractFilePath = path.resolve(process.cwd(), `./artifacts/${otherContractName}.json`);\n\t\t\tconst existingContent = await fs.readFile(otherContractFilePath, { encoding: 'utf-8' });\n\t\t\treturn JSON.parse(existingContent) as Partial<typeof contractMetadata>;\n\t\t} catch (err) {\n\t\t\t// ignore missing file\n\t\t\treturn undefined;\n\t\t}\n\t};\n\n\tlet defaultValues = await loadContractMetadata(contractName);\n\tif (defaultValues) {\n\t\tconsole.log('Existing Metadata:', defaultValues);\n\t}\n\n\t// Load project metadata for defaults\n\tif (!defaultValues && config.metadata) {\n\t\t// console.log('Project Metadata:', defaultValues);\n\t\tdefaultValues = {\n\t\t\t...config.metadata,\n\t\t\t// use the contractName instead of the projectName as the name default\n\t\t\tname: contractName,\n\t\t};\n\t}\n\n\t// Load other contracts for defaults\n\tif (!defaultValues && contracts?.length) {\n\t\tconst otherContractMetadata = (await Promise.all(contracts.map(async x => await loadContractMetadata(x))))\n\t\t\t.filter(x => x).map(x => x!) ?? [];\n\t\tdefaultValues = {\n\t\t\tauthors: otherContractMetadata.map(x => x.authors).filter(x => x?.length)[0],\n\t\t\thomepage: otherContractMetadata.map(x => x.homepage).filter(x => x?.length)[0],\n\t\t\tlicense: otherContractMetadata.map(x => x.license).filter(x => x?.length)[0],\n\t\t};\n\t}\n\n\t// Basic Tzip-16 contract metadata\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter contract name`,\n\t\t\tinitial: defaultValues?.name ?? contractName,\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter contract description`,\n\t\t\tinitial: defaultValues?.description ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter contract authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter contract web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter contract license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t\t// TODO: errors - mapping of error codes to human readable error messages\n\t\t// TODO: views - off-chain views\n\t\t// TODO: select optional interfaces and answer additional prompts\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\tlicense: string;\n\t\thomepage: string;\n\t};\n\n\tconst contractMetadata = {\n\t\tname: response.name,\n\t\tversion: 'v1.0.0',\n\t\tdescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t\tinterfaces: [\n\t\t\t'TZIP-016',\n\t\t],\n\t};\n\tawait fs.writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: [\n\t\t\t{\n\t\t\t\tcontractName,\n\t\t\t},\n\t\t],\n\t};\n};\n\ntype ProjectMetadata = {\n\tname: string;\n\tprojectDescription: string;\n\tauthors: string[];\n\tlicense: string;\n\thomepage: string;\n};\nconst createProjectMetadata = async (\n\tloadedConfig: LoadedConfig.t,\n): Promise<PluginProxyResponse> => {\n\tconst defaultValues = loadedConfig.metadata;\n\n\t// Common fields from Tzip-16\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter project name`,\n\t\t\tinitial: defaultValues?.name ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter project description`,\n\t\t\tinitial: defaultValues?.projectDescription ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter project authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter project web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter project license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\thomepage: string;\n\t\tlicense: string;\n\t};\n\n\tconst projectMetadata: ProjectMetadata = {\n\t\tname: response.name,\n\t\tprojectDescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t};\n\n\tconst updatedConfig = {\n\t\t...Config.create(loadedConfig), // config is actually LoadedConfig\n\t\tmetadata: projectMetadata,\n\t};\n\tawait writeJsonFile(loadedConfig.configFile)(updatedConfig);\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: Object.entries(projectMetadata).map(([k, v]) => ({ key: k, value: v })),\n\t};\n};\n\nconst execute = async (opts: Opts): Promise<PluginProxyResponse> => {\n\tconst {\n\t\ttask,\n\t\tcontractName,\n\t\tconfig,\n\t} = opts;\n\n\tswitch (task) {\n\t\tcase 'generate-metadata':\n\t\tcase 'metadata':\n\t\t\treturn createContractMetadata(contractName, config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tcase 'project-metadata':\n\t\tcase 'generate-project-metadata':\n\t\t\treturn createProjectMetadata(config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tdefault:\n\t\t\tthrow new Error(`${task} is not an understood task by the metadata plugin`);\n\t}\n};\n\nexport default async (args: RequestArgs.t): Promise<PluginProxyResponse> => {\n\tconst opts = args as Opts;\n\n\ttry {\n\t\tconst resultRaw = await execute(opts) as Record<string, unknown>;\n\n\t\tconst USE_TEXT_OUTPUT = true;\n\t\tif (USE_TEXT_OUTPUT) {\n\t\t\tconst message = JSON.stringify(resultRaw.data, null, 2);\n\t\t\treturn sendRes(message);\n\t\t}\n\n\t\t// TODO: Fix deno parsing\n\t\t// Without this, `data.reduce is not a function`\n\t\tconst result = ('data' in resultRaw) ? resultRaw.data : resultRaw;\n\t\treturn sendJsonRes(result);\n\t} catch (err) {\n\t\tconst error = err as Error;\n\t\tif (error.message) {\n\t\t\treturn sendAsyncErr(error.message);\n\t\t}\n\t}\n};\n"],"mappings":"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","names":["import_node_sdk","path","prompts","fs"]}
|
|
1
|
+
{"version":3,"sources":["index.ts","src/proxy.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task } from '@taqueria/node-sdk';\nimport proxy from './src/proxy';\n\nPlugin.create(() => ({\n\tschema: '0.1',\n\tversion: '0.4.0',\n\talias: 'metadata',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'generate-metadata',\n\t\t\tcommand: 'generate-metadata [contractName]',\n\t\t\tdescription: 'Create contract metadata.',\n\t\t\taliases: ['metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tpositionals: [\n\t\t\t\tPositionalArg.create({\n\t\t\t\t\tplaceholder: 'contractName',\n\t\t\t\t\tdescription: 'Which contract?',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'generate-project-metadata',\n\t\t\tcommand: 'generate-project-metadata',\n\t\t\tdescription: 'Create project metadata to be used as defaults for contracts.',\n\t\t\taliases: ['project-metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t],\n\tproxy,\n}), process.argv);\n","import {\n\tConfig,\n\tgetContracts,\n\tLoadedConfig,\n\tPluginProxyResponse,\n\tRequestArgs,\n\tsendAsyncErr,\n\tsendJsonRes,\n\tsendRes,\n\twriteJsonFile,\n} from '@taqueria/node-sdk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport prompts from 'prompts';\n\ninterface Opts extends RequestArgs.t {\n\treadonly contractName?: string;\n\treadonly task?: string;\n}\n\nconst createContractMetadata = async (\n\tcontractName: undefined | string,\n\tconfig: Config.t,\n): Promise<PluginProxyResponse> => {\n\tconst contracts = Object.keys(config.contracts ?? {}).map(x => path.basename(x, path.extname(x)));\n\n\tif (!contractName) {\n\t\tif (contracts?.length) {\n\t\t\t// Show contract options\n\t\t\t// console.log('contracts', { contracts });\n\n\t\t\tconst result = contracts.length > 1\n\t\t\t\t? await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `select`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Pick a contract`,\n\t\t\t\t\t\tchoices: contracts.map(x => ({ title: x, value: x })),\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t\t: await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `text`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Enter a contract name`,\n\t\t\t\t\t\tinitial: contracts[0],\n\t\t\t\t\t},\n\t\t\t\t]) as { contract: string };\n\n\t\t\tcontractName = result.contract;\n\t\t}\n\n\t\tif (!contractName) {\n\t\t\tthrow new Error(`contractName was not provided`);\n\t\t}\n\t}\n\n\tconst destFilePath = path.resolve(process.cwd(), `./artifacts/${contractName}.json`);\n\n\tconst loadContractMetadata = async (otherContractName: string) => {\n\t\ttry {\n\t\t\tconst otherContractFilePath = path.resolve(process.cwd(), `./artifacts/${otherContractName}.json`);\n\t\t\tconst existingContent = await fs.readFile(otherContractFilePath, { encoding: 'utf-8' });\n\t\t\treturn JSON.parse(existingContent) as Partial<typeof contractMetadata>;\n\t\t} catch (err) {\n\t\t\t// ignore missing file\n\t\t\treturn undefined;\n\t\t}\n\t};\n\n\tlet defaultValues = await loadContractMetadata(contractName);\n\tif (defaultValues) {\n\t\tconsole.log('Existing Metadata:', defaultValues);\n\t}\n\n\t// Load project metadata for defaults\n\tif (!defaultValues && config.metadata) {\n\t\t// console.log('Project Metadata:', defaultValues);\n\t\tdefaultValues = {\n\t\t\t...config.metadata,\n\t\t\t// use the contractName instead of the projectName as the name default\n\t\t\tname: contractName,\n\t\t};\n\t}\n\n\t// Load other contracts for defaults\n\tif (!defaultValues && contracts?.length) {\n\t\tconst otherContractMetadata = (await Promise.all(contracts.map(async x => await loadContractMetadata(x))))\n\t\t\t.filter(x => x).map(x => x!) ?? [];\n\t\tdefaultValues = {\n\t\t\tauthors: otherContractMetadata.map(x => x.authors).filter(x => x?.length)[0],\n\t\t\thomepage: otherContractMetadata.map(x => x.homepage).filter(x => x?.length)[0],\n\t\t\tlicense: otherContractMetadata.map(x => x.license).filter(x => x?.length)[0],\n\t\t};\n\t}\n\n\t// Basic Tzip-16 contract metadata\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter contract name`,\n\t\t\tinitial: defaultValues?.name ?? contractName,\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter contract description`,\n\t\t\tinitial: defaultValues?.description ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter contract authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter contract web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter contract license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t\t// TODO: errors - mapping of error codes to human readable error messages\n\t\t// TODO: views - off-chain views\n\t\t// TODO: select optional interfaces and answer additional prompts\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\tlicense: string;\n\t\thomepage: string;\n\t};\n\n\tconst contractMetadata = {\n\t\tname: response.name,\n\t\tversion: 'v1.0.0',\n\t\tdescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t\tinterfaces: [\n\t\t\t'TZIP-016',\n\t\t],\n\t};\n\tawait fs.writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: [\n\t\t\t{\n\t\t\t\tcontractName,\n\t\t\t},\n\t\t],\n\t};\n};\n\ntype ProjectMetadata = {\n\tname: string;\n\tprojectDescription: string;\n\tauthors: string[];\n\tlicense: string;\n\thomepage: string;\n};\nconst createProjectMetadata = async (\n\tloadedConfig: LoadedConfig.t,\n): Promise<PluginProxyResponse> => {\n\tconst defaultValues = loadedConfig.metadata;\n\n\t// Common fields from Tzip-16\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter project name`,\n\t\t\tinitial: defaultValues?.name ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter project description`,\n\t\t\tinitial: defaultValues?.projectDescription ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter project authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter project web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter project license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\thomepage: string;\n\t\tlicense: string;\n\t};\n\n\tconst projectMetadata: ProjectMetadata = {\n\t\tname: response.name,\n\t\tprojectDescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t};\n\n\tconst updatedConfig = {\n\t\t...Config.create(loadedConfig), // config is actually LoadedConfig\n\t\tmetadata: projectMetadata,\n\t};\n\tawait writeJsonFile(loadedConfig.configFile)(updatedConfig);\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: Object.entries(projectMetadata).map(([k, v]) => ({ key: k, value: v })),\n\t};\n};\n\nconst execute = async (opts: Opts): Promise<PluginProxyResponse> => {\n\tconst {\n\t\ttask,\n\t\tcontractName,\n\t\tconfig,\n\t} = opts;\n\n\tswitch (task) {\n\t\tcase 'generate-metadata':\n\t\tcase 'metadata':\n\t\t\treturn createContractMetadata(contractName, config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tcase 'project-metadata':\n\t\tcase 'generate-project-metadata':\n\t\t\treturn createProjectMetadata(config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tdefault:\n\t\t\tthrow new Error(`${task} is not an understood task by the metadata plugin`);\n\t}\n};\n\nexport default async (args: RequestArgs.t): Promise<PluginProxyResponse> => {\n\tconst opts = args as Opts;\n\n\ttry {\n\t\tconst resultRaw = await execute(opts) as Record<string, unknown>;\n\n\t\tconst USE_TEXT_OUTPUT = true;\n\t\tif (USE_TEXT_OUTPUT) {\n\t\t\tconst message = JSON.stringify(resultRaw.data, null, 2);\n\t\t\treturn sendRes(message);\n\t\t}\n\n\t\t// TODO: Fix deno parsing\n\t\t// Without this, `data.reduce is not a function`\n\t\tconst result = ('data' in resultRaw) ? resultRaw.data : resultRaw;\n\t\treturn sendJsonRes(result);\n\t} catch (err) {\n\t\tconst error = err as Error;\n\t\tif (error.message) {\n\t\t\treturn sendAsyncErr(error.message);\n\t\t}\n\t}\n};\n"],"mappings":"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","names":["import_node_sdk","path","prompts","fs"]}
|
package/index.d.cts
ADDED
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -55,6 +55,7 @@ var createContractMetadata = async (contractName, config) => {
|
|
|
55
55
|
if (!defaultValues && config.metadata) {
|
|
56
56
|
defaultValues = {
|
|
57
57
|
...config.metadata,
|
|
58
|
+
// use the contractName instead of the projectName as the name default
|
|
58
59
|
name: contractName
|
|
59
60
|
};
|
|
60
61
|
}
|
|
@@ -98,6 +99,9 @@ var createContractMetadata = async (contractName, config) => {
|
|
|
98
99
|
message: "Enter contract license",
|
|
99
100
|
initial: (defaultValues == null ? void 0 : defaultValues.license) ?? "ISC"
|
|
100
101
|
}
|
|
102
|
+
// TODO: errors - mapping of error codes to human readable error messages
|
|
103
|
+
// TODO: views - off-chain views
|
|
104
|
+
// TODO: select optional interfaces and answer additional prompts
|
|
101
105
|
]);
|
|
102
106
|
const contractMetadata = {
|
|
103
107
|
name: response.name,
|
|
@@ -165,6 +169,7 @@ var createProjectMetadata = async (loadedConfig) => {
|
|
|
165
169
|
};
|
|
166
170
|
const updatedConfig = {
|
|
167
171
|
...Config.create(loadedConfig),
|
|
172
|
+
// config is actually LoadedConfig
|
|
168
173
|
metadata: projectMetadata
|
|
169
174
|
};
|
|
170
175
|
await writeJsonFile(loadedConfig.configFile)(updatedConfig);
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts","src/proxy.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task } from '@taqueria/node-sdk';\nimport proxy from './src/proxy';\n\nPlugin.create(() => ({\n\tschema: '0.1',\n\tversion: '0.4.0',\n\talias: 'metadata',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'generate-metadata',\n\t\t\tcommand: 'generate-metadata [contractName]',\n\t\t\tdescription: 'Create contract metadata.',\n\t\t\taliases: ['metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tpositionals: [\n\t\t\t\tPositionalArg.create({\n\t\t\t\t\tplaceholder: 'contractName',\n\t\t\t\t\tdescription: 'Which contract?',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'generate-project-metadata',\n\t\t\tcommand: 'generate-project-metadata',\n\t\t\tdescription: 'Create project metadata to be used as defaults for contracts.',\n\t\t\taliases: ['project-metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t],\n\tproxy,\n}), process.argv);\n","import {\n\tConfig,\n\tgetContracts,\n\tLoadedConfig,\n\tPluginProxyResponse,\n\tRequestArgs,\n\tsendAsyncErr,\n\tsendJsonRes,\n\tsendRes,\n\twriteJsonFile,\n} from '@taqueria/node-sdk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport prompts from 'prompts';\n\ninterface Opts extends RequestArgs.t {\n\treadonly contractName?: string;\n\treadonly task?: string;\n}\n\nconst createContractMetadata = async (\n\tcontractName: undefined | string,\n\tconfig: Config.t,\n): Promise<PluginProxyResponse> => {\n\tconst contracts = Object.keys(config.contracts ?? {}).map(x => path.basename(x, path.extname(x)));\n\n\tif (!contractName) {\n\t\tif (contracts?.length) {\n\t\t\t// Show contract options\n\t\t\t// console.log('contracts', { contracts });\n\n\t\t\tconst result = contracts.length > 1\n\t\t\t\t? await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `select`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Pick a contract`,\n\t\t\t\t\t\tchoices: contracts.map(x => ({ title: x, value: x })),\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t\t: await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `text`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Enter a contract name`,\n\t\t\t\t\t\tinitial: contracts[0],\n\t\t\t\t\t},\n\t\t\t\t]) as { contract: string };\n\n\t\t\tcontractName = result.contract;\n\t\t}\n\n\t\tif (!contractName) {\n\t\t\tthrow new Error(`contractName was not provided`);\n\t\t}\n\t}\n\n\tconst destFilePath = path.resolve(process.cwd(), `./artifacts/${contractName}.json`);\n\n\tconst loadContractMetadata = async (otherContractName: string) => {\n\t\ttry {\n\t\t\tconst otherContractFilePath = path.resolve(process.cwd(), `./artifacts/${otherContractName}.json`);\n\t\t\tconst existingContent = await fs.readFile(otherContractFilePath, { encoding: 'utf-8' });\n\t\t\treturn JSON.parse(existingContent) as Partial<typeof contractMetadata>;\n\t\t} catch (err) {\n\t\t\t// ignore missing file\n\t\t\treturn undefined;\n\t\t}\n\t};\n\n\tlet defaultValues = await loadContractMetadata(contractName);\n\tif (defaultValues) {\n\t\tconsole.log('Existing Metadata:', defaultValues);\n\t}\n\n\t// Load project metadata for defaults\n\tif (!defaultValues && config.metadata) {\n\t\t// console.log('Project Metadata:', defaultValues);\n\t\tdefaultValues = {\n\t\t\t...config.metadata,\n\t\t\t// use the contractName instead of the projectName as the name default\n\t\t\tname: contractName,\n\t\t};\n\t}\n\n\t// Load other contracts for defaults\n\tif (!defaultValues && contracts?.length) {\n\t\tconst otherContractMetadata = (await Promise.all(contracts.map(async x => await loadContractMetadata(x))))\n\t\t\t.filter(x => x).map(x => x!) ?? [];\n\t\tdefaultValues = {\n\t\t\tauthors: otherContractMetadata.map(x => x.authors).filter(x => x?.length)[0],\n\t\t\thomepage: otherContractMetadata.map(x => x.homepage).filter(x => x?.length)[0],\n\t\t\tlicense: otherContractMetadata.map(x => x.license).filter(x => x?.length)[0],\n\t\t};\n\t}\n\n\t// Basic Tzip-16 contract metadata\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter contract name`,\n\t\t\tinitial: defaultValues?.name ?? contractName,\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter contract description`,\n\t\t\tinitial: defaultValues?.description ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter contract authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter contract web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter contract license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t\t// TODO: errors - mapping of error codes to human readable error messages\n\t\t// TODO: views - off-chain views\n\t\t// TODO: select optional interfaces and answer additional prompts\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\tlicense: string;\n\t\thomepage: string;\n\t};\n\n\tconst contractMetadata = {\n\t\tname: response.name,\n\t\tversion: 'v1.0.0',\n\t\tdescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t\tinterfaces: [\n\t\t\t'TZIP-016',\n\t\t],\n\t};\n\tawait fs.writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: [\n\t\t\t{\n\t\t\t\tcontractName,\n\t\t\t},\n\t\t],\n\t};\n};\n\ntype ProjectMetadata = {\n\tname: string;\n\tprojectDescription: string;\n\tauthors: string[];\n\tlicense: string;\n\thomepage: string;\n};\nconst createProjectMetadata = async (\n\tloadedConfig: LoadedConfig.t,\n): Promise<PluginProxyResponse> => {\n\tconst defaultValues = loadedConfig.metadata;\n\n\t// Common fields from Tzip-16\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter project name`,\n\t\t\tinitial: defaultValues?.name ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter project description`,\n\t\t\tinitial: defaultValues?.projectDescription ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter project authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter project web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter project license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\thomepage: string;\n\t\tlicense: string;\n\t};\n\n\tconst projectMetadata: ProjectMetadata = {\n\t\tname: response.name,\n\t\tprojectDescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t};\n\n\tconst updatedConfig = {\n\t\t...Config.create(loadedConfig), // config is actually LoadedConfig\n\t\tmetadata: projectMetadata,\n\t};\n\tawait writeJsonFile(loadedConfig.configFile)(updatedConfig);\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: Object.entries(projectMetadata).map(([k, v]) => ({ key: k, value: v })),\n\t};\n};\n\nconst execute = async (opts: Opts): Promise<PluginProxyResponse> => {\n\tconst {\n\t\ttask,\n\t\tcontractName,\n\t\tconfig,\n\t} = opts;\n\n\tswitch (task) {\n\t\tcase 'generate-metadata':\n\t\tcase 'metadata':\n\t\t\treturn createContractMetadata(contractName, config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tcase 'project-metadata':\n\t\tcase 'generate-project-metadata':\n\t\t\treturn createProjectMetadata(config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tdefault:\n\t\t\tthrow new Error(`${task} is not an understood task by the metadata plugin`);\n\t}\n};\n\nexport default async (args: RequestArgs.t): Promise<PluginProxyResponse> => {\n\tconst opts = args as Opts;\n\n\ttry {\n\t\tconst resultRaw = await execute(opts) as Record<string, unknown>;\n\n\t\tconst USE_TEXT_OUTPUT = true;\n\t\tif (USE_TEXT_OUTPUT) {\n\t\t\tconst message = JSON.stringify(resultRaw.data, null, 2);\n\t\t\treturn sendRes(message);\n\t\t}\n\n\t\t// TODO: Fix deno parsing\n\t\t// Without this, `data.reduce is not a function`\n\t\tconst result = ('data' in resultRaw) ? resultRaw.data : resultRaw;\n\t\treturn sendJsonRes(result);\n\t} catch (err) {\n\t\tconst error = err as Error;\n\t\tif (error.message) {\n\t\t\treturn sendAsyncErr(error.message);\n\t\t}\n\t}\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["index.ts","src/proxy.ts"],"sourcesContent":["import { Option, Plugin, PositionalArg, Task } from '@taqueria/node-sdk';\nimport proxy from './src/proxy';\n\nPlugin.create(() => ({\n\tschema: '0.1',\n\tversion: '0.4.0',\n\talias: 'metadata',\n\ttasks: [\n\t\tTask.create({\n\t\t\ttask: 'generate-metadata',\n\t\t\tcommand: 'generate-metadata [contractName]',\n\t\t\tdescription: 'Create contract metadata.',\n\t\t\taliases: ['metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tpositionals: [\n\t\t\t\tPositionalArg.create({\n\t\t\t\t\tplaceholder: 'contractName',\n\t\t\t\t\tdescription: 'Which contract?',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t}),\n\t\t\t],\n\t\t\tencoding: 'none',\n\t\t}),\n\t\tTask.create({\n\t\t\ttask: 'generate-project-metadata',\n\t\t\tcommand: 'generate-project-metadata',\n\t\t\tdescription: 'Create project metadata to be used as defaults for contracts.',\n\t\t\taliases: ['project-metadata'],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t],\n\tproxy,\n}), process.argv);\n","import {\n\tConfig,\n\tgetContracts,\n\tLoadedConfig,\n\tPluginProxyResponse,\n\tRequestArgs,\n\tsendAsyncErr,\n\tsendJsonRes,\n\tsendRes,\n\twriteJsonFile,\n} from '@taqueria/node-sdk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport prompts from 'prompts';\n\ninterface Opts extends RequestArgs.t {\n\treadonly contractName?: string;\n\treadonly task?: string;\n}\n\nconst createContractMetadata = async (\n\tcontractName: undefined | string,\n\tconfig: Config.t,\n): Promise<PluginProxyResponse> => {\n\tconst contracts = Object.keys(config.contracts ?? {}).map(x => path.basename(x, path.extname(x)));\n\n\tif (!contractName) {\n\t\tif (contracts?.length) {\n\t\t\t// Show contract options\n\t\t\t// console.log('contracts', { contracts });\n\n\t\t\tconst result = contracts.length > 1\n\t\t\t\t? await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `select`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Pick a contract`,\n\t\t\t\t\t\tchoices: contracts.map(x => ({ title: x, value: x })),\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t\t: await prompts([\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: `text`,\n\t\t\t\t\t\tname: `contract`,\n\t\t\t\t\t\tmessage: `Enter a contract name`,\n\t\t\t\t\t\tinitial: contracts[0],\n\t\t\t\t\t},\n\t\t\t\t]) as { contract: string };\n\n\t\t\tcontractName = result.contract;\n\t\t}\n\n\t\tif (!contractName) {\n\t\t\tthrow new Error(`contractName was not provided`);\n\t\t}\n\t}\n\n\tconst destFilePath = path.resolve(process.cwd(), `./artifacts/${contractName}.json`);\n\n\tconst loadContractMetadata = async (otherContractName: string) => {\n\t\ttry {\n\t\t\tconst otherContractFilePath = path.resolve(process.cwd(), `./artifacts/${otherContractName}.json`);\n\t\t\tconst existingContent = await fs.readFile(otherContractFilePath, { encoding: 'utf-8' });\n\t\t\treturn JSON.parse(existingContent) as Partial<typeof contractMetadata>;\n\t\t} catch (err) {\n\t\t\t// ignore missing file\n\t\t\treturn undefined;\n\t\t}\n\t};\n\n\tlet defaultValues = await loadContractMetadata(contractName);\n\tif (defaultValues) {\n\t\tconsole.log('Existing Metadata:', defaultValues);\n\t}\n\n\t// Load project metadata for defaults\n\tif (!defaultValues && config.metadata) {\n\t\t// console.log('Project Metadata:', defaultValues);\n\t\tdefaultValues = {\n\t\t\t...config.metadata,\n\t\t\t// use the contractName instead of the projectName as the name default\n\t\t\tname: contractName,\n\t\t};\n\t}\n\n\t// Load other contracts for defaults\n\tif (!defaultValues && contracts?.length) {\n\t\tconst otherContractMetadata = (await Promise.all(contracts.map(async x => await loadContractMetadata(x))))\n\t\t\t.filter(x => x).map(x => x!) ?? [];\n\t\tdefaultValues = {\n\t\t\tauthors: otherContractMetadata.map(x => x.authors).filter(x => x?.length)[0],\n\t\t\thomepage: otherContractMetadata.map(x => x.homepage).filter(x => x?.length)[0],\n\t\t\tlicense: otherContractMetadata.map(x => x.license).filter(x => x?.length)[0],\n\t\t};\n\t}\n\n\t// Basic Tzip-16 contract metadata\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter contract name`,\n\t\t\tinitial: defaultValues?.name ?? contractName,\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter contract description`,\n\t\t\tinitial: defaultValues?.description ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter contract authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter contract web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter contract license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t\t// TODO: errors - mapping of error codes to human readable error messages\n\t\t// TODO: views - off-chain views\n\t\t// TODO: select optional interfaces and answer additional prompts\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\tlicense: string;\n\t\thomepage: string;\n\t};\n\n\tconst contractMetadata = {\n\t\tname: response.name,\n\t\tversion: 'v1.0.0',\n\t\tdescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t\tinterfaces: [\n\t\t\t'TZIP-016',\n\t\t],\n\t};\n\tawait fs.writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: [\n\t\t\t{\n\t\t\t\tcontractName,\n\t\t\t},\n\t\t],\n\t};\n};\n\ntype ProjectMetadata = {\n\tname: string;\n\tprojectDescription: string;\n\tauthors: string[];\n\tlicense: string;\n\thomepage: string;\n};\nconst createProjectMetadata = async (\n\tloadedConfig: LoadedConfig.t,\n): Promise<PluginProxyResponse> => {\n\tconst defaultValues = loadedConfig.metadata;\n\n\t// Common fields from Tzip-16\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `name`,\n\t\t\tmessage: `Enter project name`,\n\t\t\tinitial: defaultValues?.name ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: `text`,\n\t\t\tname: `description`,\n\t\t\tmessage: `Enter project description`,\n\t\t\tinitial: defaultValues?.projectDescription ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'list',\n\t\t\tname: 'authors',\n\t\t\tmessage: 'Enter project authors (comma separated)',\n\t\t\tinitial: defaultValues?.authors?.join(',') ?? '',\n\t\t\tseparator: ',',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'homepage',\n\t\t\tmessage: 'Enter project web url',\n\t\t\tinitial: defaultValues?.homepage ?? '',\n\t\t},\n\t\t{\n\t\t\ttype: 'text',\n\t\t\tname: 'license',\n\t\t\tmessage: 'Enter project license',\n\t\t\tinitial: defaultValues?.license ?? 'ISC',\n\t\t},\n\t]) as {\n\t\tname: string;\n\t\tdescription: string;\n\t\tauthors: string[];\n\t\thomepage: string;\n\t\tlicense: string;\n\t};\n\n\tconst projectMetadata: ProjectMetadata = {\n\t\tname: response.name,\n\t\tprojectDescription: response.description,\n\t\tauthors: response.authors,\n\t\thomepage: response.homepage,\n\t\tlicense: response.license,\n\t};\n\n\tconst updatedConfig = {\n\t\t...Config.create(loadedConfig), // config is actually LoadedConfig\n\t\tmetadata: projectMetadata,\n\t};\n\tawait writeJsonFile(loadedConfig.configFile)(updatedConfig);\n\n\treturn {\n\t\trender: 'table',\n\t\tdata: Object.entries(projectMetadata).map(([k, v]) => ({ key: k, value: v })),\n\t};\n};\n\nconst execute = async (opts: Opts): Promise<PluginProxyResponse> => {\n\tconst {\n\t\ttask,\n\t\tcontractName,\n\t\tconfig,\n\t} = opts;\n\n\tswitch (task) {\n\t\tcase 'generate-metadata':\n\t\tcase 'metadata':\n\t\t\treturn createContractMetadata(contractName, config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tcase 'project-metadata':\n\t\tcase 'generate-project-metadata':\n\t\t\treturn createProjectMetadata(config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tdefault:\n\t\t\tthrow new Error(`${task} is not an understood task by the metadata plugin`);\n\t}\n};\n\nexport default async (args: RequestArgs.t): Promise<PluginProxyResponse> => {\n\tconst opts = args as Opts;\n\n\ttry {\n\t\tconst resultRaw = await execute(opts) as Record<string, unknown>;\n\n\t\tconst USE_TEXT_OUTPUT = true;\n\t\tif (USE_TEXT_OUTPUT) {\n\t\t\tconst message = JSON.stringify(resultRaw.data, null, 2);\n\t\t\treturn sendRes(message);\n\t\t}\n\n\t\t// TODO: Fix deno parsing\n\t\t// Without this, `data.reduce is not a function`\n\t\tconst result = ('data' in resultRaw) ? resultRaw.data : resultRaw;\n\t\treturn sendJsonRes(result);\n\t} catch (err) {\n\t\tconst error = err as Error;\n\t\tif (error.message) {\n\t\t\treturn sendAsyncErr(error.message);\n\t\t}\n\t}\n};\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taqueria/plugin-metadata",
|
|
3
|
-
"version": "0.39.
|
|
3
|
+
"version": "0.39.20",
|
|
4
4
|
"description": "A plugin for Taqueria providing metadata creation and validation.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"taqueria",
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
"directory": "taqueria-plugin-metadata"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@taqueria/node-sdk": "^0.39.
|
|
35
|
-
"@taqueria/protocol": "^0.39.
|
|
34
|
+
"@taqueria/node-sdk": "^0.39.20",
|
|
35
|
+
"@taqueria/protocol": "^0.39.20",
|
|
36
36
|
"prompts": "^2.4.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/prompts": "^2.4.4",
|
|
40
|
-
"tsup": "
|
|
41
|
-
"typescript": "
|
|
40
|
+
"tsup": "^7.2.0",
|
|
41
|
+
"typescript": "^5.2.2"
|
|
42
42
|
},
|
|
43
43
|
"tsup": {
|
|
44
44
|
"entry": [
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"cjs"
|
|
57
57
|
]
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "aa19980091682210f6e1c2027ee581914b167c03"
|
|
60
60
|
}
|