Skip to content

Commit 0e43ecd

Browse files
committed
feat: add prompt so users can subscribe to newsletter (#3cnng7)
1 parent d1d1353 commit 0e43ecd

File tree

11 files changed

+213
-21
lines changed

11 files changed

+213
-21
lines changed

lib/create-package/createExampleFiles.js

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ function createExampleFiles(createPackageCwd, packageName, namespace) {
1818
utils_1.logProgress("Create example PHP and TSX file in " + chalk_1.default.underline(createPackageCwd) + "...");
1919
var indexTsx = "import \"setimmediate\"; // Polyfill for yielding\n\nfunction sayHello() {\n console.log(\"Hello from " + packageName + "\");\n}\n\nexport { sayHello };\n";
2020
var myClassPhp = "<?php\nnamespace " + namespace + ";\n\nclass MyClass {\n public function __construct() {\n // Do something here!\n }\n}";
21+
fs_extra_1.mkdirSync(path_1.resolve(createPackageCwd, "lib"));
22+
fs_extra_1.mkdirSync(path_1.resolve(createPackageCwd, "src"));
2123
fs_extra_1.writeFileSync(path_1.resolve(createPackageCwd, "lib", "index.tsx"), indexTsx);
2224
fs_extra_1.writeFileSync(path_1.resolve(createPackageCwd, "src", "MyClass.php"), myClassPhp);
2325
utils_1.logSuccess("Successfully created example files!");

lib/create-package/prompt.js

+13-7
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ var _1 = require("./");
5555
var utils_1 = require("../utils");
5656
var path_1 = require("path");
5757
var slugify_1 = __importDefault(require("slugify"));
58+
var misc_1 = require("../misc");
5859
/**
5960
* Prompt for CLI arguments which are not passed.
6061
*
@@ -151,9 +152,14 @@ function createPackagePrompt(_a) {
151152
_c.label = 2;
152153
case 2:
153154
answers = _b;
154-
_c.label = 3;
155+
// If there is no package name given via CLI also ask for email marketing
156+
return [4 /*yield*/, misc_1.newsletterPrompt(!mockData && !packageName)];
155157
case 3:
156-
_c.trys.push([3, 5, , 6]);
158+
// If there is no package name given via CLI also ask for email marketing
159+
_c.sent();
160+
_c.label = 4;
161+
case 4:
162+
_c.trys.push([4, 6, , 7]);
157163
parsed = __assign({ cwd: cwd,
158164
packageName: packageName,
159165
packageDesc: packageDesc,
@@ -164,14 +170,14 @@ function createPackagePrompt(_a) {
164170
parsed.namespace = parsed.namespace.replace(/\\\\/g, "\\");
165171
parsed = utils_1.caseAll(parsed, [], ["abbreviation", "packageName", "packageUri"]);
166172
return [4 /*yield*/, _1.createPackageExecute(root, parsed)];
167-
case 4:
168-
_c.sent();
169-
return [3 /*break*/, 6];
170173
case 5:
174+
_c.sent();
175+
return [3 /*break*/, 7];
176+
case 6:
171177
e_1 = _c.sent();
172178
utils_1.logError(e_1.toString());
173-
return [3 /*break*/, 6];
174-
case 6: return [2 /*return*/];
179+
return [3 /*break*/, 7];
180+
case 7: return [2 /*return*/];
175181
}
176182
});
177183
});

lib/create-plugin/prompt.js

+20-14
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ var _1 = require("./");
5555
var utils_1 = require("../utils");
5656
var path_1 = require("path");
5757
var slugify_1 = __importDefault(require("slugify"));
58+
var misc_1 = require("../misc");
5859
/**
5960
* Prompt for CLI arguments which are not passed.
6061
*
@@ -227,9 +228,14 @@ function createPluginPrompt(_a, before, after) {
227228
_c.label = 2;
228229
case 2:
229230
answers = _b;
230-
_c.label = 3;
231+
// If there is no plugin name given via CLI also ask for email marketing
232+
return [4 /*yield*/, misc_1.newsletterPrompt(!mockData && !pluginName)];
231233
case 3:
232-
_c.trys.push([3, 9, , 10]);
234+
// If there is no plugin name given via CLI also ask for email marketing
235+
_c.sent();
236+
_c.label = 4;
237+
case 4:
238+
_c.trys.push([4, 10, , 11]);
233239
parsed = __assign({ cwd: cwd,
234240
pluginName: pluginName,
235241
slug: slug,
@@ -246,30 +252,30 @@ function createPluginPrompt(_a, before, after) {
246252
constantPrefix: constantPrefix }, answers);
247253
parsed.namespace = parsed.namespace.replace(/\\\\/g, "\\");
248254
parsed = utils_1.caseAll(parsed, ["constantPrefix"], ["slug", "pluginUri", "authorUri", "optPrefix", "dbPrefix"]);
249-
if (!before) return [3 /*break*/, 5];
255+
if (!before) return [3 /*break*/, 6];
250256
return [4 /*yield*/, before()];
251-
case 4:
252-
_c.sent();
253-
_c.label = 5;
254257
case 5:
258+
_c.sent();
259+
_c.label = 6;
260+
case 6:
255261
// Root can be lazy due create-workspace command
256262
if (!root) {
257263
root = utils_1.checkValidWorkspace(createWorkspaceCwd, _1.createPluginCommand);
258264
}
259265
return [4 /*yield*/, _1.createPluginExecute(root, parsed, !!before)];
260-
case 6:
266+
case 7:
261267
createPluginCwd = _c.sent();
262-
if (!after) return [3 /*break*/, 8];
268+
if (!after) return [3 /*break*/, 9];
263269
return [4 /*yield*/, after(createPluginCwd, parsed)];
264-
case 7:
270+
case 8:
265271
_c.sent();
266-
_c.label = 8;
267-
case 8: return [3 /*break*/, 10];
268-
case 9:
272+
_c.label = 9;
273+
case 9: return [3 /*break*/, 11];
274+
case 10:
269275
e_1 = _c.sent();
270276
utils_1.logError(e_1.toString());
271-
return [3 /*break*/, 10];
272-
case 10: return [2 /*return*/];
277+
return [3 /*break*/, 11];
278+
case 11: return [2 /*return*/];
273279
}
274280
});
275281
});

