@metamask/snaps-cli 0.18.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builders.d.ts +0 -1
- package/dist/builders.js +0 -6
- package/dist/builders.js.map +1 -1
- package/dist/cmds/build/buildHandler.js +7 -6
- package/dist/cmds/build/buildHandler.js.map +1 -1
- package/dist/cmds/build/bundle.js +3 -2
- package/dist/cmds/build/bundle.js.map +1 -1
- package/dist/cmds/build/index.js +0 -1
- package/dist/cmds/build/index.js.map +1 -1
- package/dist/cmds/eval/evalHandler.d.ts +1 -1
- package/dist/cmds/eval/evalHandler.js +8 -9
- package/dist/cmds/eval/evalHandler.js.map +1 -1
- package/dist/cmds/eval/index.js +1 -1
- package/dist/cmds/eval/index.js.map +1 -1
- package/dist/cmds/init/initHandler.js +8 -9
- package/dist/cmds/init/initHandler.js.map +1 -1
- package/dist/cmds/init/initUtils.d.ts +1 -1
- package/dist/cmds/init/initUtils.js +12 -12
- package/dist/cmds/init/initUtils.js.map +1 -1
- package/dist/cmds/manifest/manifestHandler.d.ts +1 -10
- package/dist/cmds/manifest/manifestHandler.js +23 -191
- package/dist/cmds/manifest/manifestHandler.js.map +1 -1
- package/dist/cmds/serve/serveHandler.js +6 -2
- package/dist/cmds/serve/serveHandler.js.map +1 -1
- package/dist/cmds/watch/index.js +0 -1
- package/dist/cmds/watch/index.js.map +1 -1
- package/dist/cmds/watch/watchHandler.js +6 -5
- package/dist/cmds/watch/watchHandler.js.map +1 -1
- package/dist/tsconfig.json +6 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.js +0 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/misc.d.ts +0 -1
- package/dist/utils/misc.js +1 -3
- package/dist/utils/misc.js.map +1 -1
- package/package.json +4 -5
- package/dist/cmds/eval/eval-worker.d.ts +0 -1
- package/dist/cmds/eval/eval-worker.js +0 -33
- package/dist/cmds/eval/eval-worker.js.map +0 -1
- package/dist/cmds/eval/mock.d.ts +0 -14
- package/dist/cmds/eval/mock.js +0 -98
- package/dist/cmds/eval/mock.js.map +0 -1
- package/dist/cmds/eval/workerEval.d.ts +0 -8
- package/dist/cmds/eval/workerEval.js +0 -37
- package/dist/cmds/eval/workerEval.js.map +0 -1
- package/dist/utils/fs.d.ts +0 -24
- package/dist/utils/fs.js +0 -66
- package/dist/utils/fs.js.map +0 -1
- package/dist/utils/validate-fs.d.ts +0 -35
- package/dist/utils/validate-fs.js +0 -69
- package/dist/utils/validate-fs.js.map +0 -1
package/dist/builders.d.ts
CHANGED
|
@@ -12,7 +12,6 @@ export declare type SnapsCliBuilders = {
|
|
|
12
12
|
readonly stripComments: Readonly<Options>;
|
|
13
13
|
readonly suppressWarnings: Readonly<Options>;
|
|
14
14
|
readonly transpilationMode: Readonly<Options>;
|
|
15
|
-
readonly transformHtmlComments: Readonly<Options>;
|
|
16
15
|
readonly depsToTranspile: Readonly<Options>;
|
|
17
16
|
readonly verboseErrors: Readonly<Options>;
|
|
18
17
|
readonly writeManifest: Readonly<Options>;
|
package/dist/builders.js
CHANGED
|
@@ -106,12 +106,6 @@ const builders = {
|
|
|
106
106
|
default: TranspilationModes.localOnly,
|
|
107
107
|
choices: Object.values(TranspilationModes),
|
|
108
108
|
},
|
|
109
|
-
transformHtmlComments: {
|
|
110
|
-
type: 'boolean',
|
|
111
|
-
describe: 'Whether to break up HTML comment tokens wherever they appear in your source code.',
|
|
112
|
-
demandOption: true,
|
|
113
|
-
default: true,
|
|
114
|
-
},
|
|
115
109
|
depsToTranspile: {
|
|
116
110
|
type: 'array',
|
|
117
111
|
describe: 'Transpile only the listed dependencies.',
|
package/dist/builders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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","sourcesContent":["import { Options } from 'yargs';\n\nexport type SnapsCliBuilders = {\n readonly bundle: Readonly<Options>;\n readonly dist: Readonly<Options>;\n readonly eval: Readonly<Options>;\n readonly manifest: Readonly<Options>;\n readonly outfileName: Readonly<Options>;\n readonly port: Readonly<Options>;\n readonly root: Readonly<Options>;\n readonly sourceMaps: Readonly<Options>;\n readonly src: Readonly<Options>;\n readonly stripComments: Readonly<Options>;\n readonly suppressWarnings: Readonly<Options>;\n readonly transpilationMode: Readonly<Options>;\n readonly depsToTranspile: Readonly<Options>;\n readonly verboseErrors: Readonly<Options>;\n readonly writeManifest: Readonly<Options>;\n readonly serve: Readonly<Options>;\n readonly template: Readonly<Options>;\n};\n\nexport enum TranspilationModes {\n localAndDeps = 'localAndDeps',\n localOnly = 'localOnly',\n none = 'none',\n}\n\nexport enum TemplateType {\n TypeScript = 'typescript',\n JavaScript = 'javascript',\n}\n\nconst builders: SnapsCliBuilders = {\n bundle: {\n alias: 'b',\n describe: 'Snap bundle file',\n type: 'string',\n demandOption: true,\n normalize: true,\n default: 'dist/bundle.js',\n },\n\n dist: {\n alias: 'd',\n describe: 'Output directory',\n type: 'string',\n demandOption: true,\n normalize: true,\n default: 'dist',\n },\n\n eval: {\n alias: 'e',\n describe: 'Attempt to evaluate Snap bundle in SES',\n type: 'boolean',\n demandOption: false,\n default: true,\n },\n\n manifest: {\n alias: 'm',\n describe: 'Validate snap.manifest.json',\n type: 'boolean',\n demandOption: false,\n default: true,\n },\n\n port: {\n alias: 'p',\n describe: 'Local server port for testing',\n type: 'number',\n demandOption: true,\n default: 8081,\n coerce: (arg: unknown) => {\n const port = Number.parseInt(String(arg), 10);\n if (Number.isNaN(port)) {\n throw new Error(`Invalid port: ${arg}`);\n }\n return port;\n },\n },\n\n outfileName: {\n alias: 'n',\n describe: 'Output file name',\n type: 'string',\n demandOption: false,\n default: 'bundle.js',\n },\n\n root: {\n alias: 'r',\n describe: 'Server root directory',\n type: 'string',\n demandOption: true,\n normalize: true,\n default: '.',\n },\n\n sourceMaps: {\n describe: 'Whether builds include sourcemaps',\n type: 'boolean',\n demandOption: false,\n default: false,\n },\n\n src: {\n alias: 's',\n describe: 'Source file',\n type: 'string',\n demandOption: true,\n normalize: true,\n default: 'src/index.js',\n },\n\n stripComments: {\n alias: 'strip',\n describe: 'Whether to remove code comments from the build output',\n type: 'boolean',\n demandOption: false,\n default: true,\n },\n\n suppressWarnings: {\n type: 'boolean',\n describe: 'Whether to suppress warnings',\n demandOption: false,\n default: false,\n },\n\n transpilationMode: {\n type: 'string',\n describe:\n 'Whether to use Babel to transpile all source code (including dependencies), local source code only, or nothing.',\n demandOption: false,\n default: TranspilationModes.localOnly,\n choices: Object.values(TranspilationModes),\n },\n\n depsToTranspile: {\n type: 'array',\n describe: 'Transpile only the listed dependencies.',\n demandOption: false,\n },\n\n verboseErrors: {\n type: 'boolean',\n describe: 'Display original errors',\n demandOption: false,\n default: true,\n },\n\n writeManifest: {\n describe: 'Make necessary changes to the Snap manifest file',\n type: 'boolean',\n demandOption: false,\n default: true,\n },\n\n serve: {\n describe: 'Serve Snap file(s) locally for testing',\n type: 'boolean',\n demandOption: false,\n default: true,\n },\n\n template: {\n alias: 't',\n describe: 'Specify which template to use (TypeScript or JavaScript)',\n type: 'string',\n demandOption: false,\n default: TemplateType.TypeScript,\n choices: Object.values(TemplateType),\n },\n};\n\nexport default builders;\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.build = void 0;
|
|
4
|
+
const snap_utils_1 = require("@metamask/snap-utils");
|
|
4
5
|
const utils_1 = require("../../utils");
|
|
5
|
-
const evalHandler_1 = require("../eval/evalHandler");
|
|
6
6
|
const manifestHandler_1 = require("../manifest/manifestHandler");
|
|
7
|
+
const evalHandler_1 = require("../eval/evalHandler");
|
|
7
8
|
const bundle_1 = require("./bundle");
|
|
8
9
|
/**
|
|
9
10
|
* Builds all files in the given source directory to the given destination
|
|
@@ -19,14 +20,14 @@ const bundle_1 = require("./bundle");
|
|
|
19
20
|
async function build(argv) {
|
|
20
21
|
const { src, dist, outfileName } = argv;
|
|
21
22
|
if (outfileName) {
|
|
22
|
-
(0,
|
|
23
|
+
(0, snap_utils_1.validateOutfileName)(outfileName);
|
|
23
24
|
}
|
|
24
|
-
await (0,
|
|
25
|
-
await (0,
|
|
26
|
-
const outfilePath = (0,
|
|
25
|
+
await (0, snap_utils_1.validateFilePath)(src);
|
|
26
|
+
await (0, snap_utils_1.validateDirPath)(dist, true);
|
|
27
|
+
const outfilePath = (0, snap_utils_1.getOutfilePath)(dist, outfileName);
|
|
27
28
|
const result = await (0, bundle_1.bundle)(src, outfilePath, argv, (0, utils_1.loadConfig)().bundlerCustomizer);
|
|
28
29
|
if (result && argv.eval) {
|
|
29
|
-
await (0, evalHandler_1.
|
|
30
|
+
await (0, evalHandler_1.evalHandler)(Object.assign(Object.assign({}, argv), { bundle: outfilePath }));
|
|
30
31
|
}
|
|
31
32
|
if (argv.manifest) {
|
|
32
33
|
await (0, manifestHandler_1.manifestHandler)(argv);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildHandler.js","sourceRoot":"","sources":["../../../src/cmds/build/buildHandler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"buildHandler.js","sourceRoot":"","sources":["../../../src/cmds/build/buildHandler.ts"],"names":[],"mappings":";;;AAAA,qDAK8B;AAE9B,uCAAyC;AACzC,iEAA8D;AAC9D,qDAAkD;AAClD,qCAAkC;AAElC;;;;;;;;;;GAUG;AACI,KAAK,UAAU,KAAK,CAAC,IAAe;IACzC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,WAAW,EAAE;QACf,IAAA,gCAAmB,EAAC,WAAqB,CAAC,CAAC;KAC5C;IACD,MAAM,IAAA,6BAAgB,EAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,IAAA,4BAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAElC,MAAM,WAAW,GAAG,IAAA,2BAAc,EAAC,IAAI,EAAE,WAAqB,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,IAAA,eAAM,EACzB,GAAG,EACH,WAAW,EACX,IAAI,EACJ,IAAA,kBAAU,GAAE,CAAC,iBAAiB,CAC/B,CAAC;IACF,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;QACvB,MAAM,IAAA,yBAAW,kCAAM,IAAI,KAAE,MAAM,EAAE,WAAW,IAAG,CAAC;KACrD;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,MAAM,IAAA,iCAAe,EAAC,IAAI,CAAC,CAAC;KAC7B;AACH,CAAC;AAtBD,sBAsBC","sourcesContent":["import {\n getOutfilePath,\n validateDirPath,\n validateFilePath,\n validateOutfileName,\n} from '@metamask/snap-utils';\nimport { YargsArgs } from '../../types/yargs';\nimport { loadConfig } from '../../utils';\nimport { manifestHandler } from '../manifest/manifestHandler';\nimport { evalHandler } from '../eval/evalHandler';\nimport { bundle } from './bundle';\n\n/**\n * Builds all files in the given source directory to the given destination\n * directory.\n *\n * Creates destination directory if it doesn't exist.\n *\n * @param argv - Argv from Yargs.\n * @param argv.src - The source file path.\n * @param argv.dist - The output directory path.\n * @param argv.outfileName - The output file name.\n */\nexport async function build(argv: YargsArgs): Promise<void> {\n const { src, dist, outfileName } = argv;\n if (outfileName) {\n validateOutfileName(outfileName as string);\n }\n await validateFilePath(src);\n await validateDirPath(dist, true);\n\n const outfilePath = getOutfilePath(dist, outfileName as string);\n const result = await bundle(\n src,\n outfilePath,\n argv,\n loadConfig().bundlerCustomizer,\n );\n if (result && argv.eval) {\n await evalHandler({ ...argv, bundle: outfilePath });\n }\n\n if (argv.manifest) {\n await manifestHandler(argv);\n }\n}\n"]}
|
|
@@ -50,12 +50,13 @@ function bundle(src, dest, argv, bundlerTransform) {
|
|
|
50
50
|
require('@babel/plugin-proposal-object-rest-spread'),
|
|
51
51
|
require('@babel/plugin-proposal-optional-chaining'),
|
|
52
52
|
require('@babel/plugin-proposal-nullish-coalescing-operator'),
|
|
53
|
-
]
|
|
53
|
+
], parserOpts: {
|
|
54
|
+
attachComment: !argv.stripComments,
|
|
55
|
+
} }, babelifyOptions));
|
|
54
56
|
}
|
|
55
57
|
bundlerTransform === null || bundlerTransform === void 0 ? void 0 : bundlerTransform(bundler);
|
|
56
58
|
bundler.plugin(snaps_browserify_plugin_1.default, {
|
|
57
59
|
stripComments: argv.stripComments,
|
|
58
|
-
transformHtmlComments: argv.transformHtmlComments,
|
|
59
60
|
});
|
|
60
61
|
bundler.bundle(async (bundleError, bundleBuffer) => await (0, utils_1.writeBundleFile)({
|
|
61
62
|
bundleError,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/cmds/build/bundle.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0D;AAC1D,gGAAuD;AACvD,6CAAoD;AAEpD,mCAA+D;AAE/D,+EAA+E;AAC/E,mEAAmE;AACnE,mHAAmH;AAEnH;;;;;;;;;;;GAWG;AACH,SAAgB,MAAM,CACpB,GAAW,EACX,IAAY,EACZ,IAAe,EACf,gBAAsD;IAEtD,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,eAAe,GAAG,IAAA,2BAAmB,EAAC,IAAW,CAAC,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,GAAG,EAAE;YAC9B,KAAK;YACL,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;YAC1B,wEAAwE;YACxE,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,iBAAiB,KAAK,6BAAkB,CAAC,IAAI,EAAE;YACjD,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,kBACnC,MAAM,EAAE,iBAAiB,KAAK,6BAAkB,CAAC,YAAY,EAC7D,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAC1B,OAAO,EAAE;oBACP,OAAO,CAAC,0BAA0B,CAAC;oBACnC;wBACE,OAAO,CAAC,mBAAmB,CAAC;wBAC5B;4BACE,OAAO,EAAE;gCACP,QAAQ,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;6BAC5C;yBACF;qBACF;iBACF,EACD,OAAO,EAAE;oBACP,OAAO,CAAC,iCAAiC,CAAC;oBAC1C,OAAO,CAAC,yCAAyC,CAAC;oBAClD,OAAO,CAAC,2CAA2C,CAAC;oBACpD,OAAO,CAAC,0CAA0C,CAAC;oBACnD,OAAO,CAAC,oDAAoD,CAAC;iBAC9D,IACG,eAAuB,EAC3B,CAAC;SACJ;QAED,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,OAAO,CAAC,CAAC;QAE5B,OAAO,CAAC,MAAM,CAAC,iCAAM,EAAE;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/cmds/build/bundle.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0D;AAC1D,gGAAuD;AACvD,6CAAoD;AAEpD,mCAA+D;AAE/D,+EAA+E;AAC/E,mEAAmE;AACnE,mHAAmH;AAEnH;;;;;;;;;;;GAWG;AACH,SAAgB,MAAM,CACpB,GAAW,EACX,IAAY,EACZ,IAAe,EACf,gBAAsD;IAEtD,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,eAAe,GAAG,IAAA,2BAAmB,EAAC,IAAW,CAAC,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,GAAG,EAAE;YAC9B,KAAK;YACL,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;YAC1B,wEAAwE;YACxE,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,iBAAiB,KAAK,6BAAkB,CAAC,IAAI,EAAE;YACjD,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,kBACnC,MAAM,EAAE,iBAAiB,KAAK,6BAAkB,CAAC,YAAY,EAC7D,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAC1B,OAAO,EAAE;oBACP,OAAO,CAAC,0BAA0B,CAAC;oBACnC;wBACE,OAAO,CAAC,mBAAmB,CAAC;wBAC5B;4BACE,OAAO,EAAE;gCACP,QAAQ,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;6BAC5C;yBACF;qBACF;iBACF,EACD,OAAO,EAAE;oBACP,OAAO,CAAC,iCAAiC,CAAC;oBAC1C,OAAO,CAAC,yCAAyC,CAAC;oBAClD,OAAO,CAAC,2CAA2C,CAAC;oBACpD,OAAO,CAAC,0CAA0C,CAAC;oBACnD,OAAO,CAAC,oDAAoD,CAAC;iBAC9D,EACD,UAAU,EAAE;oBACV,aAAa,EAAE,CAAC,IAAI,CAAC,aAAa;iBACnC,IACG,eAAuB,EAC3B,CAAC;SACJ;QAED,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,OAAO,CAAC,CAAC;QAE5B,OAAO,CAAC,MAAM,CAAC,iCAAM,EAAE;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CACZ,KAAK,EAAE,WAAW,EAAE,YAAoB,EAAE,EAAE,CAC1C,MAAM,IAAA,uBAAe,EAAC;YACpB,WAAW;YACX,YAAY;YACZ,GAAG;YACH,IAAI;YACJ,OAAO;SACR,CAAC,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AA9DD,wBA8DC","sourcesContent":["import browserify, { BrowserifyObject } from 'browserify';\nimport plugin from '@metamask/snaps-browserify-plugin';\nimport { TranspilationModes } from '../../builders';\nimport { YargsArgs } from '../../types/yargs';\nimport { processDependencies, writeBundleFile } from './utils';\n\n// We need to statically import all Browserify transforms and all Babel presets\n// and plugins, and calling `require` is the sanest way to do that.\n/* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires, node/global-require */\n\n/**\n * Builds a Snap bundle JS file from its JavaScript source.\n *\n * @param src - The source file path.\n * @param dest - The destination file path.\n * @param argv - Arguments as an object generated by `yargs`.\n * @param argv.sourceMaps - Whether to output sourcemaps.\n * @param argv.stripComments - Whether to remove comments from code.\n * @param argv.transpilationMode - The Babel transpilation mode.\n * @param bundlerTransform - An optional function which can be used to transform\n * the Browserify instance, e.g., adding a custom transform or plugin.\n */\nexport function bundle(\n src: string,\n dest: string,\n argv: YargsArgs,\n bundlerTransform?: (bundler: BrowserifyObject) => void,\n): Promise<boolean> {\n const { sourceMaps: debug, transpilationMode } = argv;\n const babelifyOptions = processDependencies(argv as any);\n return new Promise((resolve, _reject) => {\n const bundler = browserify(src, {\n debug,\n extensions: ['.js', '.ts'],\n // Standalone is required to properly support Snaps using module.exports\n standalone: '<snap>',\n });\n\n if (transpilationMode !== TranspilationModes.none) {\n bundler.transform(require('babelify'), {\n global: transpilationMode === TranspilationModes.localAndDeps,\n extensions: ['.js', '.ts'],\n presets: [\n require('@babel/preset-typescript'),\n [\n require('@babel/preset-env'),\n {\n targets: {\n browsers: ['chrome >= 66', 'firefox >= 68'],\n },\n },\n ],\n ],\n plugins: [\n require('@babel/plugin-transform-runtime'),\n require('@babel/plugin-proposal-class-properties'),\n require('@babel/plugin-proposal-object-rest-spread'),\n require('@babel/plugin-proposal-optional-chaining'),\n require('@babel/plugin-proposal-nullish-coalescing-operator'),\n ],\n parserOpts: {\n attachComment: !argv.stripComments,\n },\n ...(babelifyOptions as any),\n });\n }\n\n bundlerTransform?.(bundler);\n\n bundler.plugin(plugin, {\n stripComments: argv.stripComments,\n });\n\n bundler.bundle(\n async (bundleError, bundleBuffer: Buffer) =>\n await writeBundleFile({\n bundleError,\n bundleBuffer,\n src,\n dest,\n resolve,\n }),\n );\n });\n}\n"]}
|
package/dist/cmds/build/index.js
CHANGED
|
@@ -19,7 +19,6 @@ module.exports = {
|
|
|
19
19
|
.option('stripComments', builders_1.default.stripComments)
|
|
20
20
|
.option('transpilationMode', builders_1.default.transpilationMode)
|
|
21
21
|
.option('depsToTranspile', builders_1.default.depsToTranspile)
|
|
22
|
-
.option('transformHtmlComments', builders_1.default.transformHtmlComments)
|
|
23
22
|
.option('writeManifest', builders_1.default.writeManifest)
|
|
24
23
|
.implies('writeManifest', 'manifest')
|
|
25
24
|
.implies('depsToTranspile', 'transpilationMode')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmds/build/index.ts"],"names":[],"mappings":";;;;AACA,8DAAsC;AAEtC,iDAAuC;AACvC,mCAAsD;AAEtD,iBAAS;IACP,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;IACvB,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE;QAC5B,IAAI;aACD,MAAM,CAAC,MAAM,EAAE,kBAAQ,CAAC,IAAI,CAAC;aAC7B,MAAM,CAAC,MAAM,EAAE,kBAAQ,CAAC,IAAI,CAAC;aAC7B,MAAM,CAAC,UAAU,EAAE,kBAAQ,CAAC,QAAQ,CAAC;aACrC,MAAM,CAAC,aAAa,EAAE,kBAAQ,CAAC,WAAW,CAAC;aAC3C,MAAM,CAAC,YAAY,EAAE,kBAAQ,CAAC,UAAU,CAAC;aACzC,MAAM,CAAC,KAAK,EAAE,kBAAQ,CAAC,GAAG,CAAC;aAC3B,MAAM,CAAC,eAAe,EAAE,kBAAQ,CAAC,aAAa,CAAC;aAC/C,MAAM,CAAC,mBAAmB,EAAE,kBAAQ,CAAC,iBAAiB,CAAC;aACvD,MAAM,CAAC,iBAAiB,EAAE,kBAAQ,CAAC,eAAe,CAAC;aACnD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmds/build/index.ts"],"names":[],"mappings":";;;;AACA,8DAAsC;AAEtC,iDAAuC;AACvC,mCAAsD;AAEtD,iBAAS;IACP,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC;IACvB,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE;QAC5B,IAAI;aACD,MAAM,CAAC,MAAM,EAAE,kBAAQ,CAAC,IAAI,CAAC;aAC7B,MAAM,CAAC,MAAM,EAAE,kBAAQ,CAAC,IAAI,CAAC;aAC7B,MAAM,CAAC,UAAU,EAAE,kBAAQ,CAAC,QAAQ,CAAC;aACrC,MAAM,CAAC,aAAa,EAAE,kBAAQ,CAAC,WAAW,CAAC;aAC3C,MAAM,CAAC,YAAY,EAAE,kBAAQ,CAAC,UAAU,CAAC;aACzC,MAAM,CAAC,KAAK,EAAE,kBAAQ,CAAC,GAAG,CAAC;aAC3B,MAAM,CAAC,eAAe,EAAE,kBAAQ,CAAC,aAAa,CAAC;aAC/C,MAAM,CAAC,mBAAmB,EAAE,kBAAQ,CAAC,iBAAiB,CAAC;aACvD,MAAM,CAAC,iBAAiB,EAAE,kBAAQ,CAAC,eAAe,CAAC;aACnD,MAAM,CAAC,eAAe,EAAE,kBAAQ,CAAC,aAAa,CAAC;aAC/C,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC;aACpC,OAAO,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;aAC/C,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mCAA2B,EAAC,IAAW,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,CAAC,IAAe,EAAE,EAAE,CAAC,IAAA,oBAAK,EAAC,IAAI,CAAC;CAC1C,CAAC","sourcesContent":["import yargs from 'yargs';\nimport builders from '../../builders';\nimport { YargsArgs } from '../../types/yargs';\nimport { build } from './buildHandler';\nimport { processInvalidTranspilation } from './utils';\n\nexport = {\n command: ['build', 'b'],\n desc: 'Build Snap from source',\n builder: (yarg: yargs.Argv) => {\n yarg\n .option('dist', builders.dist)\n .option('eval', builders.eval)\n .option('manifest', builders.manifest)\n .option('outfileName', builders.outfileName)\n .option('sourceMaps', builders.sourceMaps)\n .option('src', builders.src)\n .option('stripComments', builders.stripComments)\n .option('transpilationMode', builders.transpilationMode)\n .option('depsToTranspile', builders.depsToTranspile)\n .option('writeManifest', builders.writeManifest)\n .implies('writeManifest', 'manifest')\n .implies('depsToTranspile', 'transpilationMode')\n .middleware((argv) => processInvalidTranspilation(argv as any));\n },\n handler: (argv: YargsArgs) => build(argv),\n};\n"]}
|
|
@@ -6,4 +6,4 @@ import { YargsArgs } from '../../types/yargs';
|
|
|
6
6
|
* @returns A promise that resolves once the eval has finished.
|
|
7
7
|
* @throws If the eval failed.
|
|
8
8
|
*/
|
|
9
|
-
export declare function
|
|
9
|
+
export declare function evalHandler(argv: YargsArgs): Promise<void>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.evalHandler = void 0;
|
|
4
|
+
const snap_utils_1 = require("@metamask/snap-utils");
|
|
4
5
|
const utils_1 = require("../../utils");
|
|
5
|
-
const workerEval_1 = require("./workerEval");
|
|
6
6
|
/**
|
|
7
7
|
* Runs the snap in a worker, to ensure SES compatibility.
|
|
8
8
|
*
|
|
@@ -10,17 +10,16 @@ const workerEval_1 = require("./workerEval");
|
|
|
10
10
|
* @returns A promise that resolves once the eval has finished.
|
|
11
11
|
* @throws If the eval failed.
|
|
12
12
|
*/
|
|
13
|
-
async function
|
|
13
|
+
async function evalHandler(argv) {
|
|
14
14
|
const { bundle: bundlePath } = argv;
|
|
15
|
-
await (0, utils_1.validateFilePath)(bundlePath);
|
|
16
15
|
try {
|
|
17
|
-
await (0,
|
|
16
|
+
await (0, snap_utils_1.evalBundle)(bundlePath);
|
|
18
17
|
console.log(`Eval Success: evaluated '${bundlePath}' in SES!`);
|
|
19
18
|
}
|
|
20
|
-
catch (
|
|
21
|
-
(0, utils_1.logError)(`Snap evaluation error: ${
|
|
22
|
-
throw
|
|
19
|
+
catch (error) {
|
|
20
|
+
(0, utils_1.logError)(`Snap evaluation error: ${error.message}`, error);
|
|
21
|
+
throw error;
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
|
-
exports.
|
|
24
|
+
exports.evalHandler = evalHandler;
|
|
26
25
|
//# sourceMappingURL=evalHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evalHandler.js","sourceRoot":"","sources":["../../../src/cmds/eval/evalHandler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"evalHandler.js","sourceRoot":"","sources":["../../../src/cmds/eval/evalHandler.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAElD,uCAAuC;AAEvC;;;;;;GAMG;AACI,KAAK,UAAU,WAAW,CAAC,IAAe;IAC/C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEpC,IAAI;QACF,MAAM,IAAA,uBAAU,EAAC,UAAoB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,UAAU,WAAW,CAAC,CAAC;KAChE;IAAC,OAAO,KAAK,EAAE;QACd,IAAA,gBAAQ,EAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAVD,kCAUC","sourcesContent":["import { evalBundle } from '@metamask/snap-utils';\nimport { YargsArgs } from '../../types/yargs';\nimport { logError } from '../../utils';\n\n/**\n * Runs the snap in a worker, to ensure SES compatibility.\n *\n * @param argv - The Yargs arguments object.\n * @returns A promise that resolves once the eval has finished.\n * @throws If the eval failed.\n */\nexport async function evalHandler(argv: YargsArgs): Promise<void> {\n const { bundle: bundlePath } = argv;\n\n try {\n await evalBundle(bundlePath as string);\n console.log(`Eval Success: evaluated '${bundlePath}' in SES!`);\n } catch (error) {\n logError(`Snap evaluation error: ${error.message}`, error);\n throw error;\n }\n}\n"]}
|
package/dist/cmds/eval/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmds/eval/index.ts"],"names":[],"mappings":";;;;AACA,8DAAsC;AAEtC,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmds/eval/index.ts"],"names":[],"mappings":";;;;AACA,8DAAsC;AAEtC,+CAA4C;AAE5C,iBAAS;IACP,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACtB,IAAI,EAAE,wCAAwC;IAC9C,OAAO,EAAE,CAAC,IAAgB,EAAE,EAAE;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,CAAC,IAAe,EAAE,EAAE,CAAC,IAAA,yBAAW,EAAC,IAAI,CAAC;CAChD,CAAC","sourcesContent":["import yargs from 'yargs';\nimport builders from '../../builders';\nimport { YargsArgs } from '../../types/yargs';\nimport { evalHandler } from './evalHandler';\n\nexport = {\n command: ['eval', 'e'],\n desc: 'Attempt to evaluate Snap bundle in SES',\n builder: (yarg: yargs.Argv) => {\n yarg.option('bundle', builders.bundle);\n },\n handler: (argv: YargsArgs) => evalHandler(argv),\n};\n"]}
|
|
@@ -6,10 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.updateManifestShasum = exports.initHandler = void 0;
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const
|
|
9
|
+
const snap_utils_1 = require("@metamask/snap-utils");
|
|
10
10
|
const mkdirp_1 = __importDefault(require("mkdirp"));
|
|
11
11
|
const utils_1 = require("../../utils");
|
|
12
|
-
const manifestHandler_1 = require("../manifest/manifestHandler");
|
|
13
12
|
const init_template_json_1 = __importDefault(require("./init-template.json"));
|
|
14
13
|
const initUtils_1 = require("./initUtils");
|
|
15
14
|
/**
|
|
@@ -26,7 +25,7 @@ async function initHandler(argv) {
|
|
|
26
25
|
console.log(`MetaMask Snaps: Initialize\n`);
|
|
27
26
|
const packageJson = await (0, initUtils_1.asyncPackageInit)(argv);
|
|
28
27
|
await (0, initUtils_1.prepareWorkingDirectory)();
|
|
29
|
-
console.log(`\nInit: Building '${
|
|
28
|
+
console.log(`\nInit: Building '${snap_utils_1.NpmSnapFileNames.Manifest}'...\n`);
|
|
30
29
|
const [snapManifest, _newArgs] = await (0, initUtils_1.buildSnapManifest)(argv, packageJson);
|
|
31
30
|
const newArgs = Object.keys(_newArgs)
|
|
32
31
|
.sort()
|
|
@@ -36,13 +35,13 @@ async function initHandler(argv) {
|
|
|
36
35
|
}, {});
|
|
37
36
|
const isTypeScript = (0, initUtils_1.isTemplateTypescript)(argv.template);
|
|
38
37
|
try {
|
|
39
|
-
await fs_1.promises.writeFile(
|
|
38
|
+
await fs_1.promises.writeFile(snap_utils_1.NpmSnapFileNames.Manifest, `${JSON.stringify(snapManifest, null, 2)}\n`);
|
|
40
39
|
}
|
|
41
40
|
catch (err) {
|
|
42
|
-
(0, utils_1.logError)(`Init Error: Failed to write '${
|
|
41
|
+
(0, utils_1.logError)(`Init Error: Failed to write '${snap_utils_1.NpmSnapFileNames.Manifest}'.`, err);
|
|
43
42
|
throw err;
|
|
44
43
|
}
|
|
45
|
-
console.log(`\nInit: Created '${
|
|
44
|
+
console.log(`\nInit: Created '${snap_utils_1.NpmSnapFileNames.Manifest}'.`);
|
|
46
45
|
// Write main .js entry file
|
|
47
46
|
const { src } = newArgs;
|
|
48
47
|
try {
|
|
@@ -112,10 +111,10 @@ exports.initHandler = initHandler;
|
|
|
112
111
|
* during the init command.
|
|
113
112
|
*/
|
|
114
113
|
async function updateManifestShasum() {
|
|
115
|
-
const manifest =
|
|
114
|
+
const manifest = await (0, snap_utils_1.readJsonFile)(snap_utils_1.NpmSnapFileNames.Manifest);
|
|
116
115
|
const bundleContents = await fs_1.promises.readFile(manifest.source.location.npm.filePath, 'utf8');
|
|
117
|
-
manifest.source.shasum = (0,
|
|
118
|
-
await fs_1.promises.writeFile(
|
|
116
|
+
manifest.source.shasum = (0, snap_utils_1.getSnapSourceShasum)(bundleContents);
|
|
117
|
+
await fs_1.promises.writeFile(snap_utils_1.NpmSnapFileNames.Manifest, JSON.stringify((0, snap_utils_1.getWritableManifest)(manifest), null, 2));
|
|
119
118
|
}
|
|
120
119
|
exports.updateManifestShasum = updateManifestShasum;
|
|
121
120
|
//# sourceMappingURL=initHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initHandler.js","sourceRoot":"","sources":["../../../src/cmds/init/initHandler.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAoC;AACpC,gDAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"initHandler.js","sourceRoot":"","sources":["../../../src/cmds/init/initHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { promises as fs } from 'fs';\nimport pathUtils from 'path';\nimport {\n NpmSnapFileNames,\n SnapManifest,\n getSnapSourceShasum,\n getWritableManifest,\n readJsonFile,\n} from '@metamask/snap-utils';\nimport mkdirp from 'mkdirp';\nimport { YargsArgs } from '../../types/yargs';\nimport { closePrompt, CONFIG_FILE, logError, SnapConfig } from '../../utils';\nimport { TemplateType } from '../../builders';\nimport template from './init-template.json';\nimport {\n asyncPackageInit,\n buildSnapManifest,\n isTemplateTypescript,\n prepareWorkingDirectory,\n} from './initUtils';\n\n/**\n * Creates a new snap package, based on one of the provided templates. This\n * creates all the necessary files, like `package.json`, `snap.config.js`, etc.\n * to start developing a snap.\n *\n * @param argv - The Yargs arguments object.\n * @returns The Yargs arguments augmented with the new `dist`, `outfileName` and\n * `src` properties.\n * @throws If initialization of the snap package failed.\n */\nexport async function initHandler(argv: YargsArgs) {\n console.log(`MetaMask Snaps: Initialize\\n`);\n\n const packageJson = await asyncPackageInit(argv);\n\n await prepareWorkingDirectory();\n\n console.log(`\\nInit: Building '${NpmSnapFileNames.Manifest}'...\\n`);\n\n const [snapManifest, _newArgs] = await buildSnapManifest(argv, packageJson);\n\n const newArgs = Object.keys(_newArgs)\n .sort()\n .reduce((sorted, key) => {\n sorted[key] = _newArgs[key as keyof typeof _newArgs];\n return sorted;\n }, {} as YargsArgs);\n\n const isTypeScript = isTemplateTypescript(argv.template as TemplateType);\n try {\n await fs.writeFile(\n NpmSnapFileNames.Manifest,\n `${JSON.stringify(snapManifest, null, 2)}\\n`,\n );\n } catch (err) {\n logError(\n `Init Error: Failed to write '${NpmSnapFileNames.Manifest}'.`,\n err,\n );\n throw err;\n }\n\n console.log(`\\nInit: Created '${NpmSnapFileNames.Manifest}'.`);\n\n // Write main .js entry file\n const { src } = newArgs;\n\n try {\n if (pathUtils.basename(src) !== src) {\n await mkdirp(pathUtils.dirname(src));\n }\n\n await fs.writeFile(\n src,\n isTypeScript ? template.typescriptSource : template.source,\n );\n\n console.log(`Init: Created '${src}'.`);\n } catch (err) {\n logError(`Init Error: Failed to write '${src}'.`, err);\n throw err;\n }\n\n // Write index.html\n try {\n await fs.writeFile(\n 'index.html',\n isTypeScript ? template.typescriptHtml : template.html,\n );\n\n console.log(`Init: Created 'index.html'.`);\n } catch (err) {\n logError(`Init Error: Failed to write 'index.html'.`, err);\n throw err;\n }\n\n // Write tsconfig.json\n if (isTypeScript) {\n try {\n await fs.writeFile('tsconfig.json', template.typescriptConfig);\n console.log(`Init: Created 'tsconfig.json'.`);\n } catch (err) {\n logError(`Init Error: Failed to write 'tsconfig.json'.`, err);\n throw err;\n }\n }\n\n // Write config file\n try {\n const defaultConfig: SnapConfig = {\n cliOptions: newArgs,\n };\n const defaultConfigFile = `module.exports = ${JSON.stringify(\n defaultConfig,\n null,\n 2,\n )}\n `;\n await fs.writeFile(CONFIG_FILE, defaultConfigFile);\n console.log(`Init: Wrote '${CONFIG_FILE}' config file`);\n } catch (err) {\n logError(`Init Error: Failed to write '${CONFIG_FILE}'.`, err);\n throw err;\n }\n\n // Write icon\n const iconPath = 'images/icon.svg';\n try {\n if (pathUtils.basename(iconPath) !== iconPath) {\n await mkdirp(pathUtils.dirname(iconPath));\n }\n await fs.writeFile(iconPath, template.icon);\n\n console.log(`Init: Created '${iconPath}'.`);\n } catch (err) {\n logError(`Init Error: Failed to write '${iconPath}'.`, err);\n throw err;\n }\n\n closePrompt();\n return { ...argv, ...newArgs };\n}\n\n/**\n * This updates the Snap shasum value of the manifest after building the Snap\n * during the init command.\n */\nexport async function updateManifestShasum() {\n const manifest = await readJsonFile<SnapManifest>(NpmSnapFileNames.Manifest);\n\n const bundleContents = await fs.readFile(\n manifest.source.location.npm.filePath,\n 'utf8',\n );\n\n manifest.source.shasum = getSnapSourceShasum(bundleContents);\n await fs.writeFile(\n NpmSnapFileNames.Manifest,\n JSON.stringify(getWritableManifest(manifest), null, 2),\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SnapManifest, NpmSnapPackageJson } from '@metamask/snap-utils';
|
|
2
2
|
import { Arguments } from 'yargs';
|
|
3
3
|
import { YargsArgs } from '../../types/yargs';
|
|
4
4
|
import { TemplateType } from '../../builders';
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.isTemplateTypescript = exports.correctDefaultArgs = exports.prepareWorkingDirectory = exports.buildSnapManifest = exports.asyncPackageInit = void 0;
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const
|
|
9
|
+
const snap_utils_1 = require("@metamask/snap-utils");
|
|
10
10
|
const init_package_json_1 = __importDefault(require("init-package-json"));
|
|
11
11
|
const mkdirp_1 = __importDefault(require("mkdirp"));
|
|
12
12
|
const slash_1 = __importDefault(require("slash"));
|
|
@@ -26,22 +26,22 @@ const NPM_PUBLIC_REGISTRY_URL = 'https://registry.npmjs.org';
|
|
|
26
26
|
* @returns The contents of the `package.json` file.
|
|
27
27
|
*/
|
|
28
28
|
async function asyncPackageInit(argv) {
|
|
29
|
-
if ((0, fs_1.existsSync)(
|
|
30
|
-
console.log(`Init: Attempting to use existing '${
|
|
29
|
+
if ((0, fs_1.existsSync)(snap_utils_1.NpmSnapFileNames.PackageJson)) {
|
|
30
|
+
console.log(`Init: Attempting to use existing '${snap_utils_1.NpmSnapFileNames.PackageJson}'...`);
|
|
31
31
|
try {
|
|
32
|
-
const packageJson = await (0,
|
|
33
|
-
(0,
|
|
34
|
-
console.log(`Init: Successfully parsed '${
|
|
32
|
+
const packageJson = await (0, snap_utils_1.readJsonFile)(snap_utils_1.NpmSnapFileNames.PackageJson);
|
|
33
|
+
(0, snap_utils_1.validateSnapJsonFile)(snap_utils_1.NpmSnapFileNames.PackageJson, packageJson);
|
|
34
|
+
console.log(`Init: Successfully parsed '${snap_utils_1.NpmSnapFileNames.PackageJson}'!`);
|
|
35
35
|
return packageJson;
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
|
-
(0, utils_1.logError)(`Init Error: Could not parse '${
|
|
38
|
+
(0, utils_1.logError)(`Init Error: Could not parse '${snap_utils_1.NpmSnapFileNames.PackageJson}'. Please verify that the file is correctly formatted and try again.`, error);
|
|
39
39
|
throw error;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
// Exit if yarn.lock is found, or we'll be in trouble
|
|
43
43
|
if ((0, fs_1.existsSync)('yarn.lock')) {
|
|
44
|
-
(0, utils_1.logError)(`Init Error: Found a 'yarn.lock' file but no '${
|
|
44
|
+
(0, utils_1.logError)(`Init Error: Found a 'yarn.lock' file but no '${snap_utils_1.NpmSnapFileNames.PackageJson}'. Please run 'yarn init' and try again.`);
|
|
45
45
|
throw new Error('Already existing yarn.lock file found');
|
|
46
46
|
}
|
|
47
47
|
// Run 'npm init'
|
|
@@ -127,7 +127,7 @@ async function buildSnapManifest(argv, packageJson) {
|
|
|
127
127
|
});
|
|
128
128
|
if (proposedName.length > 0 &&
|
|
129
129
|
proposedName.length <= 214 &&
|
|
130
|
-
|
|
130
|
+
snap_utils_1.PROPOSED_NAME_REGEX.test(proposedName)) {
|
|
131
131
|
invalidProposedName = false;
|
|
132
132
|
}
|
|
133
133
|
else {
|
|
@@ -204,7 +204,7 @@ async function buildSnapManifest(argv, packageJson) {
|
|
|
204
204
|
description,
|
|
205
205
|
proposedName,
|
|
206
206
|
repository: packageJson.repository
|
|
207
|
-
? (0,
|
|
207
|
+
? (0, snap_utils_1.deepClone)(packageJson.repository)
|
|
208
208
|
: null,
|
|
209
209
|
source: {
|
|
210
210
|
shasum: PLACEHOLDER_SHASUM,
|
|
@@ -221,7 +221,7 @@ async function buildSnapManifest(argv, packageJson) {
|
|
|
221
221
|
manifestVersion: '0.1',
|
|
222
222
|
};
|
|
223
223
|
try {
|
|
224
|
-
(0,
|
|
224
|
+
(0, snap_utils_1.validateSnapJsonFile)(snap_utils_1.NpmSnapFileNames.Manifest, manifest);
|
|
225
225
|
}
|
|
226
226
|
catch (error) {
|
|
227
227
|
/* istanbul ignore next */
|
|
@@ -239,7 +239,7 @@ const INIT_FILE_NAMES = new Set([
|
|
|
239
239
|
'index.html',
|
|
240
240
|
utils_1.CONFIG_FILE,
|
|
241
241
|
'dist',
|
|
242
|
-
|
|
242
|
+
snap_utils_1.NpmSnapFileNames.Manifest,
|
|
243
243
|
]);
|
|
244
244
|
/**
|
|
245
245
|
* Checks whether any files in the current working directory will be overwritten
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initUtils.js","sourceRoot":"","sources":["../../../src/cmds/init/initUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, promises as fs } from 'fs';\nimport pathUtils from 'path';\nimport {\n NpmSnapFileNames,\n NpmSnapPackageJson,\n PROPOSED_NAME_REGEX,\n SnapManifest,\n validateSnapJsonFile,\n} from '@metamask/snap-controllers/dist/snaps';\nimport initPackageJson from 'init-package-json';\nimport mkdirp from 'mkdirp';\nimport slash from 'slash';\nimport { Arguments } from 'yargs';\nimport { YargsArgs } from '../../types/yargs';\nimport {\n CONFIG_FILE,\n deepClone,\n logError,\n logWarning,\n prompt,\n readJsonFile,\n trimPathString,\n} from '../../utils';\nimport { TemplateType } from '../../builders';\n\n/**\n * This is a placeholder shasum that will be replaced at the end of the init command.\n */\nconst PLACEHOLDER_SHASUM = '2QqUxo5joo4kKKr7yiCjdYsZOZcIFBnIBEdwU9Yx7+M=';\n\nconst NPM_PUBLIC_REGISTRY_URL = 'https://registry.npmjs.org';\n\n/**\n * Initializes a `package.json` file for a Snap project. Will attempt to read\n * and parse the existing file if it already exists, otherwise will intialize\n * a brand new one.\n *\n * @param argv - Yargs arguments object.\n * @returns The contents of the `package.json` file.\n */\nexport async function asyncPackageInit(\n argv: YargsArgs,\n): Promise<Readonly<NpmSnapPackageJson>> {\n if (existsSync(NpmSnapFileNames.PackageJson)) {\n console.log(\n `Init: Attempting to use existing '${NpmSnapFileNames.PackageJson}'...`,\n );\n\n try {\n const packageJson = await readJsonFile(NpmSnapFileNames.PackageJson);\n validateSnapJsonFile(NpmSnapFileNames.PackageJson, packageJson);\n\n console.log(\n `Init: Successfully parsed '${NpmSnapFileNames.PackageJson}'!`,\n );\n return packageJson as NpmSnapPackageJson;\n } catch (error) {\n logError(\n `Init Error: Could not parse '${NpmSnapFileNames.PackageJson}'. Please verify that the file is correctly formatted and try again.`,\n error,\n );\n throw error;\n }\n }\n\n // Exit if yarn.lock is found, or we'll be in trouble\n if (existsSync('yarn.lock')) {\n logError(\n `Init Error: Found a 'yarn.lock' file but no '${NpmSnapFileNames.PackageJson}'. Please run 'yarn init' and try again.`,\n );\n throw new Error('Already existing yarn.lock file found');\n }\n\n // Run 'npm init'\n return new Promise((resolve, reject) => {\n initPackageJson(\n process.cwd(),\n '',\n {\n 'init.main': argv.src,\n },\n (err, data) => {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n },\n );\n });\n}\n\nconst YES = 'yes';\nconst YES_VALUES = new Set([YES, 'y']);\n\n/**\n * Checks if user input provided over a prompt is \"yes\", i.e., if the value is\n * truthy and in the {@link YES_VALUES} set.\n *\n * @param userInput - The user input to check.\n * @returns `true` if the user input is \"yes\", `false` otherwise.\n */\nfunction isYes(userInput: string | undefined) {\n return userInput && YES_VALUES.has(userInput.toLowerCase());\n}\n\nconst DEFAULT_PERMISSION_KEY = 'snap_confirm';\n\n/**\n * Get the default permissions to write to the snap manifest.\n *\n * @returns An object containing the default permissions.\n */\nconst getDefaultPermissions = () => {\n return { [DEFAULT_PERMISSION_KEY]: {} };\n};\n\n/**\n * Interactively constructs a Snap manifest file by prompting the user.\n *\n * @param argv - The `yargs` `argv` object.\n * @param packageJson - The `package.json` object.\n * @returns A tuple of the resulting Snap manifest object and a new `argv`\n * object with properties to match the manifest.\n */\nexport async function buildSnapManifest(\n argv: YargsArgs,\n packageJson: NpmSnapPackageJson,\n): Promise<[SnapManifest, { dist: string; outfileName: string; src: string }]> {\n const { outfileName } = argv;\n let { dist } = argv;\n let initialPermissions: Record<string, unknown> = getDefaultPermissions();\n let { description, name: proposedName } = packageJson;\n\n if (!description) {\n description = `The ${proposedName} Snap.`;\n }\n\n try {\n const userInput = await prompt({\n question: `Use default Snap manifest values?`,\n defaultValue: YES,\n shouldClose: false,\n });\n\n if (isYes(userInput)) {\n console.log('Using default values...');\n try {\n await mkdirp(dist);\n } catch (err) {\n logError(\n `Init Error: Could not write default 'dist' '${dist}'. Maybe check your local ${CONFIG_FILE} file?`,\n );\n throw err;\n }\n return endSnapManifest();\n }\n } catch (err) {\n logError(`Init Error: ${err.message}`, err);\n throw err;\n }\n\n let invalidProposedName = true;\n while (invalidProposedName) {\n // eslint-disable-next-line require-atomic-updates\n proposedName = await prompt({\n question: `Proposed Snap name:`,\n defaultValue: proposedName,\n });\n\n if (\n proposedName.length > 0 &&\n proposedName.length <= 214 &&\n PROPOSED_NAME_REGEX.test(proposedName)\n ) {\n invalidProposedName = false;\n } else {\n logError(\n `The proposed name must adhere to npm package naming conventions, except that capital letters are allowed. For details, see: https://docs.npmjs.com/cli/v6/configuring-npm/package-json#name`,\n );\n }\n }\n\n let invalidDescription = true;\n while (invalidDescription) {\n // eslint-disable-next-line require-atomic-updates\n description = await prompt({\n question: `Description:`,\n defaultValue: description,\n });\n\n if (description.length === 0 || description.length <= 280) {\n invalidDescription = false;\n } else {\n logError(\n `The description must be a non-empty string less than or equal to 280 characters.`,\n );\n }\n }\n\n let invalidDist = true;\n while (invalidDist) {\n // eslint-disable-next-line require-atomic-updates\n dist = await prompt({ question: `Output directory:`, defaultValue: dist });\n try {\n dist = trimPathString(dist);\n await mkdirp(dist);\n invalidDist = false;\n } catch (distError) {\n logError(\n `Unable to create directory '${dist}'. Ensure that the path is valid and try again.`,\n distError,\n );\n }\n }\n\n let invalidPermissions = true;\n while (invalidPermissions) {\n const inputPermissions = await prompt({\n // We add the parenthetical default value ourselves\n question: `Initial permissions: [perm1 perm2 ...] ([snap_confirm])`,\n });\n\n if (\n !inputPermissions ||\n inputPermissions.trim() === DEFAULT_PERMISSION_KEY\n ) {\n break;\n }\n\n try {\n initialPermissions = inputPermissions\n .split(' ')\n .reduce((allPermissions, permission) => {\n if (\n typeof permission === 'string' &&\n permission.match(/^[\\w\\d_:]+$/iu)\n ) {\n allPermissions[permission] = {};\n } else {\n throw new Error(`Invalid permission: ${permission}`);\n }\n return allPermissions;\n }, {} as Record<string, unknown>);\n\n invalidPermissions = false;\n } catch (err) {\n logError(\n `Invalid permissions '${inputPermissions}'.\\nThe permissions must be specified as a space-separated list of strings with only characters, digits, underscores ('_'), and colons (':').`,\n err,\n );\n }\n }\n\n return endSnapManifest();\n\n /**\n * Get the final snap manifest object and return it, along with the dist and\n * file names.\n *\n * @returns A tuple of the resulting snap manifest object and an object\n * containing the dist and file names.\n */\n function endSnapManifest(): [\n SnapManifest,\n {\n dist: string;\n outfileName: string;\n src: string;\n },\n ] {\n const manifest = {\n version: packageJson.version,\n description,\n proposedName,\n repository: packageJson.repository\n ? deepClone(packageJson.repository)\n : null,\n source: {\n shasum: PLACEHOLDER_SHASUM,\n location: {\n npm: {\n filePath: slash(pathUtils.join(dist, outfileName)),\n packageName: packageJson.name,\n registry: NPM_PUBLIC_REGISTRY_URL,\n iconPath: 'images/icon.svg',\n } as const,\n },\n },\n initialPermissions,\n manifestVersion: '0.1' as const,\n };\n\n try {\n validateSnapJsonFile(NpmSnapFileNames.Manifest, manifest);\n } catch (error) {\n /* istanbul ignore next */\n throw new Error(\n `Internal Error: Validation of constructed manifest failed. This is a bug, please report it. Reason:\\n${error.message}`,\n );\n }\n\n return [\n manifest,\n { dist, outfileName, src: packageJson.main || 'src/index.js' },\n ];\n }\n}\n\nconst INIT_FILE_NAMES = new Set([\n 'src',\n 'index.html',\n CONFIG_FILE,\n 'dist',\n NpmSnapFileNames.Manifest,\n]);\n\n/**\n * Checks whether any files in the current working directory will be overwritten\n * by the initialization process, and asks the user whether to continue if so.\n */\nexport async function prepareWorkingDirectory(): Promise<void> {\n const existingFiles = (await fs.readdir(process.cwd())).filter((item) =>\n INIT_FILE_NAMES.has(item.toString()),\n );\n\n if (existingFiles.length > 0) {\n logWarning(\n `\\nInit Warning: Existing files and/or directories may be overwritten:\\n${existingFiles.reduce(\n (message, currentFile) => {\n return `${message}\\t${currentFile}\\n`;\n },\n '',\n )}`,\n );\n\n const continueInput = await prompt({\n question: `Continue?`,\n defaultValue: YES,\n });\n const shouldContinue = continueInput && isYes(continueInput);\n\n if (!shouldContinue) {\n console.log(`Init: Exiting...`);\n throw new Error('User refused to continue');\n }\n }\n}\n\n/**\n * In case when TypeScript version is used, default source file\n * will be updated if previous was not correct.\n *\n * @param yargsArgv - The Yargs arguments object.\n * @returns Modified Yargs arguments object.\n */\nexport function correctDefaultArgs(yargsArgv: Arguments): Arguments {\n if (\n yargsArgv.template === TemplateType.TypeScript &&\n yargsArgv.src === 'src/index.js'\n ) {\n yargsArgv.src = 'src/index.ts';\n yargsArgv.s = 'src/index.ts';\n }\n\n return yargsArgv;\n}\n\n/**\n * Check if template argument is TemplateType.TypeScript.\n *\n * @param templateType - TemplateType value of the template argument passed from CLI.\n * @returns True or false.\n */\nexport function isTemplateTypescript(templateType: TemplateType): boolean {\n return templateType === TemplateType.TypeScript;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"initUtils.js","sourceRoot":"","sources":["../../../src/cmds/init/initUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, promises as fs } from 'fs';\nimport pathUtils from 'path';\nimport {\n PROPOSED_NAME_REGEX,\n NpmSnapFileNames,\n SnapManifest,\n NpmSnapPackageJson,\n validateSnapJsonFile,\n readJsonFile,\n deepClone,\n} from '@metamask/snap-utils';\nimport initPackageJson from 'init-package-json';\nimport mkdirp from 'mkdirp';\nimport slash from 'slash';\nimport { Arguments } from 'yargs';\nimport { YargsArgs } from '../../types/yargs';\nimport {\n CONFIG_FILE,\n logError,\n logWarning,\n prompt,\n trimPathString,\n} from '../../utils';\nimport { TemplateType } from '../../builders';\n\n/**\n * This is a placeholder shasum that will be replaced at the end of the init command.\n */\nconst PLACEHOLDER_SHASUM = '2QqUxo5joo4kKKr7yiCjdYsZOZcIFBnIBEdwU9Yx7+M=';\n\nconst NPM_PUBLIC_REGISTRY_URL = 'https://registry.npmjs.org';\n\n/**\n * Initializes a `package.json` file for a Snap project. Will attempt to read\n * and parse the existing file if it already exists, otherwise will intialize\n * a brand new one.\n *\n * @param argv - Yargs arguments object.\n * @returns The contents of the `package.json` file.\n */\nexport async function asyncPackageInit(\n argv: YargsArgs,\n): Promise<Readonly<NpmSnapPackageJson>> {\n if (existsSync(NpmSnapFileNames.PackageJson)) {\n console.log(\n `Init: Attempting to use existing '${NpmSnapFileNames.PackageJson}'...`,\n );\n\n try {\n const packageJson = await readJsonFile(NpmSnapFileNames.PackageJson);\n validateSnapJsonFile(NpmSnapFileNames.PackageJson, packageJson);\n\n console.log(\n `Init: Successfully parsed '${NpmSnapFileNames.PackageJson}'!`,\n );\n return packageJson as NpmSnapPackageJson;\n } catch (error) {\n logError(\n `Init Error: Could not parse '${NpmSnapFileNames.PackageJson}'. Please verify that the file is correctly formatted and try again.`,\n error,\n );\n throw error;\n }\n }\n\n // Exit if yarn.lock is found, or we'll be in trouble\n if (existsSync('yarn.lock')) {\n logError(\n `Init Error: Found a 'yarn.lock' file but no '${NpmSnapFileNames.PackageJson}'. Please run 'yarn init' and try again.`,\n );\n throw new Error('Already existing yarn.lock file found');\n }\n\n // Run 'npm init'\n return new Promise((resolve, reject) => {\n initPackageJson(\n process.cwd(),\n '',\n {\n 'init.main': argv.src,\n },\n (err, data) => {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n },\n );\n });\n}\n\nconst YES = 'yes';\nconst YES_VALUES = new Set([YES, 'y']);\n\n/**\n * Checks if user input provided over a prompt is \"yes\", i.e., if the value is\n * truthy and in the {@link YES_VALUES} set.\n *\n * @param userInput - The user input to check.\n * @returns `true` if the user input is \"yes\", `false` otherwise.\n */\nfunction isYes(userInput: string | undefined) {\n return userInput && YES_VALUES.has(userInput.toLowerCase());\n}\n\nconst DEFAULT_PERMISSION_KEY = 'snap_confirm';\n\n/**\n * Get the default permissions to write to the snap manifest.\n *\n * @returns An object containing the default permissions.\n */\nconst getDefaultPermissions = () => {\n return { [DEFAULT_PERMISSION_KEY]: {} };\n};\n\n/**\n * Interactively constructs a Snap manifest file by prompting the user.\n *\n * @param argv - The `yargs` `argv` object.\n * @param packageJson - The `package.json` object.\n * @returns A tuple of the resulting Snap manifest object and a new `argv`\n * object with properties to match the manifest.\n */\nexport async function buildSnapManifest(\n argv: YargsArgs,\n packageJson: NpmSnapPackageJson,\n): Promise<[SnapManifest, { dist: string; outfileName: string; src: string }]> {\n const { outfileName } = argv;\n let { dist } = argv;\n let initialPermissions: Record<string, unknown> = getDefaultPermissions();\n let { description, name: proposedName } = packageJson;\n\n if (!description) {\n description = `The ${proposedName} Snap.`;\n }\n\n try {\n const userInput = await prompt({\n question: `Use default Snap manifest values?`,\n defaultValue: YES,\n shouldClose: false,\n });\n\n if (isYes(userInput)) {\n console.log('Using default values...');\n try {\n await mkdirp(dist);\n } catch (err) {\n logError(\n `Init Error: Could not write default 'dist' '${dist}'. Maybe check your local ${CONFIG_FILE} file?`,\n );\n throw err;\n }\n return endSnapManifest();\n }\n } catch (err) {\n logError(`Init Error: ${err.message}`, err);\n throw err;\n }\n\n let invalidProposedName = true;\n while (invalidProposedName) {\n // eslint-disable-next-line require-atomic-updates\n proposedName = await prompt({\n question: `Proposed Snap name:`,\n defaultValue: proposedName,\n });\n\n if (\n proposedName.length > 0 &&\n proposedName.length <= 214 &&\n PROPOSED_NAME_REGEX.test(proposedName)\n ) {\n invalidProposedName = false;\n } else {\n logError(\n `The proposed name must adhere to npm package naming conventions, except that capital letters are allowed. For details, see: https://docs.npmjs.com/cli/v6/configuring-npm/package-json#name`,\n );\n }\n }\n\n let invalidDescription = true;\n while (invalidDescription) {\n // eslint-disable-next-line require-atomic-updates\n description = await prompt({\n question: `Description:`,\n defaultValue: description,\n });\n\n if (description.length === 0 || description.length <= 280) {\n invalidDescription = false;\n } else {\n logError(\n `The description must be a non-empty string less than or equal to 280 characters.`,\n );\n }\n }\n\n let invalidDist = true;\n while (invalidDist) {\n // eslint-disable-next-line require-atomic-updates\n dist = await prompt({ question: `Output directory:`, defaultValue: dist });\n try {\n dist = trimPathString(dist);\n await mkdirp(dist);\n invalidDist = false;\n } catch (distError) {\n logError(\n `Unable to create directory '${dist}'. Ensure that the path is valid and try again.`,\n distError,\n );\n }\n }\n\n let invalidPermissions = true;\n while (invalidPermissions) {\n const inputPermissions = await prompt({\n // We add the parenthetical default value ourselves\n question: `Initial permissions: [perm1 perm2 ...] ([snap_confirm])`,\n });\n\n if (\n !inputPermissions ||\n inputPermissions.trim() === DEFAULT_PERMISSION_KEY\n ) {\n break;\n }\n\n try {\n initialPermissions = inputPermissions\n .split(' ')\n .reduce((allPermissions, permission) => {\n if (\n typeof permission === 'string' &&\n permission.match(/^[\\w\\d_:]+$/iu)\n ) {\n allPermissions[permission] = {};\n } else {\n throw new Error(`Invalid permission: ${permission}`);\n }\n return allPermissions;\n }, {} as Record<string, unknown>);\n\n invalidPermissions = false;\n } catch (err) {\n logError(\n `Invalid permissions '${inputPermissions}'.\\nThe permissions must be specified as a space-separated list of strings with only characters, digits, underscores ('_'), and colons (':').`,\n err,\n );\n }\n }\n\n return endSnapManifest();\n\n /**\n * Get the final snap manifest object and return it, along with the dist and\n * file names.\n *\n * @returns A tuple of the resulting snap manifest object and an object\n * containing the dist and file names.\n */\n function endSnapManifest(): [\n SnapManifest,\n {\n dist: string;\n outfileName: string;\n src: string;\n },\n ] {\n const manifest = {\n version: packageJson.version,\n description,\n proposedName,\n repository: packageJson.repository\n ? deepClone(packageJson.repository)\n : null,\n source: {\n shasum: PLACEHOLDER_SHASUM,\n location: {\n npm: {\n filePath: slash(pathUtils.join(dist, outfileName)),\n packageName: packageJson.name,\n registry: NPM_PUBLIC_REGISTRY_URL,\n iconPath: 'images/icon.svg',\n } as const,\n },\n },\n initialPermissions,\n manifestVersion: '0.1' as const,\n };\n\n try {\n validateSnapJsonFile(NpmSnapFileNames.Manifest, manifest);\n } catch (error) {\n /* istanbul ignore next */\n throw new Error(\n `Internal Error: Validation of constructed manifest failed. This is a bug, please report it. Reason:\\n${error.message}`,\n );\n }\n\n return [\n manifest,\n { dist, outfileName, src: packageJson.main || 'src/index.js' },\n ];\n }\n}\n\nconst INIT_FILE_NAMES = new Set([\n 'src',\n 'index.html',\n CONFIG_FILE,\n 'dist',\n NpmSnapFileNames.Manifest,\n]);\n\n/**\n * Checks whether any files in the current working directory will be overwritten\n * by the initialization process, and asks the user whether to continue if so.\n */\nexport async function prepareWorkingDirectory(): Promise<void> {\n const existingFiles = (await fs.readdir(process.cwd())).filter((item) =>\n INIT_FILE_NAMES.has(item.toString()),\n );\n\n if (existingFiles.length > 0) {\n logWarning(\n `\\nInit Warning: Existing files and/or directories may be overwritten:\\n${existingFiles.reduce(\n (message, currentFile) => {\n return `${message}\\t${currentFile}\\n`;\n },\n '',\n )}`,\n );\n\n const continueInput = await prompt({\n question: `Continue?`,\n defaultValue: YES,\n });\n const shouldContinue = continueInput && isYes(continueInput);\n\n if (!shouldContinue) {\n console.log(`Init: Exiting...`);\n throw new Error('User refused to continue');\n }\n }\n}\n\n/**\n * In case when TypeScript version is used, default source file\n * will be updated if previous was not correct.\n *\n * @param yargsArgv - The Yargs arguments object.\n * @returns Modified Yargs arguments object.\n */\nexport function correctDefaultArgs(yargsArgv: Arguments): Arguments {\n if (\n yargsArgv.template === TemplateType.TypeScript &&\n yargsArgv.src === 'src/index.js'\n ) {\n yargsArgv.src = 'src/index.ts';\n yargsArgv.s = 'src/index.ts';\n }\n\n return yargsArgv;\n}\n\n/**\n * Check if template argument is TemplateType.TypeScript.\n *\n * @param templateType - TemplateType value of the template argument passed from CLI.\n * @returns True or false.\n */\nexport function isTemplateTypescript(templateType: TemplateType): boolean {\n return templateType === TemplateType.TypeScript;\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { SnapManifest } from '@metamask/snap-controllers';
|
|
2
1
|
import { YargsArgs } from '../../types/yargs';
|
|
3
2
|
/**
|
|
4
3
|
* Validates a snap.manifest.json file. Attempts to fix the manifest and write
|
|
@@ -8,12 +7,4 @@ import { YargsArgs } from '../../types/yargs';
|
|
|
8
7
|
* @param argv - The Yargs `argv` object.
|
|
9
8
|
* @param argv.writeManifest - Whether to write the fixed manifest to disk.
|
|
10
9
|
*/
|
|
11
|
-
export declare function manifestHandler({ writeManifest
|
|
12
|
-
/**
|
|
13
|
-
* Sorts the given manifest in our preferred sort order and removes the
|
|
14
|
-
* `repository` field if it is falsy (it may be `null`).
|
|
15
|
-
*
|
|
16
|
-
* @param manifest - The manifest to sort and modify.
|
|
17
|
-
* @returns The disk-ready manifest.
|
|
18
|
-
*/
|
|
19
|
-
export declare function getWritableManifest(manifest: SnapManifest): SnapManifest;
|
|
10
|
+
export declare function manifestHandler({ writeManifest }: YargsArgs): Promise<void>;
|