create-checkly 0.0.3 → 4.0.10-prerelease
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/actions/creates.d.ts +4 -0
- package/dist/actions/creates.js +28 -0
- package/dist/actions/creates.js.map +1 -0
- package/dist/actions/dependencies.d.ts +3 -0
- package/dist/actions/dependencies.js +39 -0
- package/dist/actions/dependencies.js.map +1 -0
- package/dist/actions/git.d.ts +1 -0
- package/dist/actions/git.js +19 -0
- package/dist/actions/git.js.map +1 -0
- package/dist/actions/template.d.ts +6 -0
- package/dist/actions/template.js +27 -0
- package/dist/actions/template.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +4 -0
- package/dist/commands/bootstrap.js +20 -109
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/utils/directory.d.ts +14 -1
- package/dist/utils/directory.js +58 -2
- package/dist/utils/directory.js.map +1 -1
- package/dist/utils/installation.d.ts +16 -0
- package/dist/utils/installation.js +60 -0
- package/dist/utils/installation.js.map +1 -0
- package/dist/utils/messages.d.ts +1 -2
- package/dist/utils/messages.js +4 -7
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/prompts.d.ts +21 -0
- package/dist/utils/prompts.js +73 -0
- package/dist/utils/prompts.js.map +1 -0
- package/index.mjs +5 -5
- package/package.json +10 -39
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { isValidUrl } from '../utils/directory.js';
|
|
4
|
+
import { askCreateInitialBrowserCheck, askUserWebsite } from '../utils/prompts.js';
|
|
5
|
+
// Default Playwright-based Browser Check
|
|
6
|
+
const defaultBrowserCheck = `import { test, expect } from '@playwright/test'
|
|
7
|
+
|
|
8
|
+
// You can override the default Playwright test timeout of 30s
|
|
9
|
+
// test.setTimeout(60_000);
|
|
10
|
+
|
|
11
|
+
test('Custom Browser Check', async ({ page }) => {
|
|
12
|
+
const response = await page.goto('URL_TO_CHECK')
|
|
13
|
+
expect(response?.status()).toBeLessThan(400)
|
|
14
|
+
await page.screenshot({ path: 'screenshot.jpg' })
|
|
15
|
+
})`;
|
|
16
|
+
export async function createCustomBrowserCheck({ projectDirectory, onCancel }) {
|
|
17
|
+
const { createInitialBrowserCheck } = await askCreateInitialBrowserCheck(onCancel);
|
|
18
|
+
if (createInitialBrowserCheck) {
|
|
19
|
+
const { userWebsite } = await askUserWebsite(onCancel);
|
|
20
|
+
if (isValidUrl(userWebsite)) {
|
|
21
|
+
fs.writeFileSync(path.join(projectDirectory, './__checks__/custom.spec.ts'), defaultBrowserCheck.replace(/URL_TO_CHECK/i, new URL(userWebsite).toString()));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
process.stdout.write('Custom check wasn\'t created: the specified URL isn\'t valid.\n');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=creates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creates.js","sourceRoot":"","sources":["../../src/actions/creates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAElF,yCAAyC;AACzC,MAAM,mBAAmB,GAAG;;;;;;;;;GASzB,CAAA;AAEH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAE,gBAAgB,EAAE,QAAQ,EAAsD;IAElF,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,4BAA4B,CAAC,QAAQ,CAAC,CAAA;IAElF,IAAI,yBAAyB,EAAE;QAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAA;QAEtD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE;YAC3B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,EACzE,mBAAmB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;SACjF;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAA;SACxF;KACF;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import detectPackageManager from 'which-pm-runs';
|
|
4
|
+
import { execa } from 'execa';
|
|
5
|
+
import { spinner } from '../utils/terminal.js';
|
|
6
|
+
import { hint } from '../utils/messages.js';
|
|
7
|
+
import { askInstallDependencies } from '../utils/prompts.js';
|
|
8
|
+
export function addDevDependecies(projectDirectory, packageJson) {
|
|
9
|
+
if (!Reflect.has(packageJson, 'devDependencies')) {
|
|
10
|
+
packageJson.devDependencies = {};
|
|
11
|
+
}
|
|
12
|
+
Object.assign(packageJson.devDependencies, {
|
|
13
|
+
checkly: 'latest',
|
|
14
|
+
'ts-node': 'latest',
|
|
15
|
+
typescript: 'latest',
|
|
16
|
+
});
|
|
17
|
+
fs.writeFileSync(path.join(projectDirectory, 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
18
|
+
}
|
|
19
|
+
export async function installDependencies(targetDir) {
|
|
20
|
+
const { installDependencies } = await askInstallDependencies();
|
|
21
|
+
if (installDependencies) {
|
|
22
|
+
const packageManager = detectPackageManager()?.name || 'npm';
|
|
23
|
+
const installExec = execa(packageManager, ['install'], { cwd: targetDir });
|
|
24
|
+
const installSpinner = spinner('installing packages');
|
|
25
|
+
await new Promise((resolve, reject) => {
|
|
26
|
+
installExec.stdout?.on('data', function (data) {
|
|
27
|
+
installSpinner.text = `installing \n${packageManager} ${data}`;
|
|
28
|
+
});
|
|
29
|
+
installExec.on('error', (error) => reject(error));
|
|
30
|
+
installExec.on('close', () => resolve());
|
|
31
|
+
});
|
|
32
|
+
installSpinner.text = 'Packages installed successfully';
|
|
33
|
+
installSpinner.succeed();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
await hint('No worries.', 'Just remember to install the dependencies after this setup');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/actions/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,oBAAoB,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,MAAM,UAAU,iBAAiB,CAAE,gBAAwB,EAAE,WAAwB;IACnF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE;QAChD,WAAW,CAAC,eAAe,GAAG,EAAE,CAAA;KACjC;IAED,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE;QACzC,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,QAAQ;KACrB,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACrG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAE,SAAiB;IAC1D,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAA;IAE9D,IAAI,mBAAmB,EAAE;QACvB,MAAM,cAAc,GAAG,oBAAoB,EAAE,EAAE,IAAI,IAAI,KAAK,CAAA;QAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;QAC1E,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACrD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,IAAI;gBAC3C,cAAc,CAAC,IAAI,GAAG,gBAAgB,cAAc,IAAI,IAAI,EAAE,CAAA;YAChE,CAAC,CAAC,CAAA;YACF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACjD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;QACF,cAAc,CAAC,IAAI,GAAG,iCAAiC,CAAA;QACvD,cAAc,CAAC,OAAO,EAAE,CAAA;KACzB;SAAM;QACL,MAAM,IAAI,CAAC,aAAa,EAAE,4DAA4D,CAAC,CAAA;KACxF;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function initGit(targetDir: string): Promise<void>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { hasGitDir, hasGitIgnore } from '../utils/directory.js';
|
|
4
|
+
import { execaCommand } from 'execa';
|
|
5
|
+
import { askInitializeGit } from '../utils/prompts.js';
|
|
6
|
+
export async function initGit(targetDir) {
|
|
7
|
+
if (hasGitDir(targetDir)) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const { initializeGit } = await askInitializeGit();
|
|
11
|
+
if (initializeGit) {
|
|
12
|
+
await execaCommand('git init', { cwd: targetDir });
|
|
13
|
+
if (!hasGitIgnore(targetDir)) {
|
|
14
|
+
const gitIgnore = 'node_modules\n.DS_Store';
|
|
15
|
+
fs.writeFileSync(path.join(targetDir, '.gitignore'), gitIgnore);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/actions/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAE,SAAiB;IAC9C,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE;QACxB,OAAM;KACP;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,gBAAgB,EAAE,CAAA;IAElD,IAAI,aAAa,EAAE;QACjB,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAA;QAElD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;YAC5B,MAAM,SAAS,GAAG,yBAAyB,CAAA;YAC3C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAA;SAChE;KACF;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { downloadTemplate } from 'giget';
|
|
3
|
+
import { spinner } from '../utils/terminal.js';
|
|
4
|
+
export async function copyTemplate({ template, templatePath, targetDir }) {
|
|
5
|
+
const downloadTemplateSpinner = spinner('Downloading example template...');
|
|
6
|
+
try {
|
|
7
|
+
await downloadTemplate(templatePath, {
|
|
8
|
+
force: true,
|
|
9
|
+
cwd: targetDir,
|
|
10
|
+
dir: '.',
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
if (e.message.includes('404')) {
|
|
15
|
+
downloadTemplateSpinner.text = chalk.red(`Couldn't find template "${template}"`);
|
|
16
|
+
downloadTemplateSpinner.fail();
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// eslint-disable-next-line
|
|
20
|
+
console.error(e.message);
|
|
21
|
+
}
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
downloadTemplateSpinner.text = chalk.green('Example template copied!');
|
|
25
|
+
downloadTemplateSpinner.succeed();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/actions/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAQ9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAqB;IAC1F,MAAM,uBAAuB,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAA;IAE1E,IAAI;QACF,MAAM,gBAAgB,CAAC,YAAY,EAAE;YACnC,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,SAAS;YACd,GAAG,EAAE,GAAG;SACT,CAAC,CAAA;KACH;IAAC,OAAO,CAAM,EAAE;QACf,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC7B,uBAAuB,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,2BAA2B,QAAQ,GAAG,CAAC,CAAA;YAChF,uBAAuB,CAAC,IAAI,EAAE,CAAA;SAC/B;aAAM;YACL,2BAA2B;YAC3B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;SACzB;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;IAED,uBAAuB,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IACtE,uBAAuB,CAAC,OAAO,EAAE,CAAA;AACnC,CAAC"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
|
+
/**
|
|
3
|
+
* This code is heavily inspired by the amazing create-astro package over at
|
|
4
|
+
* https://github.com/withastro/astro/tree/main/packages/create-astro
|
|
5
|
+
*/
|
|
2
6
|
export default class Bootstrap extends Command {
|
|
3
7
|
static description: string;
|
|
4
8
|
static flags: {
|
|
@@ -1,130 +1,41 @@
|
|
|
1
|
-
import Debug from 'debug';
|
|
2
1
|
import { Command, Flags } from '@oclif/core';
|
|
3
|
-
import { uniqueNamesGenerator, colors, animals } from 'unique-names-generator';
|
|
4
2
|
import prompts from 'prompts';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import chalk from 'chalk';
|
|
9
|
-
import { isValidProjectDirectory, hasGitDir } from '../utils/directory.js';
|
|
10
|
-
import { spinner } from '../utils/terminal.js';
|
|
11
|
-
import { getUserGreeting, getVersion, header, bail, hint, footer, } from '../utils/messages.js';
|
|
3
|
+
import { getUserGreeting, header, bail, footer, hint, } from '../utils/messages.js';
|
|
4
|
+
import { hasPackageJsonFile } from '../utils/directory.js';
|
|
5
|
+
import { createProject, getProjectDirectory, installDependenciesAndInitGit, installWithinProject, } from '../utils/installation.js';
|
|
12
6
|
/**
|
|
13
7
|
* This code is heavily inspired by the amazing create-astro package over at
|
|
14
8
|
* https://github.com/withastro/astro/tree/main/packages/create-astro
|
|
15
9
|
*/
|
|
16
|
-
const debug = Debug('checkly:create-cli');
|
|
17
|
-
const templateBaseRepo = 'checkly/checkly-cli/examples';
|
|
18
|
-
function generateProjectName() {
|
|
19
|
-
return uniqueNamesGenerator({
|
|
20
|
-
dictionaries: [colors, animals],
|
|
21
|
-
separator: '-',
|
|
22
|
-
length: 2,
|
|
23
|
-
style: 'lowerCase',
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
function onCancel() {
|
|
27
|
-
bail();
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
10
|
export default class Bootstrap extends Command {
|
|
31
11
|
async run() {
|
|
32
12
|
const { flags } = await this.parse(Bootstrap);
|
|
33
13
|
const { template } = flags;
|
|
14
|
+
const onCancel = () => {
|
|
15
|
+
bail();
|
|
16
|
+
// TODO: replace this with oclif error()
|
|
17
|
+
process.exit(1);
|
|
18
|
+
};
|
|
34
19
|
// This overrides the template prompt and skips to the next prompt
|
|
35
20
|
if (template) {
|
|
36
21
|
prompts.override({ template });
|
|
37
22
|
}
|
|
38
|
-
const
|
|
23
|
+
const version = process.env.CHECKLY_CLI_VERSION ?? this.config.version;
|
|
24
|
+
const greeting = await getUserGreeting();
|
|
39
25
|
await header(version, greeting);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
message: 'Where do you want to create your new project?',
|
|
45
|
-
initial: generateProjectName(),
|
|
46
|
-
validate(dirName) {
|
|
47
|
-
if (!isValidProjectDirectory(dirName)) {
|
|
48
|
-
return `"${chalk.bold(dirName)}" is not empty!`;
|
|
49
|
-
}
|
|
50
|
-
return true;
|
|
51
|
-
},
|
|
52
|
-
}, { onCancel });
|
|
53
|
-
const targetDir = projectDirResponse.projectDirectory;
|
|
54
|
-
if (!targetDir) {
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
await hint('Cool.', `Your project will be created in the directory "${targetDir}"`);
|
|
58
|
-
const templateResponse = await prompts({
|
|
59
|
-
type: 'select',
|
|
60
|
-
name: 'template',
|
|
61
|
-
message: 'Which template would you like to use for your new project',
|
|
62
|
-
choices: [
|
|
63
|
-
{ value: 'advanced-project', title: 'An advanced project with multiple examples and best practices (recommended)' },
|
|
64
|
-
{ value: 'boilerplate-project', title: 'A boilerplate project with basic config' },
|
|
65
|
-
],
|
|
66
|
-
}, { onCancel });
|
|
67
|
-
debug('Downloading template');
|
|
68
|
-
const downloadTemplateSpinner = spinner('Downloading example template...');
|
|
69
|
-
const templatePath = `github:${templateBaseRepo}/${templateResponse.template}#v${version}`;
|
|
70
|
-
try {
|
|
71
|
-
debug(`Attempting download of template: ${templatePath}`);
|
|
72
|
-
await downloadTemplate(templatePath, {
|
|
73
|
-
force: true,
|
|
74
|
-
cwd: targetDir,
|
|
75
|
-
dir: '.',
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
catch (e) {
|
|
79
|
-
if (e.message.includes('404')) {
|
|
80
|
-
downloadTemplateSpinner.text = chalk.red(`Couldn't find template "${templateResponse.template}"`);
|
|
81
|
-
downloadTemplateSpinner.fail();
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
console.error(e.message);
|
|
85
|
-
}
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
downloadTemplateSpinner.text = chalk.green('Example template copied!');
|
|
89
|
-
downloadTemplateSpinner.succeed();
|
|
90
|
-
const installDepsResponse = await prompts({
|
|
91
|
-
type: 'confirm',
|
|
92
|
-
name: 'installDeps',
|
|
93
|
-
message: 'Would you like to install NPM dependencies? (recommended)',
|
|
94
|
-
initial: true,
|
|
95
|
-
});
|
|
96
|
-
if (installDepsResponse.installDeps) {
|
|
97
|
-
const packageManager = detectPackageManager()?.name || 'npm';
|
|
98
|
-
const installExec = execa(packageManager, ['install'], { cwd: targetDir });
|
|
99
|
-
const installSpinner = spinner('installing packages');
|
|
100
|
-
await new Promise((resolve, reject) => {
|
|
101
|
-
installExec.stdout?.on('data', function (data) {
|
|
102
|
-
installSpinner.text = `installing \n${packageManager} ${data}`;
|
|
103
|
-
});
|
|
104
|
-
installExec.on('error', (error) => reject(error));
|
|
105
|
-
installExec.on('close', () => resolve());
|
|
106
|
-
});
|
|
107
|
-
installSpinner.text = 'Packages installed successfully';
|
|
108
|
-
installSpinner.succeed();
|
|
26
|
+
const projectDirectory = await getProjectDirectory({ onCancel });
|
|
27
|
+
if (hasPackageJsonFile(projectDirectory)) {
|
|
28
|
+
// Init Checkly CLI for an existing project
|
|
29
|
+
await installWithinProject({ projectDirectory, version, onCancel });
|
|
109
30
|
}
|
|
110
31
|
else {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
type: 'confirm',
|
|
115
|
-
name: 'initGit',
|
|
116
|
-
message: 'Would you like to initialize a new git repo? (optional)',
|
|
117
|
-
initial: true,
|
|
118
|
-
});
|
|
119
|
-
if (initGitResponse.initGit) {
|
|
120
|
-
if (hasGitDir()) {
|
|
121
|
-
await hint('Oh wait!', 'A .git directory already exists. Skipping...');
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
await execaCommand('git init', { cwd: targetDir });
|
|
125
|
-
}
|
|
32
|
+
// Create a project from the scratch using a template
|
|
33
|
+
await hint('Cool.', `Your project will be created in the directory "${projectDirectory}"`);
|
|
34
|
+
await createProject({ projectDirectory, version, onCancel });
|
|
126
35
|
}
|
|
127
|
-
|
|
36
|
+
// ask and install dependencies and initialize git
|
|
37
|
+
await installDependenciesAndInitGit({ projectDirectory });
|
|
38
|
+
await footer(projectDirectory);
|
|
128
39
|
}
|
|
129
40
|
}
|
|
130
41
|
Bootstrap.description = 'Bootstrap a Checkly project';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EACL,eAAe,EACf,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,GACL,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAGjC;;;GAGG;AAEH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAU5C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;QAE1B,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,EAAE,CAAA;YACN,wCAAwC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CAAA;QAED,kEAAkE;QAClE,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;SAC/B;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACtE,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;QAExC,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE/B,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEhE,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,EAAE;YACxC,2CAA2C;YAC3C,MAAM,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;SACpE;aAAM;YACL,qDAAqD;YACrD,MAAM,IAAI,CAAC,OAAO,EAAE,kDAAkD,gBAAgB,GAAG,CAAC,CAAA;YAC1F,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;SAC7D;QAED,kDAAkD;QAClD,MAAM,6BAA6B,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAEzD,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAChC,CAAC;;AA5CM,qBAAW,GAAG,6BAA6B,CAAA;AAE3C,eAAK,GAAG;IACb,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,2BAA2B;KACzC,CAAC;CACH,CAAA"}
|
|
@@ -1,2 +1,15 @@
|
|
|
1
|
+
export interface PackageJson {
|
|
2
|
+
name: string;
|
|
3
|
+
devDependencies: {
|
|
4
|
+
[key: string]: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export declare function hasPackageJsonFile(dirPath: string): boolean;
|
|
8
|
+
export declare function readPackageJson(dirPath: string): PackageJson;
|
|
1
9
|
export declare function isValidProjectDirectory(dirPath: string): boolean;
|
|
2
|
-
export declare function hasGitDir(): boolean;
|
|
10
|
+
export declare function hasGitDir(dirPath: string): boolean;
|
|
11
|
+
export declare function copyTemporaryFiles(dirPath: string, tempPath: string): void;
|
|
12
|
+
export declare function usePackageName(packageName: string): void;
|
|
13
|
+
export declare function hasGitIgnore(dirPath: string): boolean;
|
|
14
|
+
export declare function isValidUrl(string: string): boolean;
|
|
15
|
+
export declare function generateProjectName(): string;
|
package/dist/utils/directory.js
CHANGED
|
@@ -1,11 +1,67 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { uniqueNamesGenerator, colors, animals } from 'unique-names-generator';
|
|
4
|
+
export function hasPackageJsonFile(dirPath) {
|
|
5
|
+
return fs.existsSync(path.join(dirPath, 'package.json'));
|
|
6
|
+
}
|
|
7
|
+
export function readPackageJson(dirPath) {
|
|
8
|
+
return JSON.parse(fs.readFileSync(path.join(dirPath, 'package.json'), 'utf-8'));
|
|
9
|
+
}
|
|
2
10
|
export function isValidProjectDirectory(dirPath) {
|
|
3
11
|
if (!fs.existsSync(dirPath)) {
|
|
4
12
|
return true;
|
|
5
13
|
}
|
|
14
|
+
// allow already initiated projects directory
|
|
15
|
+
if (hasPackageJsonFile(dirPath)) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
// only allow non initiated directory if it's empty
|
|
6
19
|
return fs.readdirSync(dirPath).length === 0;
|
|
7
20
|
}
|
|
8
|
-
export function hasGitDir() {
|
|
9
|
-
return fs.existsSync('./.git');
|
|
21
|
+
export function hasGitDir(dirPath) {
|
|
22
|
+
return fs.existsSync(path.join(dirPath, './.git'));
|
|
23
|
+
}
|
|
24
|
+
export function copyTemporaryFiles(dirPath, tempPath) {
|
|
25
|
+
const FILE_TO_KEEP = ['__checks__', 'checkly.config.ts'];
|
|
26
|
+
if (FILE_TO_KEEP.some(file => fs.existsSync(path.join(dirPath, file)))) {
|
|
27
|
+
// eslint-disable-next-line no-console
|
|
28
|
+
process.stderr.write('It looks like you already have "__checks__" folder or "checkly.config.ts". ' +
|
|
29
|
+
'Please, remove them and try again.' + '\n');
|
|
30
|
+
fs.rmSync(tempPath, { recursive: true });
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
for (const file of FILE_TO_KEEP) {
|
|
35
|
+
fs.renameSync(`${tempPath}/${file}`, path.join(dirPath, file));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
fs.rmSync(tempPath, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
export function usePackageName(packageName) {
|
|
41
|
+
const filePath = './checkly.config.ts';
|
|
42
|
+
const checklyConfig = fs.readFileSync(filePath, 'utf-8');
|
|
43
|
+
fs.writeFileSync(filePath, checklyConfig
|
|
44
|
+
.replace(/Boilerplate Project/, packageName)
|
|
45
|
+
.replace(/boilerplate-project/, packageName));
|
|
46
|
+
}
|
|
47
|
+
export function hasGitIgnore(dirPath) {
|
|
48
|
+
return fs.existsSync(path.join(dirPath, '.gitignore'));
|
|
49
|
+
}
|
|
50
|
+
export function isValidUrl(string) {
|
|
51
|
+
try {
|
|
52
|
+
const url = new URL(string);
|
|
53
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function generateProjectName() {
|
|
60
|
+
return uniqueNamesGenerator({
|
|
61
|
+
dictionaries: [colors, animals],
|
|
62
|
+
separator: '-',
|
|
63
|
+
length: 2,
|
|
64
|
+
style: 'lowerCase',
|
|
65
|
+
});
|
|
10
66
|
}
|
|
11
67
|
//# sourceMappingURL=directory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/utils/directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/utils/directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function getProjectDirectory({ onCancel }: {
|
|
2
|
+
onCancel: () => void;
|
|
3
|
+
}): Promise<string>;
|
|
4
|
+
export declare function installWithinProject({ projectDirectory, version, onCancel }: {
|
|
5
|
+
projectDirectory: string;
|
|
6
|
+
version: string;
|
|
7
|
+
onCancel: () => void;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function createProject({ projectDirectory, version, onCancel }: {
|
|
10
|
+
projectDirectory: string;
|
|
11
|
+
version: string;
|
|
12
|
+
onCancel: () => void;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
export declare function installDependenciesAndInitGit({ projectDirectory }: {
|
|
15
|
+
projectDirectory: string;
|
|
16
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
import { copyTemporaryFiles, generateProjectName, usePackageName, readPackageJson, hasPackageJsonFile } from './directory.js';
|
|
3
|
+
import { askInitializeProject, askProjectDirectory, askTemplate } from './prompts.js';
|
|
4
|
+
import { addDevDependecies, installDependencies } from '../actions/dependencies.js';
|
|
5
|
+
import { copyTemplate } from '../actions/template.js';
|
|
6
|
+
import { createCustomBrowserCheck } from '../actions/creates.js';
|
|
7
|
+
import { initGit } from '../actions/git.js';
|
|
8
|
+
const debug = Debug('checkly:create-cli');
|
|
9
|
+
const templateBaseRepo = 'checkly/checkly-cli/examples';
|
|
10
|
+
export async function getProjectDirectory({ onCancel }) {
|
|
11
|
+
debug('Ask or detect directory name');
|
|
12
|
+
const cwd = process.cwd();
|
|
13
|
+
// if directory has a package.json, do not ask project directory and use CWD
|
|
14
|
+
const { projectDirectory } = hasPackageJsonFile(cwd)
|
|
15
|
+
? { projectDirectory: cwd }
|
|
16
|
+
: await askProjectDirectory(onCancel);
|
|
17
|
+
if (!projectDirectory) {
|
|
18
|
+
process.stderr.write('You must provide a valid directory name. Please try again.');
|
|
19
|
+
}
|
|
20
|
+
return projectDirectory;
|
|
21
|
+
}
|
|
22
|
+
export async function installWithinProject({ projectDirectory, version, onCancel }) {
|
|
23
|
+
debug('Existing package.json detected');
|
|
24
|
+
const { initializeProject } = await askInitializeProject(onCancel);
|
|
25
|
+
if (initializeProject) {
|
|
26
|
+
const packageJson = readPackageJson(projectDirectory);
|
|
27
|
+
const temporaryDir = generateProjectName();
|
|
28
|
+
debug('Add dependencies to existing package.json');
|
|
29
|
+
addDevDependecies(projectDirectory, packageJson);
|
|
30
|
+
debug('Copy boilerplate project to temporary folder');
|
|
31
|
+
await copyTemplate({
|
|
32
|
+
template: 'boilerplate-project',
|
|
33
|
+
templatePath: `github:${templateBaseRepo}/boilerplate-project#v${version}`,
|
|
34
|
+
targetDir: temporaryDir,
|
|
35
|
+
});
|
|
36
|
+
copyTemporaryFiles(projectDirectory, temporaryDir);
|
|
37
|
+
usePackageName(packageJson.name);
|
|
38
|
+
debug('Create custom Browser check');
|
|
39
|
+
await createCustomBrowserCheck({ projectDirectory, onCancel });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function createProject({ projectDirectory, version, onCancel }) {
|
|
46
|
+
const templateResponse = await askTemplate(onCancel);
|
|
47
|
+
debug('Downloading template');
|
|
48
|
+
await copyTemplate({
|
|
49
|
+
template: templateResponse.template,
|
|
50
|
+
templatePath: `github:${templateBaseRepo}/${templateResponse.template}#v${version}`,
|
|
51
|
+
targetDir: projectDirectory,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export async function installDependenciesAndInitGit({ projectDirectory }) {
|
|
55
|
+
debug('Install npm dependencies');
|
|
56
|
+
await installDependencies(projectDirectory);
|
|
57
|
+
debug('Init .git & .gitignore');
|
|
58
|
+
await initGit(projectDirectory);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/utils/installation.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/messages.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export declare function getVersion(): Promise<string>;
|
|
2
1
|
export declare function getUserGreeting(): Promise<string>;
|
|
3
2
|
export declare function bail(): void;
|
|
4
3
|
export declare function header(version: string, greeting: string): Promise<void>;
|
|
5
4
|
export declare function hint(prefix: string, text: string): Promise<void>;
|
|
6
|
-
export declare function footer(targetDir
|
|
5
|
+
export declare function footer(targetDir?: string): Promise<void>;
|
package/dist/utils/messages.js
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
/* eslint no-console: 'off' */
|
|
2
|
-
import axios from 'axios';
|
|
3
2
|
import chalk from 'chalk';
|
|
4
3
|
import fullName from 'fullname';
|
|
5
4
|
function sleep(ms) {
|
|
6
5
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
7
6
|
}
|
|
8
|
-
export async function getVersion() {
|
|
9
|
-
const { data } = await axios.get('https://registry.npmjs.org/checkly/latest');
|
|
10
|
-
return data.version;
|
|
11
|
-
}
|
|
12
7
|
export async function getUserGreeting() {
|
|
13
8
|
const name = await fullName();
|
|
14
9
|
return name ? `Hi ${name}!` : 'Hi there!';
|
|
@@ -37,8 +32,10 @@ export async function footer(targetDir) {
|
|
|
37
32
|
const prefix = max < 80 ? ' ' : ' '.repeat(9);
|
|
38
33
|
await sleep(200);
|
|
39
34
|
console.log(`\n ${chalk.bgCyan(` ${chalk.black.bold('next')} `)} ${chalk.bold('All done. Time to get testing & monitoring with Checkly\n')}`);
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
if (targetDir) {
|
|
36
|
+
await sleep(200);
|
|
37
|
+
console.log(`${prefix}> Enter your project directory using ${chalk.cyan(`cd ${targetDir}`)}`);
|
|
38
|
+
}
|
|
42
39
|
await sleep(200);
|
|
43
40
|
console.log(`${prefix}> Run ${chalk.cyan('npx checkly login')} to login to your Checkly account`);
|
|
44
41
|
await sleep(200);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAAA,8BAA8B;
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare function askInitializeProject(onCancel: any): Promise<{
|
|
2
|
+
initializeProject: boolean;
|
|
3
|
+
}>;
|
|
4
|
+
export declare function askProjectDirectory(onCancel: any): Promise<{
|
|
5
|
+
projectDirectory: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function askTemplate(onCancel: any): Promise<{
|
|
8
|
+
template: string;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function askCreateInitialBrowserCheck(onCancel: any): Promise<{
|
|
11
|
+
createInitialBrowserCheck: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function askUserWebsite(onCancel: any): Promise<{
|
|
14
|
+
userWebsite: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function askInstallDependencies(): Promise<{
|
|
17
|
+
installDependencies: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function askInitializeGit(): Promise<{
|
|
20
|
+
initializeGit: boolean;
|
|
21
|
+
}>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import * as chalk from 'chalk';
|
|
3
|
+
import prompts from 'prompts';
|
|
4
|
+
import { generateProjectName, isValidProjectDirectory } from '../utils/directory.js';
|
|
5
|
+
export function askInitializeProject(onCancel) {
|
|
6
|
+
return prompts({
|
|
7
|
+
type: 'confirm',
|
|
8
|
+
name: 'initializeProject',
|
|
9
|
+
message: 'It looks like you are already in a project, would you like to initialize?',
|
|
10
|
+
initial: true,
|
|
11
|
+
}, { onCancel });
|
|
12
|
+
}
|
|
13
|
+
export function askProjectDirectory(onCancel) {
|
|
14
|
+
return prompts({
|
|
15
|
+
type: 'text',
|
|
16
|
+
name: 'projectDirectory',
|
|
17
|
+
message: 'Where do you want to create your new project?',
|
|
18
|
+
initial: generateProjectName(),
|
|
19
|
+
format: val => path.resolve(val),
|
|
20
|
+
validate(dirName) {
|
|
21
|
+
const absolutePath = path.resolve(dirName);
|
|
22
|
+
if (!isValidProjectDirectory(absolutePath)) {
|
|
23
|
+
return `"${chalk.bold(absolutePath)}" is not empty!`;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
}, { onCancel });
|
|
28
|
+
}
|
|
29
|
+
export function askTemplate(onCancel) {
|
|
30
|
+
return prompts({
|
|
31
|
+
type: 'select',
|
|
32
|
+
name: 'template',
|
|
33
|
+
message: 'Which template would you like to use for your new project?',
|
|
34
|
+
choices: [
|
|
35
|
+
{ value: 'advanced-project', title: 'An advanced TypeScript project with multiple examples and best practices (recommended)' },
|
|
36
|
+
{ value: 'advanced-project-js', title: 'An advanced JavaScript project with multiple examples and best practices' },
|
|
37
|
+
{ value: 'boilerplate-project', title: 'A boilerplate TypeScript project with basic config' },
|
|
38
|
+
{ value: 'boilerplate-project-js', title: 'A boilerplate JavaScript project with basic config' },
|
|
39
|
+
],
|
|
40
|
+
}, { onCancel });
|
|
41
|
+
}
|
|
42
|
+
export function askCreateInitialBrowserCheck(onCancel) {
|
|
43
|
+
return prompts({
|
|
44
|
+
type: 'confirm',
|
|
45
|
+
name: 'createInitialBrowserCheck',
|
|
46
|
+
message: 'Would you like to create a custom Playwright-based Browser Check to check a URL?',
|
|
47
|
+
initial: true,
|
|
48
|
+
}, { onCancel });
|
|
49
|
+
}
|
|
50
|
+
export function askUserWebsite(onCancel) {
|
|
51
|
+
return prompts({
|
|
52
|
+
type: 'text',
|
|
53
|
+
name: 'userWebsite',
|
|
54
|
+
message: 'Please provide the URL of the site you want to check.',
|
|
55
|
+
}, { onCancel });
|
|
56
|
+
}
|
|
57
|
+
export function askInstallDependencies() {
|
|
58
|
+
return prompts({
|
|
59
|
+
type: 'confirm',
|
|
60
|
+
name: 'installDependencies',
|
|
61
|
+
message: 'Would you like to install NPM dependencies? (recommended)',
|
|
62
|
+
initial: true,
|
|
63
|
+
}, { onCancel: () => true });
|
|
64
|
+
}
|
|
65
|
+
export function askInitializeGit() {
|
|
66
|
+
return prompts({
|
|
67
|
+
type: 'confirm',
|
|
68
|
+
name: 'initializeGit',
|
|
69
|
+
message: 'Would you like to initialize a new git repo? (optional)',
|
|
70
|
+
initial: true,
|
|
71
|
+
}, { onCancel: () => true });
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAEpF,MAAM,UAAU,oBAAoB,CAAE,QAAa;IACjD,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,2EAA2E;QACpF,OAAO,EAAE,IAAI;KACd,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAE,QAAa;IAChD,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,+CAA+C;QACxD,OAAO,EAAE,mBAAmB,EAAE;QAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,QAAQ,CAAE,OAAO;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAC1C,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE;gBAC1C,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAA;aACrD;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAE,QAAa;IACxC,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,4DAA4D;QACrE,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,wFAAwF,EAAE;YAC9H,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,0EAA0E,EAAE;YACnH,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,oDAAoD,EAAE;YAC7F,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,oDAAoD,EAAE;SACjG;KACF,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAE,QAAa;IACzD,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,2BAA2B;QACjC,OAAO,EAAE,kFAAkF;QAC3F,OAAO,EAAE,IAAI;KACd,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAE,QAAa;IAC3C,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,uDAAuD;KACjE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,2DAA2D;QACpE,OAAO,EAAE,IAAI;KACd,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE,IAAI;KACd,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9B,CAAC"}
|
package/index.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/* eslint-disable no-console */
|
|
3
3
|
|
|
4
|
-
const currentVersion = process.versions.node
|
|
5
|
-
const requiredVersion = parseInt(currentVersion.split('.')[0], 10)
|
|
6
|
-
const minimumVersion = 16
|
|
4
|
+
const currentVersion = process.versions.node
|
|
5
|
+
const requiredVersion = parseInt(currentVersion.split('.')[0], 10)
|
|
6
|
+
const minimumVersion = 16
|
|
7
7
|
|
|
8
8
|
if (requiredVersion < minimumVersion) {
|
|
9
9
|
console.error(`You are running Node.js v${currentVersion}. The Checkly CLI requires Node.js v${minimumVersion} or higher.`)
|
|
10
|
-
process.exit(1)
|
|
10
|
+
process.exit(1)
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
import('./dist/index.js').then(({ main }) => main())
|
|
13
|
+
import('./dist/index.js').then(({ main }) => main())
|
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-checkly",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.10-prerelease",
|
|
4
4
|
"description": "Checkly Create CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"private": false,
|
|
9
9
|
"scripts": {
|
|
10
|
-
"clean"
|
|
11
|
-
"
|
|
10
|
+
"clean": "rimraf ./dist",
|
|
11
|
+
"prepack": "echo \"Warning: no oclif manifest configured\"",
|
|
12
12
|
"prepare": "npm run clean && tsc --build",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
13
|
+
"test": "jest --selectProjects unit",
|
|
14
|
+
"test:e2e": "echo \"Warning: no test specified\"",
|
|
15
|
+
"start": "node ./index.mjs",
|
|
16
|
+
"watch": "tsc --watch"
|
|
15
17
|
},
|
|
16
18
|
"repository": {
|
|
17
19
|
"type": "git",
|
|
@@ -34,10 +36,9 @@
|
|
|
34
36
|
],
|
|
35
37
|
"homepage": "https://github.com/checkly/checkly-cli#readme",
|
|
36
38
|
"dependencies": {
|
|
37
|
-
"@oclif/core": "2.
|
|
39
|
+
"@oclif/core": "2.8.11",
|
|
38
40
|
"@oclif/plugin-help": "5.1.20",
|
|
39
41
|
"@oclif/plugin-plugins": "2.3.0",
|
|
40
|
-
"@typescript-eslint/typescript-estree": "5.46.1",
|
|
41
42
|
"axios": "1.3.1",
|
|
42
43
|
"chalk": "4.1.2",
|
|
43
44
|
"debug": "^4.3.4",
|
|
@@ -50,53 +51,23 @@
|
|
|
50
51
|
"which-pm-runs": "^1.1.0"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
|
-
"@checkly/eslint-config": "0.14.1",
|
|
54
54
|
"@types/config": "3.3.0",
|
|
55
55
|
"@types/debug": "^4.1.7",
|
|
56
56
|
"@types/glob": "8.0.0",
|
|
57
57
|
"@types/jest": "29.2.4",
|
|
58
58
|
"@types/luxon": "3.2.0",
|
|
59
|
-
"@types/node": "
|
|
59
|
+
"@types/node": "20.3.3",
|
|
60
60
|
"@types/prompts": "^2.4.2",
|
|
61
61
|
"@types/uuid": "9.0.1",
|
|
62
62
|
"@types/which-pm-runs": "^1.0.0",
|
|
63
63
|
"@types/ws": "8.5.3",
|
|
64
|
-
"@typescript-eslint/eslint-plugin": "5.46.1",
|
|
65
|
-
"@typescript-eslint/parser": "5.46.1",
|
|
66
64
|
"config": "3.3.8",
|
|
67
|
-
"eslint": "8.30.0",
|
|
68
65
|
"jest": "29.3.1",
|
|
66
|
+
"rimraf": "5.0.1",
|
|
69
67
|
"ts-jest": "29.0.3",
|
|
70
68
|
"ts-node": "10.9.1",
|
|
71
69
|
"typescript": "4.9.4"
|
|
72
70
|
},
|
|
73
|
-
"eslintConfig": {
|
|
74
|
-
"rules": {
|
|
75
|
-
"@typescript-eslint/type-annotation-spacing": 2,
|
|
76
|
-
"@typescript-eslint/no-explicit-any": 0,
|
|
77
|
-
"@typescript-eslint/ban-ts-comment": 0,
|
|
78
|
-
"no-console": 2
|
|
79
|
-
},
|
|
80
|
-
"extends": [
|
|
81
|
-
"@checkly/eslint-config",
|
|
82
|
-
"plugin:@typescript-eslint/recommended"
|
|
83
|
-
],
|
|
84
|
-
"parser": "@typescript-eslint/parser",
|
|
85
|
-
"plugins": [
|
|
86
|
-
"@typescript-eslint"
|
|
87
|
-
],
|
|
88
|
-
"overrides": [
|
|
89
|
-
{
|
|
90
|
-
"files": [
|
|
91
|
-
"src/commands/*",
|
|
92
|
-
"src/reporters/*"
|
|
93
|
-
],
|
|
94
|
-
"rules": {
|
|
95
|
-
"no-console": 0
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
},
|
|
100
71
|
"jest": {
|
|
101
72
|
"projects": [
|
|
102
73
|
{
|