lib/misc/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ __export(require("./modifyRootGitLabCiInclude"));
88
__export(require("./applyPackageJson"));
99
__export(require("./applyPhpNamespace"));
1010
__export(require("./regenerateLaunchJson"));
11+
__export(require("./newsletterPrompt"));

lib/misc/newsletterPrompt.js

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4+
return new (P || (P = Promise))(function (resolve, reject) {
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9+
});
10+
};
11+
var __generator = (this && this.__generator) || function (thisArg, body) {
12+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14+
function verb(n) { return function (v) { return step([n, v]); }; }
15+
function step(op) {
16+
if (f) throw new TypeError("Generator is already executing.");
17+
while (_) try {
18+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19+
if (y = 0, t) op = [op[0] & 2, t.value];
20+
switch (op[0]) {
21+
case 0: case 1: t = op; break;
22+
case 4: _.label++; return { value: op[1], done: false };
23+
case 5: _.label++; y = op[1]; op = [0]; continue;
24+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
25+
default:
26+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30+
if (t[2]) _.ops.pop();
31+
_.trys.pop(); continue;
32+
}
33+
op = body.call(thisArg, _);
34+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36+
}
37+
};
38+
var __importDefault = (this && this.__importDefault) || function (mod) {
39+
return (mod && mod.__esModule) ? mod : { "default": mod };
40+
};
41+
Object.defineProperty(exports, "__esModule", { value: true });
42+
var chalk_1 = __importDefault(require("chalk"));
43+
var inquirer_1 = require("inquirer");
44+
var utils_1 = require("../utils");
45+
var terminal_link_1 = __importDefault(require("terminal-link"));
46+
var axios_1 = __importDefault(require("axios"));
47+
function newsletterPrompt(condition) {
48+
return __awaiter(this, void 0, void 0, function () {
49+
var email, _a, e_1;
50+
return __generator(this, function (_b) {
51+
switch (_b.label) {
52+
case 0:
53+
_a = condition;
54+
if (!_a) return [3 /*break*/, 2];
55+
return [4 /*yield*/, inquirer_1.prompt([
56+
{
57+
name: "email",
58+
message: "You will \u2665 create-wp-react-app and wp-react-starter! Would you like to be informed about updates via e-mail (you agree " + terminal_link_1.default("devowl.io privacy policy", "https://devowl.io/privacy-policy/") + ")? Enter your e-mail:",
59+
type: "input",
60+
validate: function (value) {
61+
// eslint-disable-next-line no-useless-escape
62+
return !value ||
63+
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(value)
64+
? true
65+
: "This is not an valid email.";
66+
}
67+
}
68+
])];
69+
case 1:
70+
_a = (_b.sent());
71+
_b.label = 2;
72+
case 2:
73+
email = (_a).email;
74+
if (!email) return [3 /*break*/, 6];
75+
utils_1.logProgress("Registering on newsletter...");
76+
_b.label = 3;
77+
case 3:
78+
_b.trys.push([3, 5, , 6]);
79+
return [4 /*yield*/, axios_1.default.post("https://devowl.io/wp-json/devowl-site/v1/plugin-activation-newsletter", {
80+
email: email,
81+
referer: "localhost",
82+
slug: "create-wp-react-app"
83+
})];
84+
case 4:
85+
_b.sent();
86+
utils_1.logSuccess("Successfully registered " + chalk_1.default.underline(email) + "!");
87+
return [3 /*break*/, 6];
88+
case 5:
89+
e_1 = _b.sent();
90+
utils_1.logError("Error while newsletter registration, skipping (" + e_1 + ")...");
91+
return [3 /*break*/, 6];
92+
case 6: return [2 /*return*/];
93+
}
94+
});
95+
});
96+
}
97+
exports.newsletterPrompt = newsletterPrompt;

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"endOfLine": "lf"
6363
},
6464
"dependencies": {
65+
"axios": "^0.19.2",
6566
"chalk": "^3.0.0",
6667
"commander": "^4.0.1",
6768
"execa": "^4.0.0",

src/create-package/prompt.ts

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
} from "../utils";
1515
import { resolve } from "path";
1616
import slugify from "slugify";
17+
import { newsletterPrompt } from "../misc";
1718

