@taqueria/plugin-metadata 0.27.2-alpha → 0.27.3-rc

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/README.md CHANGED
@@ -4,7 +4,7 @@ The Taqueria Metadata plugin provides an easy way to create a json file containi
4
4
 
5
5
  ## Requirements
6
6
 
7
- - Taqueria v0.24.2 or later
7
+ - Taqueria v0.26.0 or later
8
8
  - Node.js v16.17.1 or later
9
9
 
10
10
  ## Installation
package/_readme.eta CHANGED
@@ -6,7 +6,7 @@ The Taqueria Metadata plugin provides an easy way to create a json file containi
6
6
 
7
7
  ## Requirements
8
8
 
9
- - Taqueria v0.24.2 or later
9
+ - Taqueria v0.26.0 or later
10
10
  - Node.js v16.17.1 or later
11
11
 
12
12
  ## Installation
package/index.cjs ADDED
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
18
+ mod
19
+ ));
20
+
21
+ // index.ts
22
+ var import_node_sdk2 = require("@taqueria/node-sdk");
23
+
24
+ // src/proxy.ts
25
+ var import_node_sdk = require("@taqueria/node-sdk");
26
+ var import_promises = __toESM(require("fs/promises"), 1);
27
+ var import_path = __toESM(require("path"), 1);
28
+ var import_prompts = __toESM(require("prompts"), 1);
29
+ var createContractMetadata = async (contractName, config) => {
30
+ var _a;
31
+ const contracts = Object.keys(config.contracts ?? {}).map((x) => import_path.default.basename(x, import_path.default.extname(x)));
32
+ if (!contractName) {
33
+ if (contracts == null ? void 0 : contracts.length) {
34
+ const result = contracts.length > 1 ? await (0, import_prompts.default)([
35
+ {
36
+ type: `select`,
37
+ name: `contract`,
38
+ message: `Pick a contract`,
39
+ choices: contracts.map((x) => ({ title: x, value: x }))
40
+ }
41
+ ]) : await (0, import_prompts.default)([
42
+ {
43
+ type: `text`,
44
+ name: `contract`,
45
+ message: `Enter a contract name`,
46
+ initial: contracts[0]
47
+ }
48
+ ]);
49
+ contractName = result.contract;
50
+ }
51
+ if (!contractName) {
52
+ throw new Error(`contractName was not provided`);
53
+ }
54
+ }
55
+ const destFilePath = import_path.default.resolve(process.cwd(), `./artifacts/${contractName}.json`);
56
+ const loadContractMetadata = async (otherContractName) => {
57
+ try {
58
+ const otherContractFilePath = import_path.default.resolve(process.cwd(), `./artifacts/${otherContractName}.json`);
59
+ const existingContent = await import_promises.default.readFile(otherContractFilePath, { encoding: "utf-8" });
60
+ return JSON.parse(existingContent);
61
+ } catch (err) {
62
+ return void 0;
63
+ }
64
+ };
65
+ let defaultValues = await loadContractMetadata(contractName);
66
+ if (defaultValues) {
67
+ console.log("Existing Metadata:", defaultValues);
68
+ }
69
+ if (!defaultValues && config.metadata) {
70
+ defaultValues = {
71
+ ...config.metadata,
72
+ name: contractName
73
+ };
74
+ }
75
+ if (!defaultValues && (contracts == null ? void 0 : contracts.length)) {
76
+ const otherContractMetadata = (await Promise.all(contracts.map(async (x) => await loadContractMetadata(x)))).filter((x) => x).map((x) => x) ?? [];
77
+ defaultValues = {
78
+ authors: otherContractMetadata.map((x) => x.authors).filter((x) => x == null ? void 0 : x.length)[0],
79
+ homepage: otherContractMetadata.map((x) => x.homepage).filter((x) => x == null ? void 0 : x.length)[0],
80
+ license: otherContractMetadata.map((x) => x.license).filter((x) => x == null ? void 0 : x.length)[0]
81
+ };
82
+ }
83
+ const response = await (0, import_prompts.default)([
84
+ {
85
+ type: `text`,
86
+ name: `name`,
87
+ message: `Enter contract name`,
88
+ initial: (defaultValues == null ? void 0 : defaultValues.name) ?? contractName
89
+ },
90
+ {
91
+ type: `text`,
92
+ name: `description`,
93
+ message: `Enter contract description`,
94
+ initial: (defaultValues == null ? void 0 : defaultValues.description) ?? ""
95
+ },
96
+ {
97
+ type: "list",
98
+ name: "authors",
99
+ message: "Enter contract authors (comma separated)",
100
+ initial: ((_a = defaultValues == null ? void 0 : defaultValues.authors) == null ? void 0 : _a.join(",")) ?? "",
101
+ separator: ","
102
+ },
103
+ {
104
+ type: "text",
105
+ name: "homepage",
106
+ message: "Enter contract web url",
107
+ initial: (defaultValues == null ? void 0 : defaultValues.homepage) ?? ""
108
+ },
109
+ {
110
+ type: "text",
111
+ name: "license",
112
+ message: "Enter contract license",
113
+ initial: (defaultValues == null ? void 0 : defaultValues.license) ?? "ISC"
114
+ }
115
+ ]);
116
+ const contractMetadata = {
117
+ name: response.name,
118
+ version: "v1.0.0",
119
+ description: response.description,
120
+ authors: response.authors,
121
+ homepage: response.homepage,
122
+ license: response.license,
123
+ interfaces: [
124
+ "TZIP-016"
125
+ ]
126
+ };
127
+ await import_promises.default.writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));
128
+ return {
129
+ render: "table",
130
+ data: [
131
+ {
132
+ contractName
133
+ }
134
+ ]
135
+ };
136
+ };
137
+ var createProjectMetadata = async (loadedConfig) => {
138
+ var _a;
139
+ const defaultValues = loadedConfig.metadata;
140
+ const response = await (0, import_prompts.default)([
141
+ {
142
+ type: `text`,
143
+ name: `name`,
144
+ message: `Enter project name`,
145
+ initial: (defaultValues == null ? void 0 : defaultValues.name) ?? ""
146
+ },
147
+ {
148
+ type: `text`,
149
+ name: `description`,
150
+ message: `Enter project description`,
151
+ initial: (defaultValues == null ? void 0 : defaultValues.projectDescription) ?? ""
152
+ },
153
+ {
154
+ type: "list",
155
+ name: "authors",
156
+ message: "Enter project authors (comma separated)",
157
+ initial: ((_a = defaultValues == null ? void 0 : defaultValues.authors) == null ? void 0 : _a.join(",")) ?? "",
158
+ separator: ","
159
+ },
160
+ {
161
+ type: "text",
162
+ name: "homepage",
163
+ message: "Enter project web url",
164
+ initial: (defaultValues == null ? void 0 : defaultValues.homepage) ?? ""
165
+ },
166
+ {
167
+ type: "text",
168
+ name: "license",
169
+ message: "Enter project license",
170
+ initial: (defaultValues == null ? void 0 : defaultValues.license) ?? "ISC"
171
+ }
172
+ ]);
173
+ const projectMetadata = {
174
+ name: response.name,
175
+ projectDescription: response.description,
176
+ authors: response.authors,
177
+ homepage: response.homepage,
178
+ license: response.license
179
+ };
180
+ const updatedConfig = {
181
+ ...import_node_sdk.Config.create(loadedConfig),
182
+ metadata: projectMetadata
183
+ };
184
+ await (0, import_node_sdk.writeJsonFile)(loadedConfig.configFile)(updatedConfig);
185
+ return {
186
+ render: "table",
187
+ data: Object.entries(projectMetadata).map(([k, v]) => ({ key: k, value: v }))
188
+ };
189
+ };
190
+ var execute = async (opts) => {
191
+ const {
192
+ task,
193
+ contractName,
194
+ config
195
+ } = opts;
196
+ switch (task) {
197
+ case "generate-metadata":
198
+ case "metadata":
199
+ return createContractMetadata(contractName, config);
200
+ case "project-metadata":
201
+ case "generate-project-metadata":
202
+ return createProjectMetadata(config);
203
+ default:
204
+ throw new Error(`${task} is not an understood task by the metadata plugin`);
205
+ }
206
+ };
207
+ var proxy_default = async (args) => {
208
+ const opts = args;
209
+ try {
210
+ const resultRaw = await execute(opts);
211
+ const USE_TEXT_OUTPUT = true;
212
+ if (USE_TEXT_OUTPUT) {
213
+ const message = JSON.stringify(resultRaw.data, null, 2);
214
+ return (0, import_node_sdk.sendRes)(message);
215
+ }
216
+ const result = "data" in resultRaw ? resultRaw.data : resultRaw;
217
+ return (0, import_node_sdk.sendJsonRes)(result);
218
+ } catch (err) {
219
+ const error = err;
220
+ if (error.message) {
221
+ return (0, import_node_sdk.sendAsyncErr)(error.message);
222
+ }
223
+ }
224
+ };
225
+
226
+ // index.ts
227
+ import_node_sdk2.Plugin.create(() => ({
228
+ schema: "0.1",
229
+ version: "0.4.0",
230
+ alias: "metadata",
231
+ tasks: [
232
+ import_node_sdk2.Task.create({
233
+ task: "generate-metadata",
234
+ command: "generate-metadata [contractName]",
235
+ description: "Create contract metadata.",
236
+ aliases: ["metadata"],
237
+ handler: "proxy",
238
+ positionals: [
239
+ import_node_sdk2.PositionalArg.create({
240
+ placeholder: "contractName",
241
+ description: "Which contract?",
242
+ type: "string"
243
+ })
244
+ ],
245
+ encoding: "none"
246
+ }),
247
+ import_node_sdk2.Task.create({
248
+ task: "generate-project-metadata",
249
+ command: "generate-project-metadata",
250
+ description: "Create project metadata to be used as defaults for contracts.",
251
+ aliases: ["project-metadata"],
252
+ handler: "proxy",
253
+ encoding: "none"
254
+ })
255
+ ],
256
+ proxy: proxy_default
257
+ }), process.argv);
258
+ //# sourceMappingURL=index.cjs.map
package/index.cjs.map ADDED
@@ -0,0 +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"]}
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+
package/index.js CHANGED
@@ -1,248 +1,244 @@
1
- import {Plugin as $8CNkB$Plugin, Task as $8CNkB$Task, PositionalArg as $8CNkB$PositionalArg, writeJsonFile as $8CNkB$writeJsonFile, sendRes as $8CNkB$sendRes, sendJsonRes as $8CNkB$sendJsonRes, sendAsyncErr as $8CNkB$sendAsyncErr} from "@taqueria/node-sdk";
2
- import $8CNkB$fspromises from "fs/promises";
3
- import $8CNkB$path from "path";
4
- import $8CNkB$prompts from "prompts";
1
+ // index.ts
2
+ import { Plugin, PositionalArg, Task } from "@taqueria/node-sdk";
5
3
 
