create-checkly 0.0.4 → 4.0.10

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.
@@ -1,3 +1,4 @@
1
- export declare function createCustomBrowserCheck({ onCancel }: {
1
+ export declare function createCustomBrowserCheck({ projectDirectory, onCancel }: {
2
+ projectDirectory: string;
2
3
  onCancel: () => void;
3
4
  }): Promise<void>;
@@ -1,6 +1,7 @@
1
1
  import * as fs from 'fs';
2
- import prompts from 'prompts';
3
- import normalizeUrl from 'normalize-url';
2
+ import * as path from 'path';
3
+ import { isValidUrl } from '../utils/directory.js';
4
+ import { askCreateInitialBrowserCheck, askUserWebsite } from '../utils/prompts.js';
4
5
  // Default Playwright-based Browser Check
5
6
  const defaultBrowserCheck = `import { test, expect } from '@playwright/test'
6
7
 
@@ -12,20 +13,16 @@ test('Custom Browser Check', async ({ page }) => {
12
13
  expect(response?.status()).toBeLessThan(400)
13
14
  await page.screenshot({ path: 'screenshot.jpg' })
14
15
  })`;
15
- export async function createCustomBrowserCheck({ onCancel }) {
16
- const createInitialBrowserCheckResponse = await prompts({
17
- type: 'confirm',
18
- name: 'value',
19
- message: 'Would you like to create a custom Playwright-based Browser Check to check a URL?',
20
- initial: true,
21
- }, { onCancel });
22
- if (createInitialBrowserCheckResponse.value) {
23
- const userWebsiteResponse = await prompts({
24
- type: 'text',
25
- name: 'url',
26
- message: 'Please provide the URL of the site you want to check.',
27
- }, { onCancel });
28
- fs.writeFileSync('./__checks__/custom.spec.ts', defaultBrowserCheck.replace(/URL_TO_CHECK/i, normalizeUrl(userWebsiteResponse.url)));
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
+ }
29
26
  }
30
27
  }
31
28
  //# sourceMappingURL=creates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"creates.js","sourceRoot":"","sources":["../../src/actions/creates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,YAAY,MAAM,eAAe,CAAA;AAExC,yCAAyC;AACzC,MAAM,mBAAmB,GAAG;;;;;;;;;GASzB,CAAA;AAEH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAE,QAAQ,EAA4B;IAEtC,MAAM,iCAAiC,GAAG,MAAM,OAAO,CAAC;QACtD,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,kFAAkF;QAC3F,OAAO,EAAE,IAAI;KACd,EACD,EAAE,QAAQ,EAAE,CACX,CAAA;IAED,IAAI,iCAAiC,CAAC,KAAK,EAAE;QAC3C,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC;YACxC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,uDAAuD;SACjE,EACD,EAAE,QAAQ,EAAE,CACX,CAAA;QAED,EAAE,CAAC,aAAa,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;KACrI;AACH,CAAC"}
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"}
@@ -1,3 +1,3 @@
1
- import { PackageJson } from '../utils/package.js';
2
- export declare function addDevDependecies(packageJson: PackageJson): void;
1
+ import { PackageJson } from '../utils/directory.js';
2
+ export declare function addDevDependecies(projectDirectory: string, packageJson: PackageJson): void;
3
3
  export declare function installDependencies(targetDir: string): Promise<void>;
@@ -1,10 +1,11 @@
1
1
  import * as fs from 'fs';
2
- import prompts from 'prompts';
2
+ import * as path from 'path';
3
3
  import detectPackageManager from 'which-pm-runs';
4
4
  import { execa } from 'execa';
5
5
  import { spinner } from '../utils/terminal.js';
6
6
  import { hint } from '../utils/messages.js';
7
- export function addDevDependecies(packageJson) {
7
+ import { askInstallDependencies } from '../utils/prompts.js';
8
+ export function addDevDependecies(projectDirectory, packageJson) {
8
9
  if (!Reflect.has(packageJson, 'devDependencies')) {
9
10
  packageJson.devDependencies = {};
10
11
  }
@@ -13,16 +14,11 @@ export function addDevDependecies(packageJson) {
13
14
  'ts-node': 'latest',
14
15
  typescript: 'latest',
15
16
  });
16
- fs.writeFileSync('./package.json', JSON.stringify(packageJson, null, 2));
17
+ fs.writeFileSync(path.join(projectDirectory, 'package.json'), JSON.stringify(packageJson, null, 2));
17
18
  }
18
19
  export async function installDependencies(targetDir) {
19
- const installDepsResponse = await prompts({
20
- type: 'confirm',
21
- name: 'installDeps',
22
- message: 'Would you like to install NPM dependencies? (recommended)',
23
- initial: true,
24
- });
25
- if (installDepsResponse.installDeps) {
20
+ const { installDependencies } = await askInstallDependencies();
21
+ if (installDependencies) {
26
22
  const packageManager = detectPackageManager()?.name || 'npm';
27
23
  const installExec = execa(packageManager, ['install'], { cwd: targetDir });
28
24
  const installSpinner = spinner('installing packages');
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/actions/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,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;AAG3C,MAAM,UAAU,iBAAiB,CAAE,WAAwB;IACzD,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,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAE,SAAiB;IAC1D,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC;QACxC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,2DAA2D;QACpE,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,IAAI,mBAAmB,CAAC,WAAW,EAAE;QACnC,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"}
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"}
@@ -16,6 +16,7 @@ export async function copyTemplate({ template, templatePath, targetDir }) {
16
16
  downloadTemplateSpinner.fail();
17
17
  }
18
18
  else {
19
+ // eslint-disable-next-line
19
20
  console.error(e.message);
20
21
  }
21
22
  process.exit(1);
@@ -1 +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,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
+ {"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,121 +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 { execaCommand } from 'execa';
6
- import chalk from 'chalk';
7
- import { hasGitDir, isValidProjectDirectory, copyTemporaryFiles, usePackageName } from '../utils/directory.js';
8
- import { getUserGreeting, getVersion, header, bail, hint, footer, } from '../utils/messages.js';
9
- import { createCustomBrowserCheck } from '../actions/creates.js';
10
- import { addDevDependecies, installDependencies } from '../actions/dependencies.js';
11
- import { hasPackageJsonFile, readPackageJson } from '../utils/package.js';
12
- import { copyTemplate } from '../actions/template.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';
13
6
  /**
14
7
  * This code is heavily inspired by the amazing create-astro package over at
15
8
  * https://github.com/withastro/astro/tree/main/packages/create-astro
16
9
  */
17
- const debug = Debug('checkly:create-cli');
18
- const templateBaseRepo = 'checkly/checkly-cli/examples';
19
- function generateProjectName() {
20
- return uniqueNamesGenerator({
21
- dictionaries: [colors, animals],
22
- separator: '-',
23
- length: 2,
24
- style: 'lowerCase',
25
- });
26
- }
27
- function onCancel() {
28
- bail();
29
- process.exit(1);
30
- }
31
10
  export default class Bootstrap extends Command {
32
11
  async run() {
33
12
  const { flags } = await this.parse(Bootstrap);
34
13
  const { template } = flags;
14
+ const onCancel = () => {
15
+ bail();
16
+ // TODO: replace this with oclif error()
17
+ process.exit(1);
18
+ };
35
19
  // This overrides the template prompt and skips to the next prompt
36
20
  if (template) {
37
21
  prompts.override({ template });
38
22
  }
39
- const [version, greeting] = await Promise.all([getVersion(), getUserGreeting()]);
23
+ const version = process.env.CHECKLY_CLI_VERSION ?? this.config.version;
24
+ const greeting = await getUserGreeting();
40
25
  await header(version, greeting);
41
- // Init Checkly CLI for an existing project
42
- if (hasPackageJsonFile()) {
43
- debug('Existing package.json detected');
44
- const projectInitResponse = await prompts({
45
- type: 'confirm',
46
- name: 'useDirectory',
47
- message: 'It looks like you are already in a project, would you like to initialize?',
48
- initial: true,
49
- }, { onCancel });
50
- if (projectInitResponse.useDirectory) {
51
- const packageJson = readPackageJson();
52
- const temporaryDir = generateProjectName();
53
- debug('Add dependencies to existing package.json');
54
- addDevDependecies(packageJson);
55
- debug('Copy boilerplate project to temporary folder');
56
- await copyTemplate({
57
- template: 'boilerplate-project',
58
- templatePath: `github:${templateBaseRepo}/boilerplate-project#v${version}`,
59
- targetDir: temporaryDir,
60
- });
61
- copyTemporaryFiles(temporaryDir);
62
- usePackageName(packageJson.name);
63
- debug('Create custom Browser check');
64
- await createCustomBrowserCheck({ onCancel });
65
- await installDependencies('./');
66
- await footer();
67
- return;
68
- }
69
- }
70
- debug('Ask for directory name');
71
- const projectDirResponse = await prompts({
72
- type: 'text',
73
- name: 'projectDirectory',
74
- message: 'Where do you want to create your new project?',
75
- initial: generateProjectName(),
76
- validate(dirName) {
77
- if (!isValidProjectDirectory(dirName)) {
78
- return `"${chalk.bold(dirName)}" is not empty!`;
79
- }
80
- return true;
81
- },
82
- }, { onCancel });
83
- const targetDir = projectDirResponse.projectDirectory;
84
- if (!targetDir) {
85
- process.exit(1);
26
+ const projectDirectory = await getProjectDirectory({ onCancel });
27
+ if (hasPackageJsonFile(projectDirectory)) {
28
+ // Init Checkly CLI for an existing project
29
+ await installWithinProject({ projectDirectory, version, onCancel });
86
30
  }
87
- await hint('Cool.', `Your project will be created in the directory "${targetDir}"`);
88
- const templateResponse = await prompts({
89
- type: 'select',
90
- name: 'template',
91
- message: 'Which template would you like to use for your new project',
92
- choices: [
93
- { value: 'advanced-project', title: 'An advanced project with multiple examples and best practices (recommended)' },
94
- { value: 'boilerplate-project', title: 'A boilerplate project with basic config' },
95
- ],
96
- }, { onCancel });
97
- debug('Downloading template');
98
- await copyTemplate({
99
- template: templateResponse.template,
100
- templatePath: `github:${templateBaseRepo}/${templateResponse.template}#v${version}`,
101
- targetDir,
102
- });
103
- await installDependencies(targetDir);
104
- const initGitResponse = await prompts({
105
- type: 'confirm',
106
- name: 'initGit',
107
- message: 'Would you like to initialize a new git repo? (optional)',
108
- initial: true,
109
- });
110
- if (initGitResponse.initGit) {
111
- if (hasGitDir()) {
112
- await hint('Oh wait!', 'A .git directory already exists. Skipping...');
113
- }
114
- else {
115
- await execaCommand('git init', { cwd: targetDir });
116
- }
31
+ else {
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 });
117
35
  }
118
- await footer(targetDir);
36
+ // ask and install dependencies and initialize git
37
+ await installDependenciesAndInitGit({ projectDirectory });
38
+ await footer(projectDirectory);
119
39
  }
120
40
  }
121
41
  Bootstrap.description = 'Bootstrap a Checkly project';
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
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,4 +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;
3
- export declare function copyTemporaryFiles(dirPath: string): void;
10
+ export declare function hasGitDir(dirPath: string): boolean;
11
+ export declare function copyTemporaryFiles(dirPath: string, tempPath: string): void;
4
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;
@@ -1,19 +1,41 @@
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'));
10
23
  }
11
- export function copyTemporaryFiles(dirPath) {
24
+ export function copyTemporaryFiles(dirPath, tempPath) {
12
25
  const FILE_TO_KEEP = ['__checks__', 'checkly.config.ts'];
13
- for (const file of FILE_TO_KEEP) {
14
- fs.renameSync(`${dirPath}/${file}`, `./${file}`);
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
+ }
15
37
  }
16
- fs.rmSync(dirPath, { recursive: true });
38
+ fs.rmSync(tempPath, { recursive: true });
17
39
  }
18
40
  export function usePackageName(packageName) {
19
41
  const filePath = './checkly.config.ts';
@@ -22,4 +44,24 @@ export function usePackageName(packageName) {
22
44
  .replace(/Boilerplate Project/, packageName)
23
45
  .replace(/boilerplate-project/, packageName));
24
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
+ });
66
+ }
25
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;AAExB,MAAM,UAAU,uBAAuB,CAAE,OAAe;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,OAAe;IACjD,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAA;IAExD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;QAC/B,EAAE,CAAC,UAAU,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAA;KACjD;IAED,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAE,WAAmB;IACjD,MAAM,QAAQ,GAAG,qBAAqB,CAAA;IACtC,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAExD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa;SACrC,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAAC;SAC3C,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAC7C,CAAA;AACH,CAAC"}
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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"}
@@ -1,4 +1,3 @@
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>;
@@ -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!';
@@ -39,7 +34,7 @@ export async function footer(targetDir) {
39
34
  console.log(`\n ${chalk.bgCyan(` ${chalk.black.bold('next')} `)} ${chalk.bold('All done. Time to get testing & monitoring with Checkly\n')}`);
40
35
  if (targetDir) {
41
36
  await sleep(200);
42
- console.log(`${prefix}> Enter your project directory using ${chalk.cyan(`cd ./${targetDir}`)}`);
37
+ console.log(`${prefix}> Enter your project directory using ${chalk.cyan(`cd ${targetDir}`)}`);
43
38
  }
44
39
  await sleep(200);
45
40
  console.log(`${prefix}> Run ${chalk.cyan('npx checkly login')} to login to your Checkly account`);
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAG9B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,SAAS,KAAK,CAAE,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAA;IAC7B,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAE,OAAe,EAAE,QAAgB;IAC7D,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAC/D,qCAAqC,CAAC,IAAI,CAC7C,CAAA;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;IACjB,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,kCAAkC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;IAC7G,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAE,MAAc,EAAE,IAAY;IACtD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACpD;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC9E;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAE,SAAkB;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAA;IAClC,MAAM,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAChE,2DAA2D,CAC5D,EAAE,CACJ,CAAA;IAED,IAAI,SAAS,EAAE;QACb,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QAChB,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,wCAAwC,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,EAAE,CAAC,EAAE,CACjF,CAAA;KACF;IACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,mCAAmC,CACrF,CAAA;IACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAC1E,CAAA;IACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,6CAA6C,CAChG,CAAA;IACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,cAAc,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,uBAAuB,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAA;IAC3F,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,yCAAyC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAA;AAC9G,CAAC"}
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "create-checkly",
3
- "version": "0.0.4",
3
+ "version": "4.0.10",
4
4
  "description": "Checkly Create CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -8,10 +8,12 @@
8
8
  "private": false,
9
9
  "scripts": {
10
10
  "clean": "rimraf ./dist",
11
- "test": "jest --selectProjects unit",
11
+ "prepack": "echo \"Warning: no oclif manifest configured\"",
12
12
  "prepare": "npm run clean && tsc --build",
13
- "lint": "eslint src",
14
- "start": "node ./index.mjs"
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,70 +36,38 @@
34
36
  ],
35
37
  "homepage": "https://github.com/checkly/checkly-cli#readme",
36
38
  "dependencies": {
37
- "@oclif/core": "2.0.7",
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",
44
45
  "execa": "^6.1.0",
45
46
  "fullname": "4.0.1",
46
47
  "giget": "^1.1.2",
47
- "normalize-url": "8.0.0",
48
48
  "ora": "^6.1.2",
49
49
  "prompts": "^2.4.2",
50
50
  "unique-names-generator": "^4.7.1",
51
51
  "which-pm-runs": "^1.1.0"
52
52
  },
53
53
  "devDependencies": {
54
- "@checkly/eslint-config": "0.14.1",
55
54
  "@types/config": "3.3.0",
56
55
  "@types/debug": "^4.1.7",
57
56
  "@types/glob": "8.0.0",
58
57
  "@types/jest": "29.2.4",
59
58
  "@types/luxon": "3.2.0",
60
- "@types/node": "18.11.18",
59
+ "@types/node": "20.3.3",
61
60
  "@types/prompts": "^2.4.2",
62
61
  "@types/uuid": "9.0.1",
63
62
  "@types/which-pm-runs": "^1.0.0",
64
63
  "@types/ws": "8.5.3",
65
- "@typescript-eslint/eslint-plugin": "5.46.1",
66
- "@typescript-eslint/parser": "5.46.1",
67
64
  "config": "3.3.8",
68
- "eslint": "8.30.0",
69
65
  "jest": "29.3.1",
66
+ "rimraf": "5.0.1",
70
67
  "ts-jest": "29.0.3",
71
68
  "ts-node": "10.9.1",
72
69
  "typescript": "4.9.4"
73
70
  },
74
- "eslintConfig": {
75
- "rules": {
76
- "@typescript-eslint/type-annotation-spacing": 2,
77
- "@typescript-eslint/no-explicit-any": 0,
78
- "@typescript-eslint/ban-ts-comment": 0,
79
- "no-console": 2
80
- },
81
- "extends": [
82
- "@checkly/eslint-config",
83
- "plugin:@typescript-eslint/recommended"
84
- ],
85
- "parser": "@typescript-eslint/parser",
86
- "plugins": [
87
- "@typescript-eslint"
88
- ],
89
- "overrides": [
90
- {
91
- "files": [
92
- "src/commands/*",
93
- "src/reporters/*"
94
- ],
95
- "rules": {
96
- "no-console": 0
97
- }
98
- }
99
- ]
100
- },
101
71
  "jest": {
102
72
  "projects": [
103
73
  {
@@ -1,8 +0,0 @@
1
- export interface PackageJson {
2
- name: string;
3
- devDependencies: {
4
- [key: string]: string;
5
- };
6
- }
7
- export declare function hasPackageJsonFile(): boolean;
8
- export declare function readPackageJson(): PackageJson;
@@ -1,9 +0,0 @@
1
- import * as fs from 'fs';
2
- import path from 'path';
3
- export function hasPackageJsonFile() {
4
- return fs.existsSync(path.join(process.cwd(), 'package.json'));
5
- }
6
- export function readPackageJson() {
7
- return JSON.parse(fs.readFileSync('./package.json', 'utf-8'));
8
- }
9
- //# sourceMappingURL=package.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/utils/package.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,IAAI,MAAM,MAAM,CAAA;AASvB,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAA;AAC/D,CAAC"}