1819
/**
1920
* Prompt for CLI arguments which are not passed.
@@ -115,6 +116,9 @@ async function createPackagePrompt({
115116
].filter(Boolean)
116117
));
117118

119+
// If there is no package name given via CLI also ask for email marketing
120+
await newsletterPrompt(!(mockData as any) && !packageName);
121+
118122
try {
119123
let parsed = {
120124
cwd,

src/create-plugin/prompt.ts

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
} from "../utils";
1616
import { resolve } from "path";
1717
import slugify from "slugify";
18+
import { newsletterPrompt } from "../misc";
1819

1920
/**
2021
* Prompt for CLI arguments which are not passed.
@@ -205,6 +206,9 @@ async function createPluginPrompt(
205206
].filter(Boolean)
206207
));
207208

209+
// If there is no plugin name given via CLI also ask for email marketing
210+
await newsletterPrompt(!(mockData as any) && !pluginName);
211+
208212
try {
209213
let parsed = {
210214
cwd,

src/misc/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from "./modifyRootGitLabCiInclude";
33
export * from "./applyPackageJson";
44
export * from "./applyPhpNamespace";
55
export * from "./regenerateLaunchJson";
6+
export * from "./newsletterPrompt";

src/misc/newsletterPrompt.ts

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import chalk from "chalk";
2+
import { prompt } from "inquirer";
3+
import { logProgress, logSuccess, logError } from "../utils";
4+
import terminalLink from "terminal-link";
5+
import axios from "axios";
6+
7+
async function newsletterPrompt(condition: boolean) {
8+
const { email }: { email: string } =
9+
condition &&
10+
(await prompt([
11+
{
12+
name: "email",
13+
message: `You will ♥ create-wp-react-app and wp-react-starter! Would you like to be informed about updates via e-mail (you agree ${terminalLink(
14+
"devowl.io privacy policy",
15+
"https://devowl.io/privacy-policy/"
16+
)})? Enter your e-mail:`,
17+
type: "input",
18+
validate: (value: string) =>
19+
// eslint-disable-next-line no-useless-escape
20+
!value ||
21+
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
22+
value
23+
)
24+
? true
25+
: "This is not an valid email."
26+
}
27+
]));
28+
29+
if (email) {
30+
logProgress("Registering on newsletter...");
31+
try {
32+
await axios.post("https://devowl.io/wp-json/devowl-site/v1/plugin-activation-newsletter", {
33+
email,
34+
referer: "localhost",
35+
slug: "create-wp-react-app"
36+
});
37+
logSuccess(`Successfully registered ${chalk.underline(email)}!`);
38+
} catch (e) {
39+
logError(`Error while newsletter registration, skipping (${e})...`);
40+
}
41+
}
42+
}
43+
44+
export { newsletterPrompt };

yarn.lock

+26
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,13 @@ asynckit@^0.4.0:
432432
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
433433
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
434434

435+
axios@^0.19.2:
436+
version "0.19.2"
437+
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
438+
integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
439+
dependencies:
440+
follow-redirects "1.5.10"
441+
435442
436443
version "6.26.0"
437444
resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
@@ -739,6 +746,13 @@ date-fns@^1.27.2:
739746
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
740747
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
741748

749+
debug@=3.1.0:
750+
version "3.1.0"
751+
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
752+
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
753+
dependencies:
754+
ms "2.0.0"
755+
742756
debug@^4.0.1, debug@^4.1.1:
743757
version "4.1.1"
744758
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
@@ -1078,6 +1092,13 @@ flatted@^2.0.0:
10781092
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
10791093
integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
10801094

1095+
1096+
version "1.5.10"
1097+
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
1098+
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
1099+
dependencies:
1100+
debug "=3.1.0"
1101+
10811102
form-data@^3.0.0:
10821103
version "3.0.0"
10831104
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
@@ -1726,6 +1747,11 @@ mri@^1.1.4:
17261747
resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a"
17271748
integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==
17281749

1750+
1751+
version "2.0.0"
1752+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1753+
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1754+
17291755
ms@^2.1.1:
17301756
version "2.1.2"
17311757
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"

0 commit comments

Comments
 (0)