diff --git a/docs/manifest-devhub.json b/docs/manifest-devhub.json
index 94f21727035536..7a5e9d2565b584 100644
--- a/docs/manifest-devhub.json
+++ b/docs/manifest-devhub.json
@@ -1049,6 +1049,12 @@
"markdown_source": "../packages/autop/README.md",
"parent": "packages"
},
+ {
+ "title": "@wordpress/babel-block.macro",
+ "slug": "packages-babel-block.macro",
+ "markdown_source": "../packages/babel-block.macro/README.md",
+ "parent": "packages"
+ },
{
"title": "@wordpress/babel-plugin-import-jsx-pragma",
"slug": "packages-babel-plugin-import-jsx-pragma",
diff --git a/package-lock.json b/package-lock.json
index aa639527442e65..2a33d78151a0b0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3226,6 +3226,13 @@
"@babel/runtime": "^7.4.4"
}
},
+ "@wordpress/babel-block.macro": {
+ "version": "file:packages/babel-block.macro",
+ "dev": true,
+ "requires": {
+ "babel-plugin-macros": "^2.6.1"
+ }
+ },
"@wordpress/babel-plugin-import-jsx-pragma": {
"version": "file:packages/babel-plugin-import-jsx-pragma",
"dev": true
@@ -4671,6 +4678,79 @@
"@types/babel__traverse": "^7.0.6"
}
},
+ "babel-plugin-macros": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz",
+ "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.4.2",
+ "cosmiconfig": "^5.2.0",
+ "resolve": "^1.10.0"
+ },
+ "dependencies": {
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+ "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "babel-plugin-tester": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-tester/-/babel-plugin-tester-6.2.1.tgz",
+ "integrity": "sha512-ELsxMOKGzgVkxWnbd4g9nnbbymQFjGrV9bMO3isuc7KIcdoVm8JoSf252DCoFr4iuS/mMmemM9Q8x+UD37U+6g==",
+ "dev": true,
+ "requires": {
+ "common-tags": "^1.4.0",
+ "invariant": "^2.2.2",
+ "lodash.merge": "^4.6.0",
+ "path-exists": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
"babel-preset-jest": {
"version": "24.6.0",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz",
@@ -6457,6 +6537,12 @@
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
"dev": true
},
+ "common-tags": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+ "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
+ "dev": true
+ },
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
@@ -14140,6 +14226,12 @@
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
+ "lodash.merge": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
+ "dev": true
+ },
"lodash.set": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
diff --git a/package.json b/package.json
index 4ff2130f820687..ee085bb1a326ba 100644
--- a/package.json
+++ b/package.json
@@ -69,6 +69,7 @@
"@babel/runtime-corejs3": "7.4.4",
"@babel/traverse": "7.4.4",
"@octokit/rest": "16.26.0",
+ "@wordpress/babel-block.macro": "file:packages/babel-block.macro",
"@wordpress/babel-plugin-import-jsx-pragma": "file:packages/babel-plugin-import-jsx-pragma",
"@wordpress/babel-plugin-makepot": "file:packages/babel-plugin-makepot",
"@wordpress/babel-preset-default": "file:packages/babel-preset-default",
@@ -87,6 +88,7 @@
"@wordpress/postcss-themes": "file:packages/postcss-themes",
"@wordpress/scripts": "file:packages/scripts",
"babel-plugin-inline-json-import": "0.3.2",
+ "babel-plugin-tester": "^6.2.1",
"benchmark": "2.1.4",
"browserslist": "4.6.2",
"chalk": "2.4.1",
diff --git a/packages/babel-block.macro/.npmrc b/packages/babel-block.macro/.npmrc
new file mode 100644
index 00000000000000..43c97e719a5a82
--- /dev/null
+++ b/packages/babel-block.macro/.npmrc
@@ -0,0 +1 @@
+package-lock=false
diff --git a/packages/babel-block.macro/README.md b/packages/babel-block.macro/README.md
new file mode 100644
index 00000000000000..6d06593f6a98d2
--- /dev/null
+++ b/packages/babel-block.macro/README.md
@@ -0,0 +1,13 @@
+# Babel Block Macro
+
+Babel block macro.
+
+## Installation
+
+Install the module to your project using [npm](https://www.npmjs.com/).
+
+```bash
+npm install @wordpress/babel-block.macro
+```
+
+