@metamask/snaps-cli 0.6.3 → 0.7.0

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/CHANGELOG.md CHANGED
@@ -6,6 +6,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0]
10
+ ### Added
11
+ - ESM support for `mm-snap build` ([#185](https://github.com/MetaMask/snaps-skunkworks/pull/185))
12
+ - The `build` command can now handle snap source code that includes ESM import / export statements. They will be transpiled to their CommonJS equivalents via Babel.
13
+
14
+ ### Fixed
15
+ - Fix `mm-snap init` `src` default value ([#186](https://github.com/MetaMask/snaps-skunkworks/pull/186))
16
+ - It now correctly defaults to `src/index.js` instead of just `index.js`.
17
+ - Fix comment stripping ([#189](https://github.com/MetaMask/snaps-skunkworks/pull/189))
18
+ - Comments wouldn't be stripped under certain circumstances due to a RegEx error, details [here](https://github.com/jonschlinkert/strip-comments/pull/49).
19
+
9
20
  ## [0.6.3]
10
21
  ### Changed
11
22
  - No changes this release.
@@ -73,7 +84,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
73
84
  - Example snaps ([#72](https://github.com/MetaMask/snaps-skunkworks/pull/72))
74
85
  - The examples now live in their own package, [`@metamask/snap-examples`](https://npmjs.com/package/@metamask/snap-examples).
75
86
 
76
- [Unreleased]: https://github.com/MetaMask/snaps-skunkworks/compare/v0.6.3...HEAD
87
+ [Unreleased]: https://github.com/MetaMask/snaps-skunkworks/compare/v0.7.0...HEAD
88
+ [0.7.0]: https://github.com/MetaMask/snaps-skunkworks/compare/v0.6.3...v0.7.0
77
89
  [0.6.3]: https://github.com/MetaMask/snaps-skunkworks/compare/v0.6.2...v0.6.3
78
90
  [0.6.2]: https://github.com/MetaMask/snaps-skunkworks/compare/v0.6.1...v0.6.2
79
91
  [0.6.1]: https://github.com/MetaMask/snaps-skunkworks/compare/v0.6.0...v0.6.1
@@ -19,7 +19,27 @@ function bundle(src, dest, argv) {
19
19
  const { sourceMaps: debug } = argv;
20
20
  return new Promise((resolve, _reject) => {
21
21
  const bundleStream = bundleUtils_1.createBundleStream(dest);
22
- browserify_1.default(src, { debug }).bundle(async (bundleError, bundleBuffer) => await bundleUtils_1.closeBundleStream({
22
+ browserify_1.default(src, { debug })
23
+ .transform('babelify', {
24
+ presets: [
25
+ [
26
+ '@babel/preset-env',
27
+ {
28
+ targets: {
29
+ browsers: ['chrome >= 66', 'firefox >= 68'],
30
+ },
31
+ },
32
+ ],
33
+ ],
34
+ plugins: [
35
+ '@babel/plugin-transform-runtime',
36
+ '@babel/plugin-proposal-class-properties',
37
+ '@babel/plugin-proposal-object-rest-spread',
38
+ '@babel/plugin-proposal-optional-chaining',
39
+ '@babel/plugin-proposal-nullish-coalescing-operator',
40
+ ],
41
+ })
42
+ .bundle(async (bundleError, bundleBuffer) => await bundleUtils_1.closeBundleStream({
23
43
  bundleError,
24
44
  bundleBuffer,
25
45
  bundleStream,
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/cmds/build/bundle.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;AAEpC,+CAAsE;AAEtE;;;;;;;;GAQG;AACH,SAAgB,MAAM,CACpB,GAAW,EACX,IAAY,EACZ,IAAe;IAEf,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,YAAY,GAAG,gCAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,oBAAU,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAC/B,KAAK,EAAE,WAAW,EAAE,YAAoB,EAAE,EAAE,CAC1C,MAAM,+BAAiB,CAAC;YACtB,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,GAAG;YACH,IAAI;YACJ,OAAO;YACP,IAAI;SACL,CAAC,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAtBD,wBAsBC","sourcesContent":["import browserify from 'browserify';\nimport { YargsArgs } from '../../types/yargs';\nimport { createBundleStream, closeBundleStream } from './bundleUtils';\n\n/**\n * Builds a Snap bundle JSON 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 */\nexport function bundle(\n src: string,\n dest: string,\n argv: YargsArgs,\n): Promise<boolean> {\n const { sourceMaps: debug } = argv;\n\n return new Promise((resolve, _reject) => {\n const bundleStream = createBundleStream(dest);\n browserify(src, { debug }).bundle(\n async (bundleError, bundleBuffer: Buffer) =>\n await closeBundleStream({\n bundleError,\n bundleBuffer,\n bundleStream,\n src,\n dest,\n resolve,\n argv,\n }),\n );\n });\n}\n"]}
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/cmds/build/bundle.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;AAEpC,+CAAsE;AAEtE;;;;;;;;GAQG;AACH,SAAgB,MAAM,CACpB,GAAW,EACX,IAAY,EACZ,IAAe;IAEf,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,YAAY,GAAG,gCAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,oBAAU,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;aACvB,SAAS,CAAC,UAAU,EAAE;YACrB,OAAO,EAAE;gBACP;oBACE,mBAAmB;oBACnB;wBACE,OAAO,EAAE;4BACP,QAAQ,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;yBAC5C;qBACF;iBACF;aACF;YACD,OAAO,EAAE;gBACP,iCAAiC;gBACjC,yCAAyC;gBACzC,2CAA2C;gBAC3C,0CAA0C;gBAC1C,oDAAoD;aACrD;SACF,CAAC;aACD,MAAM,CACL,KAAK,EAAE,WAAW,EAAE,YAAoB,EAAE,EAAE,CAC1C,MAAM,+BAAiB,CAAC;YACtB,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,GAAG;YACH,IAAI;YACJ,OAAO;YACP,IAAI;SACL,CAAC,CACL,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC;AA1CD,wBA0CC","sourcesContent":["import browserify from 'browserify';\nimport { YargsArgs } from '../../types/yargs';\nimport { createBundleStream, closeBundleStream } from './bundleUtils';\n\n/**\n * Builds a Snap bundle JSON 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 */\nexport function bundle(\n src: string,\n dest: string,\n argv: YargsArgs,\n): Promise<boolean> {\n const { sourceMaps: debug } = argv;\n\n return new Promise((resolve, _reject) => {\n const bundleStream = createBundleStream(dest);\n browserify(src, { debug })\n .transform('babelify', {\n presets: [\n [\n '@babel/preset-env',\n {\n targets: {\n browsers: ['chrome >= 66', 'firefox >= 68'],\n },\n },\n ],\n ],\n plugins: [\n '@babel/plugin-transform-runtime',\n '@babel/plugin-proposal-class-properties',\n '@babel/plugin-proposal-object-rest-spread',\n '@babel/plugin-proposal-optional-chaining',\n '@babel/plugin-proposal-nullish-coalescing-operator',\n ],\n })\n .bundle(\n async (bundleError, bundleBuffer: Buffer) =>\n await closeBundleStream({\n bundleError,\n bundleBuffer,\n bundleStream,\n src,\n dest,\n resolve,\n argv,\n }),\n );\n });\n}\n"]}
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.postProcess = exports.closeBundleStream = exports.createBundleStream = void 0;
7
7
  const fs_1 = require("fs");
8
- const strip_comments_1 = __importDefault(require("strip-comments"));
8
+ const strip_comments_1 = __importDefault(require("@nodefactory/strip-comments"));
9
9
  const misc_1 = require("../../utils/misc");
10
10
  /**
11
11
  * Opens a stream to write the destination file path.
@@ -1 +1 @@
1
- {"version":3,"file":"bundleUtils.js","sourceRoot":"","sources":["../../../src/cmds/build/bundleUtils.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAuC;AACvC,oEAA2C;AAC3C,2CAA8C;AAG9C;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,sBAAiB,CAAC,IAAI,EAAE;QACrC,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,iBAAU,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,gDASC;AAYD;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CAAC,EACtC,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,GACY;IAChB,IAAI,WAAW,EAAE;QACf,MAAM,iBAAU,CAAC,cAAc,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACpE;IAED,IAAI;QACF,YAAY,CAAC,GAAG,CACd,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YACzD,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAW,CACb,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,iBAAiB,IAAI,IAAI,CAAC,CAAC;SAC9D;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;KACf;IAAC,OAAO,UAAU,EAAE;QACnB,MAAM,iBAAU,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;KACxE;AACH,CAAC;AA3BD,8CA2BC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,WAAW,CACzB,YAA2B,EAC3B,UAA2B,EAAE;IAE7B,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QACpC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAE1C,IAAI,OAAO,CAAC,aAAa,EAAE;QACzB,eAAe,GAAG,wBAAa,CAAC,eAAe,CAAC,CAAC;KAClD;IAED,wDAAwD;IACxD,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,2CAA2C,EAC3C,WAAW,CACZ,CAAC;IAEF,4EAA4E;IAC5E,8CAA8C;IAC9C,kCAAkC;IAClC,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,yBAAyB,EACzB,aAAa,CACd,CAAC;IAEF,2EAA2E;IAC3E,8EAA8E;IAC9E,qCAAqC;IACrC,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,8BAA8B,EAC9B,eAAe,CAChB,CAAC;IAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;KAChE;IAED,iDAAiD;IACjD,2BAA2B;IAC3B,IAAI,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;QACxD,eAAe,GAAG,4BAA4B,eAAe,EAAE,CAAC;KACjE;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AA/CD,kCA+CC","sourcesContent":["import { createWriteStream } from 'fs';\nimport stripComments from 'strip-comments';\nimport { writeError } from '../../utils/misc';\nimport { Option, YargsArgs } from '../../types/yargs';\n\n/**\n * Opens a stream to write the destination file path.\n *\n * @param dest - The output file path\n * @returns - The stream\n */\nexport function createBundleStream(dest: string): NodeJS.WritableStream {\n const stream = createWriteStream(dest, {\n autoClose: false,\n encoding: 'utf8',\n });\n stream.on('error', (err) => {\n writeError('Write error:', err.message, err, dest);\n });\n return stream;\n}\n\ntype CloseStreamArgs = {\n bundleError: Error;\n bundleBuffer: Buffer;\n bundleStream: NodeJS.WritableStream;\n src: string;\n dest: string;\n resolve: (value: boolean) => void;\n argv: YargsArgs;\n};\n\n/**\n * Postprocesses the bundle string and closes the write stream.\n *\n * @param stream - The write stream\n * @param bundleString - The bundle string\n * @param options - post process options\n * @param options.stripComments\n */\nexport async function closeBundleStream({\n bundleError,\n bundleBuffer,\n bundleStream,\n src,\n dest,\n resolve,\n argv,\n}: CloseStreamArgs) {\n if (bundleError) {\n await writeError('Build error:', bundleError.message, bundleError);\n }\n\n try {\n bundleStream.end(\n postProcess(bundleBuffer ? bundleBuffer.toString() : null, {\n stripComments: argv.stripComments,\n }) as string,\n );\n\n if (bundleBuffer) {\n console.log(`Build success: '${src}' bundled as '${dest}'!`);\n }\n resolve(true);\n } catch (closeError) {\n await writeError('Write error:', closeError.message, closeError, dest);\n }\n}\n\n/**\n * Postprocesses a JavaScript bundle string such that it can be evaluated in SES.\n * Currently:\n * - converts certain dot notation to string notation (for indexing)\n * - makes all direct calls to eval indirect\n * - wraps original bundle in anonymous function\n * - handles certain Babel-related edge cases\n *\n * @param bundleString - The bundle string\n * @param options - post process options\n * @param options.stripComments\n * @returns - The postprocessed bundle string\n */\nexport function postProcess(\n bundleString: string | null,\n options: Partial<Option> = {},\n): string | null {\n if (typeof bundleString !== 'string') {\n return null;\n }\n\n let processedString = bundleString.trim();\n\n if (options.stripComments) {\n processedString = stripComments(processedString);\n }\n\n // stuff.eval(otherStuff) => (1, stuff.eval)(otherStuff)\n processedString = processedString.replace(\n /((?:\\b[\\w\\d]*[\\])]?\\.)+eval)(\\([^)]*\\))/gu,\n '(1, $1)$2',\n );\n\n // if we don't do the above, the below causes syntax errors if it encounters\n // things of the form: \"something.eval(stuff)\"\n // eval(stuff) => (1, eval)(stuff)\n processedString = processedString.replace(\n /(\\b)(eval)(\\([^)]*\\))/gu,\n '$1(1, $2)$3',\n );\n\n // Browserify provides the Buffer global as an argument to modules that use\n // it, but this does not work in SES. Since we pass in Buffer as an endowment,\n // we can simply remove the argument.\n processedString = processedString.replace(\n /^\\(function \\(Buffer\\)\\{$/gmu,\n '(function (){',\n );\n\n if (processedString.length === 0) {\n throw new Error(`Bundled code is empty after postprocessing.`);\n }\n\n // handle some cases by declaring missing globals\n // Babel regeneratorRuntime\n if (processedString.indexOf('regeneratorRuntime') !== -1) {\n processedString = `var regeneratorRuntime;\\n${processedString}`;\n }\n\n return processedString;\n}\n"]}
1
+ {"version":3,"file":"bundleUtils.js","sourceRoot":"","sources":["../../../src/cmds/build/bundleUtils.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAuC;AACvC,iFAAwD;AACxD,2CAA8C;AAG9C;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,sBAAiB,CAAC,IAAI,EAAE;QACrC,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,iBAAU,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,gDASC;AAYD;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CAAC,EACtC,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,GACY;IAChB,IAAI,WAAW,EAAE;QACf,MAAM,iBAAU,CAAC,cAAc,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACpE;IAED,IAAI;QACF,YAAY,CAAC,GAAG,CACd,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YACzD,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAW,CACb,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,iBAAiB,IAAI,IAAI,CAAC,CAAC;SAC9D;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;KACf;IAAC,OAAO,UAAU,EAAE;QACnB,MAAM,iBAAU,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;KACxE;AACH,CAAC;AA3BD,8CA2BC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,WAAW,CACzB,YAA2B,EAC3B,UAA2B,EAAE;IAE7B,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QACpC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAE1C,IAAI,OAAO,CAAC,aAAa,EAAE;QACzB,eAAe,GAAG,wBAAa,CAAC,eAAe,CAAC,CAAC;KAClD;IAED,wDAAwD;IACxD,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,2CAA2C,EAC3C,WAAW,CACZ,CAAC;IAEF,4EAA4E;IAC5E,8CAA8C;IAC9C,kCAAkC;IAClC,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,yBAAyB,EACzB,aAAa,CACd,CAAC;IAEF,2EAA2E;IAC3E,8EAA8E;IAC9E,qCAAqC;IACrC,eAAe,GAAG,eAAe,CAAC,OAAO,CACvC,8BAA8B,EAC9B,eAAe,CAChB,CAAC;IAEF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;KAChE;IAED,iDAAiD;IACjD,2BAA2B;IAC3B,IAAI,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;QACxD,eAAe,GAAG,4BAA4B,eAAe,EAAE,CAAC;KACjE;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AA/CD,kCA+CC","sourcesContent":["import { createWriteStream } from 'fs';\nimport stripComments from '@nodefactory/strip-comments';\nimport { writeError } from '../../utils/misc';\nimport { Option, YargsArgs } from '../../types/yargs';\n\n/**\n * Opens a stream to write the destination file path.\n *\n * @param dest - The output file path\n * @returns - The stream\n */\nexport function createBundleStream(dest: string): NodeJS.WritableStream {\n const stream = createWriteStream(dest, {\n autoClose: false,\n encoding: 'utf8',\n });\n stream.on('error', (err) => {\n writeError('Write error:', err.message, err, dest);\n });\n return stream;\n}\n\ntype CloseStreamArgs = {\n bundleError: Error;\n bundleBuffer: Buffer;\n bundleStream: NodeJS.WritableStream;\n src: string;\n dest: string;\n resolve: (value: boolean) => void;\n argv: YargsArgs;\n};\n\n/**\n * Postprocesses the bundle string and closes the write stream.\n *\n * @param stream - The write stream\n * @param bundleString - The bundle string\n * @param options - post process options\n * @param options.stripComments\n */\nexport async function closeBundleStream({\n bundleError,\n bundleBuffer,\n bundleStream,\n src,\n dest,\n resolve,\n argv,\n}: CloseStreamArgs) {\n if (bundleError) {\n await writeError('Build error:', bundleError.message, bundleError);\n }\n\n try {\n bundleStream.end(\n postProcess(bundleBuffer ? bundleBuffer.toString() : null, {\n stripComments: argv.stripComments,\n }) as string,\n );\n\n if (bundleBuffer) {\n console.log(`Build success: '${src}' bundled as '${dest}'!`);\n }\n resolve(true);\n } catch (closeError) {\n await writeError('Write error:', closeError.message, closeError, dest);\n }\n}\n\n/**\n * Postprocesses a JavaScript bundle string such that it can be evaluated in SES.\n * Currently:\n * - converts certain dot notation to string notation (for indexing)\n * - makes all direct calls to eval indirect\n * - wraps original bundle in anonymous function\n * - handles certain Babel-related edge cases\n *\n * @param bundleString - The bundle string\n * @param options - post process options\n * @param options.stripComments\n * @returns - The postprocessed bundle string\n */\nexport function postProcess(\n bundleString: string | null,\n options: Partial<Option> = {},\n): string | null {\n if (typeof bundleString !== 'string') {\n return null;\n }\n\n let processedString = bundleString.trim();\n\n if (options.stripComments) {\n processedString = stripComments(processedString);\n }\n\n // stuff.eval(otherStuff) => (1, stuff.eval)(otherStuff)\n processedString = processedString.replace(\n /((?:\\b[\\w\\d]*[\\])]?\\.)+eval)(\\([^)]*\\))/gu,\n '(1, $1)$2',\n );\n\n // if we don't do the above, the below causes syntax errors if it encounters\n // things of the form: \"something.eval(stuff)\"\n // eval(stuff) => (1, eval)(stuff)\n processedString = processedString.replace(\n /(\\b)(eval)(\\([^)]*\\))/gu,\n '$1(1, $2)$3',\n );\n\n // Browserify provides the Buffer global as an argument to modules that use\n // it, but this does not work in SES. Since we pass in Buffer as an endowment,\n // we can simply remove the argument.\n processedString = processedString.replace(\n /^\\(function \\(Buffer\\)\\{$/gmu,\n '(function (){',\n );\n\n if (processedString.length === 0) {\n throw new Error(`Bundled code is empty after postprocessing.`);\n }\n\n // handle some cases by declaring missing globals\n // Babel regeneratorRuntime\n if (processedString.indexOf('regeneratorRuntime') !== -1) {\n processedString = `var regeneratorRuntime;\\n${processedString}`;\n }\n\n return processedString;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/snaps-cli",
3
- "version": "0.6.3",
3
+ "version": "0.7.0",
4
4
  "description": "A CLI for developing MetaMask Snaps.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  "build:chmod": "chmod +x ./dist/main.js",
22
22
  "build": "yarn build:init-template && yarn build:typescript && yarn build:chmod",
23
23
  "build:pre-tsc": "echo 'N/A'",
24
- "build:post-tsc": "./scripts/publish-prep.sh",
24
+ "build:post-tsc": "yarn build:init-template && yarn build:chmod",
25
25
  "build:clean": "yarn clean && yarn build",
26
26
  "build:watch": "tsc-watch --onSuccess 'yarn build:chmod'",
27
27
  "clean": "rimraf dist/*",
@@ -36,7 +36,16 @@
36
36
  "publish": "../../scripts/publish-package.sh"
37
37
  },
38
38
  "dependencies": {
39
- "@metamask/snap-controllers": "^0.6.3",
39
+ "@babel/core": "^7.16.7",
40
+ "@babel/plugin-proposal-class-properties": "^7.16.7",
41
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
42
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
43
+ "@babel/plugin-proposal-optional-chaining": "^7.16.7",
44
+ "@babel/plugin-transform-runtime": "^7.16.7",
45
+ "@babel/preset-env": "^7.16.7",
46
+ "@metamask/snap-controllers": "^0.7.0",
47
+ "@nodefactory/strip-comments": "^1.0.2",
48
+ "babelify": "^10.0.0",
40
49
  "browserify": "^17.0.0",
41
50
  "chokidar": "^3.0.2",
42
51
  "fast-deep-equal": "^2.0.1",
@@ -47,7 +56,6 @@
47
56
  "serve-handler": "^6.1.1",
48
57
  "ses": "^0.15.3",
49
58
  "slash": "^3.0.0",
50
- "strip-comments": "^2.0.1",
51
59
  "yargs": "^16.2.0",
52
60
  "yargs-parser": "^20.2.2"
53
61
  },
@@ -66,7 +74,6 @@
66
74
  "@types/node": "^14.14.25",
67
75
  "@types/rimraf": "^3.0.0",
68
76
  "@types/serve-handler": "^6.1.0",
69
- "@types/strip-comments": "^2.0.0",
70
77
  "@types/yargs": "^15.0.12",
71
78
  "@typescript-eslint/eslint-plugin": "^4.28.1",
72
79
  "@typescript-eslint/parser": "^4.28.1",
@@ -78,6 +85,7 @@
78
85
  "eslint-plugin-node": "^11.1.0",
79
86
  "eslint-plugin-prettier": "^3.4.0",
80
87
  "jest": "^26.6.3",
88
+ "patch-package": "^6.4.7",
81
89
  "prettier": "^2.3.2",
82
90
  "rimraf": "^3.0.2",
83
91
  "ts-jest": "^26.5.6",