6
-
7
-
8
-
9
-
10
-
11
- const $b297f5d0aa12bc82$var$createContractMetadata = async (contractName, config)=>{
12
- const contracts = Object.keys(config.contracts ?? {}).map((x)=>(0, $8CNkB$path).basename(x, (0, $8CNkB$path).extname(x)));
13
- if (!contractName) {
14
- if (contracts?.length) {
15
- // Show contract options
16
- // console.log('contracts', { contracts });
17
- const result = contracts.length > 1 ? await (0, $8CNkB$prompts)([
18
- {
19
- type: `select`,
20
- name: `contract`,
21
- message: `Pick a contract`,
22
- choices: contracts.map((x)=>({
23
- title: x,
24
- value: x
25
- }))
26
- }
27
- ]) : await (0, $8CNkB$prompts)([
28
- {
29
- type: `text`,
30
- name: `contract`,
31
- message: `Enter a contract name`,
32
- initial: contracts[0]
33
- }
34
- ]);
35
- contractName = result.contract;
36
- }
37
- if (!contractName) throw new Error(`contractName was not provided`);
38
- }
39
- const destFilePath = (0, $8CNkB$path).resolve(process.cwd(), `./artifacts/${contractName}.json`);
40
- const loadContractMetadata = async (otherContractName)=>{
41
- try {
42
- const otherContractFilePath = (0, $8CNkB$path).resolve(process.cwd(), `./artifacts/${otherContractName}.json`);
43
- const existingContent = await (0, $8CNkB$fspromises).readFile(otherContractFilePath, {
44
- encoding: "utf-8"
45
- });
46
- return JSON.parse(existingContent);
47
- } catch (err) {
48
- // ignore missing file
49
- return undefined;
50
- }
51
- };
52
- let defaultValues = await loadContractMetadata(contractName);
53
- if (defaultValues) console.log("Existing Metadata:", defaultValues);
54
- // Load project metadata for defaults
55
- if (!defaultValues && config.metadata) // console.log('Project Metadata:', defaultValues);
56
- defaultValues = {
57
- ...config.metadata,
58
- // use the contractName instead of the projectName as the name default
59
- name: contractName
60
- };
61
- // Load other contracts for defaults
62
- if (!defaultValues && contracts?.length) {
63
- const otherContractMetadata = (await Promise.all(contracts.map(async (x)=>await loadContractMetadata(x)))).filter((x)=>x).map((x)=>x) ?? [];
64
- defaultValues = {
65
- authors: otherContractMetadata.map((x)=>x.authors).filter((x)=>x?.length)[0],
66
- homepage: otherContractMetadata.map((x)=>x.homepage).filter((x)=>x?.length)[0],
67
- license: otherContractMetadata.map((x)=>x.license).filter((x)=>x?.length)[0]
68
- };
69
- }
70
- // Basic Tzip-16 contract metadata
71
- const response = await (0, $8CNkB$prompts)([
72
- {
73
- type: `text`,
74
- name: `name`,
75
- message: `Enter contract name`,
76
- initial: defaultValues?.name ?? contractName
77
- },
78
- {
79
- type: `text`,
80
- name: `description`,
81
- message: `Enter contract description`,
82
- initial: defaultValues?.description ?? ""
83
- },
84
- {
85
- type: "list",
86
- name: "authors",
87
- message: "Enter contract authors (comma separated)",
88
- initial: defaultValues?.authors?.join(",") ?? "",
89
- separator: ","
90
- },
4
+ // src/proxy.ts
5
+ import {
6
+ Config,
7
+ sendAsyncErr,
8
+ sendJsonRes,
9
+ sendRes,
10
+ writeJsonFile
11
+ } from "@taqueria/node-sdk";
12
+ import fs from "fs/promises";
13
+ import path from "path";
14
+ import prompts from "prompts";
15
+ var createContractMetadata = async (contractName, config) => {
16
+ var _a;
17
+ const contracts = Object.keys(config.contracts ?? {}).map((x) => path.basename(x, path.extname(x)));
18
+ if (!contractName) {
19
+ if (contracts == null ? void 0 : contracts.length) {
20
+ const result = contracts.length > 1 ? await prompts([
91
21
  {
92
- type: "text",
93
- name: "homepage",
94
- message: "Enter contract web url",
95
- initial: defaultValues?.homepage ?? ""
96
- },
97
- {
98
- type: "text",
99
- name: "license",
100
- message: "Enter contract license",
101
- initial: defaultValues?.license ?? "ISC"
22
+ type: `select`,
23
+ name: `contract`,
24
+ message: `Pick a contract`,
25
+ choices: contracts.map((x) => ({ title: x, value: x }))
102
26
  }
103
- ]);
104
- const contractMetadata = {
105
- name: response.name,
106
- version: "v1.0.0",
107
- description: response.description,
108
- authors: response.authors,
109
- homepage: response.homepage,
110
- license: response.license,
111
- interfaces: [
112
- "TZIP-016"
113
- ]
114
- };
115
- await (0, $8CNkB$fspromises).writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));
116
- return {
117
- render: "table",
118
- data: [
119
- {
120
- contractName: contractName
121
- }
122
- ]
123
- };
124
- };
125
- const $b297f5d0aa12bc82$var$createProjectMetadata = async (config)=>{
126
- const defaultValues = config.metadata;
127
- // Common fields from Tzip-16
128
- const response = await (0, $8CNkB$prompts)([
129
- {
130
- type: `text`,
131
- name: `name`,
132
- message: `Enter project name`,
133
- initial: defaultValues?.name ?? ""
134
- },
27
+ ]) : await prompts([
135
28
  {
136
- type: `text`,
137
- name: `description`,
138
- message: `Enter project description`,
139
- initial: defaultValues?.projectDescription ?? ""
140
- },
141
- {
142
- type: "list",
143
- name: "authors",
144
- message: "Enter project authors (comma separated)",
145
- initial: defaultValues?.authors?.join(",") ?? "",
146
- separator: ","
147
- },
148
- {
149
- type: "text",
150
- name: "homepage",
151
- message: "Enter project web url",
152
- initial: defaultValues?.homepage ?? ""
153
- },
154
- {
155
- type: "text",
156
- name: "license",
157
- message: "Enter project license",
158
- initial: defaultValues?.license ?? "ISC"
29
+ type: `text`,
30
+ name: `contract`,
31
+ message: `Enter a contract name`,
32
+ initial: contracts[0]
159
33
  }
160
- ]);
161
- const projectMetadata = {
162
- name: response.name,
163
- projectDescription: response.description,
164
- authors: response.authors,
165
- homepage: response.homepage,
166
- license: response.license
167
- };
168
- const updatedConfig = {
169
- ...config,
170
- metadata: projectMetadata
34
+ ]);
35
+ contractName = result.contract;
36
+ }
37
+ if (!contractName) {
38
+ throw new Error(`contractName was not provided`);
39
+ }
40
+ }
41
+ const destFilePath = path.resolve(process.cwd(), `./artifacts/${contractName}.json`);
42
+ const loadContractMetadata = async (otherContractName) => {
43
+ try {
44
+ const otherContractFilePath = path.resolve(process.cwd(), `./artifacts/${otherContractName}.json`);
45
+ const existingContent = await fs.readFile(otherContractFilePath, { encoding: "utf-8" });
46
+ return JSON.parse(existingContent);
47
+ } catch (err) {
48
+ return void 0;
49
+ }
50
+ };
51
+ let defaultValues = await loadContractMetadata(contractName);
52
+ if (defaultValues) {
53
+ console.log("Existing Metadata:", defaultValues);
54
+ }
55
+ if (!defaultValues && config.metadata) {
56
+ defaultValues = {
57
+ ...config.metadata,
58
+ name: contractName
171
59
  };
172
- await (0, $8CNkB$writeJsonFile)(config.configFile)(updatedConfig);
173
- return {
174
- render: "table",
175
- data: Object.entries(projectMetadata).map(([k, v])=>({
176
- key: k,
177
- value: v
178
- }))
60
+ }
61
+ if (!defaultValues && (contracts == null ? void 0 : contracts.length)) {
62
+ const otherContractMetadata = (await Promise.all(contracts.map(async (x) => await loadContractMetadata(x)))).filter((x) => x).map((x) => x) ?? [];
63
+ defaultValues = {
64
+ authors: otherContractMetadata.map((x) => x.authors).filter((x) => x == null ? void 0 : x.length)[0],
65
+ homepage: otherContractMetadata.map((x) => x.homepage).filter((x) => x == null ? void 0 : x.length)[0],
66
+ license: otherContractMetadata.map((x) => x.license).filter((x) => x == null ? void 0 : x.length)[0]
179
67
  };
68
+ }
69
+ const response = await prompts([
70
+ {
71
+ type: `text`,
72
+ name: `name`,
73
+ message: `Enter contract name`,
74
+ initial: (defaultValues == null ? void 0 : defaultValues.name) ?? contractName
75
+ },
76
+ {
77
+ type: `text`,
78
+ name: `description`,
79
+ message: `Enter contract description`,
80
+ initial: (defaultValues == null ? void 0 : defaultValues.description) ?? ""
81
+ },
82
+ {
83
+ type: "list",
84
+ name: "authors",
85
+ message: "Enter contract authors (comma separated)",
86
+ initial: ((_a = defaultValues == null ? void 0 : defaultValues.authors) == null ? void 0 : _a.join(",")) ?? "",
87
+ separator: ","
88
+ },
89
+ {
90
+ type: "text",
91
+ name: "homepage",
92
+ message: "Enter contract web url",
93
+ initial: (defaultValues == null ? void 0 : defaultValues.homepage) ?? ""
94
+ },
95
+ {
96
+ type: "text",
97
+ name: "license",
98
+ message: "Enter contract license",
99
+ initial: (defaultValues == null ? void 0 : defaultValues.license) ?? "ISC"
100
+ }
101
+ ]);
102
+ const contractMetadata = {
103
+ name: response.name,
104
+ version: "v1.0.0",
105
+ description: response.description,
106
+ authors: response.authors,
107
+ homepage: response.homepage,
108
+ license: response.license,
109
+ interfaces: [
110
+ "TZIP-016"
111
+ ]
112
+ };
113
+ await fs.writeFile(destFilePath, JSON.stringify(contractMetadata, null, 2));
114
+ return {
115
+ render: "table",
116
+ data: [
117
+ {
118
+ contractName
119
+ }
120
+ ]
121
+ };
180
122
  };
181
- const $b297f5d0aa12bc82$var$execute = async (opts)=>{
182
- const { task: task , contractName: contractName , config: config } = opts;
183
- // TAQ BUG: If both tasks start with 'generate' then 'project-metadata' is always selected
184
- // WORKAROUND: If the 2nd command is changed to generate-project-metadata, it works as expected
185
- // console.log('execute', { task, contractName, metadata: config.metadata });
186
- switch(task){
187
- case "metadata":
188
- return $b297f5d0aa12bc82$var$createContractMetadata(contractName, config);
189
- case "project-metadata":
190
- return $b297f5d0aa12bc82$var$createProjectMetadata(config);
191
- default:
192
- throw new Error(`${task} is not an understood task by the metadata plugin`);
123
+ var createProjectMetadata = async (loadedConfig) => {
124
+ var _a;
125
+ const defaultValues = loadedConfig.metadata;
126
+ const response = await prompts([
127
+ {
128
+ type: `text`,
129
+ name: `name`,
130
+ message: `Enter project name`,
131
+ initial: (defaultValues == null ? void 0 : defaultValues.name) ?? ""
132
+ },
133
+ {
134
+ type: `text`,
135
+ name: `description`,
136
+ message: `Enter project description`,
137
+ initial: (defaultValues == null ? void 0 : defaultValues.projectDescription) ?? ""
138
+ },
139
+ {
140
+ type: "list",
141
+ name: "authors",
142
+ message: "Enter project authors (comma separated)",
143
+ initial: ((_a = defaultValues == null ? void 0 : defaultValues.authors) == null ? void 0 : _a.join(",")) ?? "",
144
+ separator: ","
145
+ },
146
+ {
147
+ type: "text",
148
+ name: "homepage",
149
+ message: "Enter project web url",
150
+ initial: (defaultValues == null ? void 0 : defaultValues.homepage) ?? ""
151
+ },
152
+ {
153
+ type: "text",
154
+ name: "license",
155
+ message: "Enter project license",
156
+ initial: (defaultValues == null ? void 0 : defaultValues.license) ?? "ISC"
193
157
  }
158
+ ]);
159
+ const projectMetadata = {
160
+ name: response.name,
161
+ projectDescription: response.description,
162
+ authors: response.authors,
163
+ homepage: response.homepage,
164
+ license: response.license
165
+ };
166
+ const updatedConfig = {
167
+ ...Config.create(loadedConfig),
168
+ metadata: projectMetadata
169
+ };
170
+ await writeJsonFile(loadedConfig.configFile)(updatedConfig);
171
+ return {
172
+ render: "table",
173
+ data: Object.entries(projectMetadata).map(([k, v]) => ({ key: k, value: v }))
174
+ };
194
175
  };
195
- var $b297f5d0aa12bc82$export$2e2bcd8739ae039 = async (args)=>{
196
- const opts = args;
197
- try {
198
- const resultRaw = await $b297f5d0aa12bc82$var$execute(opts);
199
- const USE_TEXT_OUTPUT = true;
200
- if (USE_TEXT_OUTPUT) {
201
- const message = JSON.stringify(resultRaw.data, null, 2);
202
- return (0, $8CNkB$sendRes)(message);
203
- }
204
- // TODO: Fix deno parsing
205
- // Without this, `data.reduce is not a function`
206
- const result = "data" in resultRaw ? resultRaw.data : resultRaw;
207
- return (0, $8CNkB$sendJsonRes)(result);
208
- } catch (err) {
209
- const error = err;
210
- if (error.message) return (0, $8CNkB$sendAsyncErr)(error.message);
176
+ var execute = async (opts) => {
177
+ const {
178
+ task,
179
+ contractName,
180
+ config
181
+ } = opts;
182
+ switch (task) {
183
+ case "generate-metadata":
184
+ case "metadata":
185
+ return createContractMetadata(contractName, config);
186
+ case "project-metadata":
187
+ case "generate-project-metadata":
188
+ return createProjectMetadata(config);
189
+ default:
190
+ throw new Error(`${task} is not an understood task by the metadata plugin`);
191
+ }
192
+ };
193
+ var proxy_default = async (args) => {
194
+ const opts = args;
195
+ try {
196
+ const resultRaw = await execute(opts);
197
+ const USE_TEXT_OUTPUT = true;
198
+ if (USE_TEXT_OUTPUT) {
199
+ const message = JSON.stringify(resultRaw.data, null, 2);
200
+ return sendRes(message);
201
+ }
202
+ const result = "data" in resultRaw ? resultRaw.data : resultRaw;
203
+ return sendJsonRes(result);
204
+ } catch (err) {
205
+ const error = err;
206
+ if (error.message) {
207
+ return sendAsyncErr(error.message);
211
208
  }
209
+ }
212
210
  };
213
211
 
214
-
215
- (0, $8CNkB$Plugin).create(()=>({
216
- schema: "0.1",
217
- version: "0.4.0",
218
- alias: "metadata",
219
- tasks: [
220
- (0, $8CNkB$Task).create({
221
- task: "metadata",
222
- command: "generate-metadata [contractName]",
223
- description: "Create contract metadata.",
224
- aliases: [],
225
- handler: "proxy",
226
- positionals: [
227
- (0, $8CNkB$PositionalArg).create({
228
- placeholder: "contractName",
229
- description: "Which contract?",
230
- type: "string"
231
- })
232
- ],
233
- encoding: "none"
234
- }),
235
- (0, $8CNkB$Task).create({
236
- task: "project-metadata",
237
- command: "generate-project-metadata",
238
- description: "Create project metadata to be used as defaults for contracts.",
239
- aliases: [],
240
- handler: "proxy",
241
- encoding: "none"
242
- })
243
- ],
244
- proxy: $b297f5d0aa12bc82$export$2e2bcd8739ae039
245
- }), process.argv);
246
-
247
-
248
- //# sourceMappingURL=index.js.map
212
+ // index.ts
213
+ Plugin.create(() => ({
214
+ schema: "0.1",
215
+ version: "0.4.0",
216
+ alias: "metadata",
217
+ tasks: [
218
+ Task.create({
219
+ task: "generate-metadata",
220
+ command: "generate-metadata [contractName]",
221
+ description: "Create contract metadata.",
222
+ aliases: ["metadata"],
223
+ handler: "proxy",
224
+ positionals: [
225
+ PositionalArg.create({
226
+ placeholder: "contractName",
227
+ description: "Which contract?",
228
+ type: "string"
229
+ })
230
+ ],
231
+ encoding: "none"
232
+ }),
233
+ Task.create({
234
+ task: "generate-project-metadata",
235
+ command: "generate-project-metadata",
236
+ description: "Create project metadata to be used as defaults for contracts.",
237
+ aliases: ["project-metadata"],
238
+ handler: "proxy",
239
+ encoding: "none"
240
+ })
241
+ ],
242
+ proxy: proxy_default
243
+ }), process.argv);
244
+ //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":";;;;;AAAA;ACAA;;;;AAmBA,MAAM,+CAAyB,OAC9B,cACA,SACkC;IAClC,MAAM,YAAY,OAAO,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA,IAAK,CAAA,GAAA,WAAI,AAAD,EAAE,QAAQ,CAAC,GAAG,CAAA,GAAA,WAAI,AAAD,EAAE,OAAO,CAAC;IAE7F,IAAI,CAAC,cAAc;QAClB,IAAI,WAAW,QAAQ;YACtB,wBAAwB;YACxB,2CAA2C;YAE3C,MAAM,SAAS,UAAU,MAAM,GAAG,IAC/B,MAAM,CAAA,GAAA,cAAO,AAAD,EAAE;gBACf;oBACC,MAAM,CAAC,MAAM,CAAC;oBACd,MAAM,CAAC,QAAQ,CAAC;oBAChB,SAAS,CAAC,eAAe,CAAC;oBAC1B,SAAS,UAAU,GAAG,CAAC,CAAA,IAAM,CAAA;4BAAE,OAAO;4BAAG,OAAO;wBAAE,CAAA;gBACnD;aACA,IACC,MAAM,CAAA,GAAA,cAAM,EAAE;gBACf;oBACC,MAAM,CAAC,IAAI,CAAC;oBACZ,MAAM,CAAC,QAAQ,CAAC;oBAChB,SAAS,CAAC,qBAAqB,CAAC;oBAChC,SAAS,SAAS,CAAC,EAAE;gBACtB;aACA,CAAyB;YAE3B,eAAe,OAAO,QAAQ;QAC/B,CAAC;QAED,IAAI,CAAC,cACJ,MAAM,IAAI,MAAM,CAAC,6BAA6B,CAAC,EAAE;IAEnD,CAAC;IAED,MAAM,eAAe,CAAA,GAAA,WAAG,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,KAAK,CAAC;IAEnF,MAAM,uBAAuB,OAAO,oBAA8B;QACjE,IAAI;YACH,MAAM,wBAAwB,CAAA,GAAA,WAAG,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,kBAAkB,KAAK,CAAC;YACjG,MAAM,kBAAkB,MAAM,CAAA,GAAA,iBAAE,AAAD,EAAE,QAAQ,CAAC,uBAAuB;gBAAE,UAAU;YAAQ;YACrF,OAAO,KAAK,KAAK,CAAC;QACnB,EAAE,OAAO,KAAK;YACb,sBAAsB;YACtB,OAAO;QACR;IACD;IAEA,IAAI,gBAAgB,MAAM,qBAAqB;IAC/C,IAAI,eACH,QAAQ,GAAG,CAAC,sBAAsB;IAGnC,qCAAqC;IACrC,IAAI,CAAC,iBAAiB,OAAO,QAAQ,EACpC,mDAAmD;IACnD,gBAAgB;QACf,GAAG,OAAO,QAAQ;QAClB,sEAAsE;QACtE,MAAM;IACP;IAGD,oCAAoC;IACpC,IAAI,CAAC,iBAAiB,WAAW,QAAQ;QACxC,MAAM,wBAAwB,AAAC,CAAA,MAAM,QAAQ,GAAG,CAAC,UAAU,GAAG,CAAC,OAAM,IAAK,MAAM,qBAAqB,IAAG,EACtG,MAAM,CAAC,CAAA,IAAK,GAAG,GAAG,CAAC,CAAA,IAAK,MAAO,EAAE;QACnC,gBAAgB;YACf,SAAS,sBAAsB,GAAG,CAAC,CAAA,IAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA,IAAK,GAAG,OAAO,CAAC,EAAE;YAC5E,UAAU,sBAAsB,GAAG,CAAC,CAAA,IAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA,IAAK,GAAG,OAAO,CAAC,EAAE;YAC9E,SAAS,sBAAsB,GAAG,CAAC,CAAA,IAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA,IAAK,GAAG,OAAO,CAAC,EAAE;QAC7E;IACD,CAAC;IAED,kCAAkC;IAClC,MAAM,WAAW,MAAM,CAAA,GAAA,cAAM,EAAE;QAC9B;YACC,MAAM,CAAC,IAAI,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC;YACZ,SAAS,CAAC,mBAAmB,CAAC;YAC9B,SAAS,eAAe,QAAQ;QACjC;QACA;YACC,MAAM,CAAC,IAAI,CAAC;YACZ,MAAM,CAAC,WAAW,CAAC;YACnB,SAAS,CAAC,0BAA0B,CAAC;YACrC,SAAS,eAAe,eAAe;QACxC;QACA;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,eAAe,SAAS,KAAK,QAAQ;YAC9C,WAAW;QACZ;QACA;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,eAAe,YAAY;QACrC;QACA;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,eAAe,WAAW;QACpC;KAIA;IAQD,MAAM,mBAAmB;QACxB,MAAM,SAAS,IAAI;QACnB,SAAS;QACT,aAAa,SAAS,WAAW;QACjC,SAAS,SAAS,OAAO;QACzB,UAAU,SAAS,QAAQ;QAC3B,SAAS,SAAS,OAAO;QACzB,YAAY;YACX;SACA;IACF;IACA,MAAM,CAAA,GAAA,iBAAE,AAAD,EAAE,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,kBAAkB,IAAI,EAAE;IAExE,OAAO;QACN,QAAQ;QACR,MAAM;YACL;8BACC;YACD;SACA;IACF;AACD;AASA,MAAM,8CAAwB,OAC7B,SACkC;IAClC,MAAM,gBAAgB,OAAO,QAAQ;IAErC,6BAA6B;IAC7B,MAAM,WAAW,MAAM,CAAA,GAAA,cAAM,EAAE;QAC9B;YACC,MAAM,CAAC,IAAI,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC;YACZ,SAAS,CAAC,kBAAkB,CAAC;YAC7B,SAAS,eAAe,QAAQ;QACjC;QACA;YACC,MAAM,CAAC,IAAI,CAAC;YACZ,MAAM,CAAC,WAAW,CAAC;YACnB,SAAS,CAAC,yBAAyB,CAAC;YACpC,SAAS,eAAe,sBAAsB;QAC/C;QACA;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,eAAe,SAAS,KAAK,QAAQ;YAC9C,WAAW;QACZ;QACA;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,eAAe,YAAY;QACrC;QACA;YACC,MAAM;YACN,MAAM;YACN,SAAS;YACT,SAAS,eAAe,WAAW;QACpC;KACA;IAQD,MAAM,kBAAmC;QACxC,MAAM,SAAS,IAAI;QACnB,oBAAoB,SAAS,WAAW;QACxC,SAAS,SAAS,OAAO;QACzB,UAAU,SAAS,QAAQ;QAC3B,SAAS,SAAS,OAAO;IAC1B;IAEA,MAAM,gBAAgB;QACrB,GAAG,MAAM;QACT,UAAU;IACX;IACA,MAAM,CAAA,GAAA,oBAAY,EAAE,OAAO,UAAU,EAAE;IAEvC,OAAO;QACN,QAAQ;QACR,MAAM,OAAO,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAM,CAAA;gBAAE,KAAK;gBAAG,OAAO;YAAE,CAAA;IAC3E;AACD;AAEA,MAAM,gCAAU,OAAO,OAA6C;IACnE,MAAM,QACL,KAAI,gBACJ,aAAY,UACZ,OAAM,EACN,GAAG;IAEJ,0FAA0F;IAC1F,+FAA+F;IAC/F,6EAA6E;IAE7E,OAAQ;QACP,KAAK;YACJ,OAAO,6CAAuB,cAAc;QAC7C,KAAK;YACJ,OAAO,4CAAsB;QAC9B;YACC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,iDAAiD,CAAC,EAAE;IAC9E;AACD;IAEA,2CAAe,OAAO,OAAsD;IAC3E,MAAM,OAAO;IAEb,IAAI;QACH,MAAM,YAAY,MAAM,8BAAQ;QAEhC,MAAM,kBAAkB,IAAI;QAC5B,IAAI,iBAAiB;YACpB,MAAM,UAAU,KAAK,SAAS,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE;YACrD,OAAO,CAAA,GAAA,cAAM,EAAE;QAChB,CAAC;QAED,yBAAyB;QACzB,gDAAgD;QAChD,MAAM,SAAS,AAAC,UAAU,YAAa,UAAU,IAAI,GAAG,SAAS;QACjE,OAAO,CAAA,GAAA,kBAAU,EAAE;IACpB,EAAE,OAAO,KAAK;QACb,MAAM,QAAQ;QACd,IAAI,MAAM,OAAO,EAChB,OAAO,CAAA,GAAA,mBAAY,AAAD,EAAE,MAAM,OAAO;IAEnC;AACD;;;ADnRA,CAAA,GAAA,aAAK,EAAE,MAAM,CAAC,IAAO,CAAA;QACpB,QAAQ;QACR,SAAS;QACT,OAAO;QACP,OAAO;YACN,CAAA,GAAA,WAAG,EAAE,MAAM,CAAC;gBACX,MAAM;gBACN,SAAS;gBACT,aAAa;gBACb,SAAS,EAAE;gBACX,SAAS;gBACT,aAAa;oBACZ,CAAA,GAAA,oBAAY,EAAE,MAAM,CAAC;wBACpB,aAAa;wBACb,aAAa;wBACb,MAAM;oBACP;iBACA;gBACD,UAAU;YACX;YACA,CAAA,GAAA,WAAG,EAAE,MAAM,CAAC;gBACX,MAAM;gBACN,SAAS;gBACT,aAAa;gBACb,SAAS,EAAE;gBACX,SAAS;gBACT,UAAU;YACX;SACA;eACD;IACD,CAAA,GAAI,QAAQ,IAAI","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: 'metadata',\n\t\t\tcommand: 'generate-metadata [contractName]',\n\t\t\tdescription: 'Create contract metadata.',\n\t\t\taliases: [],\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: '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: [],\n\t\t\thandler: 'proxy',\n\t\t\tencoding: 'none',\n\t\t}),\n\t],\n\tproxy,\n}), process.argv);\n","import {\n\tgetContracts,\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}\ntype Config = Opts['config'];\n\nconst createContractMetadata = async (\n\tcontractName: undefined | string,\n\tconfig: Config,\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\tconfig: Config,\n): Promise<PluginProxyResponse> => {\n\tconst defaultValues = config.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,\n\t\tmetadata: projectMetadata,\n\t};\n\tawait writeJsonFile(config.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\t// TAQ BUG: If both tasks start with 'generate' then 'project-metadata' is always selected\n\t// WORKAROUND: If the 2nd command is changed to generate-project-metadata, it works as expected\n\t// console.log('execute', { task, contractName, metadata: config.metadata });\n\n\tswitch (task) {\n\t\tcase 'metadata':\n\t\t\treturn createContractMetadata(contractName, config as (typeof config & { metadata?: ProjectMetadata }));\n\t\tcase '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"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"/"}
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/index.ts CHANGED
@@ -7,10 +7,10 @@ Plugin.create(() => ({
7
7
  alias: 'metadata',
8
8
  tasks: [
9
9
  Task.create({
10
- task: 'metadata',
10
+ task: 'generate-metadata',
11
11
  command: 'generate-metadata [contractName]',
12
12
  description: 'Create contract metadata.',
13
- aliases: [],
13
+ aliases: ['metadata'],
14
14
  handler: 'proxy',
15
15
  positionals: [
16
16
  PositionalArg.create({
@@ -22,10 +22,10 @@ Plugin.create(() => ({
22
22
  encoding: 'none',
23
23
  }),
24
24
  Task.create({
25
- task: 'project-metadata',
25
+ task: 'generate-project-metadata',
26
26
  command: 'generate-project-metadata',
27
27
  description: 'Create project metadata to be used as defaults for contracts.',
28
- aliases: [],
28
+ aliases: ['project-metadata'],
29
29
  handler: 'proxy',
30
30
  encoding: 'none',
31
31
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taqueria/plugin-metadata",
3
- "version": "0.27.2-alpha",
3
+ "version": "0.27.3-rc",
4
4
  "description": "A plugin for Taqueria providing metadata creation and validation.",
5
5
  "keywords": [
6
6
  "taqueria",
@@ -20,7 +20,7 @@
20
20
  }
21
21
  },
22
22
  "scripts": {
23
- "build": "npx tsc -noEmit -p ./tsconfig.json && npx parcel build --no-cache 2>&1"
23
+ "build": "npx tsc -noEmit -p ./tsconfig.json && npx tsup"
24
24
  },
25
25
  "author": "ECAD Labs",
26
26
  "license": "Apache-2.0",
@@ -31,13 +31,29 @@
31
31
  "directory": "taqueria-plugin-metadata"
32
32
  },
33
33
  "dependencies": {
34
- "@taqueria/node-sdk": "^0.27.2-alpha",
35
- "@taqueria/protocol": "^0.27.2-alpha",
34
+ "@taqueria/node-sdk": "^0.27.3-rc",
35
+ "@taqueria/protocol": "^0.27.3-rc",
36
36
  "prompts": "^2.4.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/prompts": "^2.0.14",
40
- "parcel": "^2.8.0",
40
+ "tsup": "^6.5.0",
41
41
  "typescript": "4.7.2"
42
+ },
43
+ "tsup": {
44
+ "entry": [
45
+ "index.ts"
46
+ ],
47
+ "sourcemap": true,
48
+ "target": "node16",
49
+ "outDir": "./",
50
+ "dts": true,
51
+ "clean": false,
52
+ "skipNodeModulesBundle": true,
53
+ "platform": "node",
54
+ "format": [
55
+ "esm",
56
+ "cjs"
57
+ ]
42
58
  }
43
59
  }
package/src/proxy.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import {
2
+ Config,
2
3
  getContracts,
4
+ LoadedConfig,
3
5
  PluginProxyResponse,
4
6
  RequestArgs,
5
7
  sendAsyncErr,
@@ -15,11 +17,10 @@ interface Opts extends RequestArgs.t {
15
17
  readonly contractName?: string;
16
18
  readonly task?: string;
17
19
  }
18
- type Config = Opts['config'];
19
20
 
20
21
  const createContractMetadata = async (
21
22
  contractName: undefined | string,
22
- config: Config,
23
+ config: Config.t,
23
24
  ): Promise<PluginProxyResponse> => {
24
25
  const contracts = Object.keys(config.contracts ?? {}).map(x => path.basename(x, path.extname(x)));
25
26
 
@@ -168,9 +169,9 @@ type ProjectMetadata = {
168
169
  homepage: string;
169
170
  };
170
171
  const createProjectMetadata = async (
171
- config: Config,
172
+ loadedConfig: LoadedConfig.t,
172
173
  ): Promise<PluginProxyResponse> => {
173
- const defaultValues = config.metadata;
174
+ const defaultValues = loadedConfig.metadata;
174
175
 
175
176
  // Common fields from Tzip-16
176
177
  const response = await prompts([
@@ -222,10 +223,10 @@ const createProjectMetadata = async (
222
223
  };
223
224
 
224
225
  const updatedConfig = {
225
- ...config,
226
+ ...Config.create(loadedConfig), // config is actually LoadedConfig
226
227
  metadata: projectMetadata,
227
228
  };
228
- await writeJsonFile(config.configFile)(updatedConfig);
229
+ await writeJsonFile(loadedConfig.configFile)(updatedConfig);
229
230
 
230
231
  return {
231
232
  render: 'table',
@@ -240,14 +241,12 @@ const execute = async (opts: Opts): Promise<PluginProxyResponse> => {
240
241
  config,
241
242
  } = opts;
242
243
 
243
- // TAQ BUG: If both tasks start with 'generate' then 'project-metadata' is always selected
244
- // WORKAROUND: If the 2nd command is changed to generate-project-metadata, it works as expected
245
- // console.log('execute', { task, contractName, metadata: config.metadata });
246
-
247
244
  switch (task) {
245
+ case 'generate-metadata':
248
246
  case 'metadata':
249
247
  return createContractMetadata(contractName, config as (typeof config & { metadata?: ProjectMetadata }));
250
248
  case 'project-metadata':
249
+ case 'generate-project-metadata':
251
250
  return createProjectMetadata(config as (typeof config & { metadata?: ProjectMetadata }));
252
251
  default:
253
252
  throw new Error(`${task} is not an understood task by the metadata plugin`);