@dotcms/create-app 0.0.4
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/README.md +99 -0
- package/package.json +25 -0
- package/src/api/index.d.ts +26 -0
- package/src/api/index.js +55 -0
- package/src/api/index.js.map +1 -0
- package/src/asks.d.ts +35 -0
- package/src/asks.js +143 -0
- package/src/asks.js.map +1 -0
- package/src/constants/index.d.ts +12 -0
- package/src/constants/index.js +27 -0
- package/src/constants/index.js.map +1 -0
- package/src/errors/index.d.ts +18 -0
- package/src/errors/index.js +40 -0
- package/src/errors/index.js.map +1 -0
- package/src/git/index.d.ts +6 -0
- package/src/git/index.js +52 -0
- package/src/git/index.js.map +1 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +347 -0
- package/src/index.js.map +1 -0
- package/src/types/index.d.ts +52 -0
- package/src/types/index.js +3 -0
- package/src/types/index.js.map +1 -0
- package/src/utils/index.d.ts +30 -0
- package/src/utils/index.js +172 -0
- package/src/utils/index.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# π create-dotcms-app
|
|
2
|
+
|
|
3
|
+
> π§ **Beta Notice:**
|
|
4
|
+
> This CLI is currently in **beta**. Features and APIs may change as we continue improving the tool.
|
|
5
|
+
|
|
6
|
+
With a single command, you can bootstrap a fully functional frontend (Next.js,Vue,Angular, etc.) connected to dotCMS APIs β including the following:
|
|
7
|
+
|
|
8
|
+
- Spinning up dotCMS using docker
|
|
9
|
+
- Universal Visual Editor pre configured
|
|
10
|
+
- Generating site id and authentication token (just copy paste them in frontend .env and enjoy).
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## β¨ What is `create-dotcms-app`?
|
|
15
|
+
|
|
16
|
+
`create-dotcms-app` is a command-line tool that helps developers quickly spin up headless frontends powered by **dotCMS**.
|
|
17
|
+
|
|
18
|
+
It automates the tedious work of:
|
|
19
|
+
|
|
20
|
+
- Setting up a framework
|
|
21
|
+
- Connecting to dotCMS REST & GraphQL APIs
|
|
22
|
+
- Providing content-fetching helpers
|
|
23
|
+
- Adding example components & pages
|
|
24
|
+
- Creating environment variable templates
|
|
25
|
+
- Optional Setting up local dotCMS instance using docker.
|
|
26
|
+
|
|
27
|
+
This tool lets you focus on **building**, not configuring.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## π― Why this project exists
|
|
32
|
+
|
|
33
|
+
dotCMS is a hybrid headless CMS with powerful APIs β but initializing a frontend manually takes time.
|
|
34
|
+
|
|
35
|
+
This CLI solves that by offering:
|
|
36
|
+
|
|
37
|
+
- **Frictionless onboarding**
|
|
38
|
+
- **Standardized project setup**
|
|
39
|
+
- **Fast prototyping & demos**
|
|
40
|
+
- **DevRel-friendly scaffolding for workshops & tutorials**
|
|
41
|
+
- **Production-ready integration patterns**
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## π οΈ Installation
|
|
46
|
+
|
|
47
|
+
Run using npx (recommended):
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
npx @dotcms/create-app <project-name>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or install cli globally
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
npm install -g @dotcms/create-app
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Usage
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
npx @dotcms/create-app <project-name>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This will:
|
|
66
|
+
|
|
67
|
+
- Ask for the target directory
|
|
68
|
+
- Ask which frontend framework you want (Next.js,Angular,Vue, etc.)
|
|
69
|
+
- Ask if youβre using dotCMS Cloud or Local Docker dotCMS
|
|
70
|
+
- Automatically scaffold your project
|
|
71
|
+
- Configure UVE (Edit Mode Anywhere)
|
|
72
|
+
- Start dotCMS (if using Docker)
|
|
73
|
+
- Print required environment variables for your frontend
|
|
74
|
+
|
|
75
|
+
## Env variables
|
|
76
|
+
|
|
77
|
+
You will get the following env variables generated by cli **just copy and replace them in the frontend of the env and enjoy dotCMS in headless mode**.
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
Host (site) : http://localhost:8082
|
|
81
|
+
Site ID : 59bb8831-6706-4589-9ca0-ff74016e02b2
|
|
82
|
+
API Token : YOUR_API_TOKEN
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## CLI Syntax
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
create-dotcms-app <project-name> [options]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
| Option | Description |
|
|
92
|
+
|--------------------------|-----------------------------------------------------------------------------------------------------------------|
|
|
93
|
+
| `-f, --framework <name>` | Skip prompts and directly choose a framework. Must be one of: `nextjs`, `angular`, `angular-ssr`, `astro`, etc. |
|
|
94
|
+
| `-d, --directory` | Project Directory |
|
|
95
|
+
| `--local` | Use local dotCMS instance using docker: |
|
|
96
|
+
| `-u, --username` | dotCMS instance username (skip in case of local) |
|
|
97
|
+
| `-p, --password` | dotCMS instance password (skip in case of local)
|
|
98
|
+
| `--url` | dotCMS instance url (skip in case of local) |
|
|
99
|
+
| `-V, --version` | Show CLI version |
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dotcms/create-app",
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"create-dotcms-app": "./src/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"src",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"axios": "^1.13.2",
|
|
16
|
+
"chalk": "^5.6.2",
|
|
17
|
+
"commander": "^14.0.2",
|
|
18
|
+
"execa": "^9.6.0",
|
|
19
|
+
"fs-extra": "^11.3.2",
|
|
20
|
+
"inquirer": "^13.0.1",
|
|
21
|
+
"ora": "^9.0.0",
|
|
22
|
+
"ts-results": "^3.3.0",
|
|
23
|
+
"tslib": "^2.3.0"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Result } from 'ts-results';
|
|
2
|
+
import { FailedToGetDemoSiteIdentifierError, FailedToGetDotcmsTokenError, FailedToSetUpUVEConfig } from '../errors';
|
|
3
|
+
import type { DemoSiteResponse, GetUserTokenRequest, UVEConfigRequest } from '../types';
|
|
4
|
+
export declare class DotCMSApi {
|
|
5
|
+
private static defaultTokenApi;
|
|
6
|
+
private static defaultDemoSiteApi;
|
|
7
|
+
private static defaultUveConfigApi;
|
|
8
|
+
/** Get authentication token */
|
|
9
|
+
static getAuthToken({ payload, url }: {
|
|
10
|
+
payload: GetUserTokenRequest;
|
|
11
|
+
url?: string;
|
|
12
|
+
}): Promise<Result<string, FailedToGetDotcmsTokenError>>;
|
|
13
|
+
/** Get demo site identifier */
|
|
14
|
+
static getDemoSiteIdentifier({ siteName, authenticationToken, url }: {
|
|
15
|
+
siteName: string;
|
|
16
|
+
authenticationToken: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
}): Promise<Result<DemoSiteResponse, FailedToGetDemoSiteIdentifierError>>;
|
|
19
|
+
/** Setup UVE Config */
|
|
20
|
+
static setupUVEConfig({ payload, siteId, authenticationToken, url }: {
|
|
21
|
+
payload: UVEConfigRequest;
|
|
22
|
+
siteId: string;
|
|
23
|
+
authenticationToken: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
}): Promise<Result<'Ok', FailedToSetUpUVEConfig>>;
|
|
26
|
+
}
|
package/src/api/index.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DotCMSApi = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
6
|
+
const ts_results_1 = require("ts-results");
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const errors_1 = require("../errors");
|
|
9
|
+
class DotCMSApi {
|
|
10
|
+
/** Get authentication token */
|
|
11
|
+
static async getAuthToken({ payload, url }) {
|
|
12
|
+
try {
|
|
13
|
+
const endpoint = url || this.defaultTokenApi;
|
|
14
|
+
const res = await axios_1.default.post(endpoint, payload);
|
|
15
|
+
return (0, ts_results_1.Ok)(res.data.entity.token);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
console.error('dotCMS failed to get token' + JSON.stringify(err));
|
|
19
|
+
return (0, ts_results_1.Err)(new errors_1.FailedToGetDotcmsTokenError());
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Get demo site identifier */
|
|
23
|
+
static async getDemoSiteIdentifier({ siteName, authenticationToken, url }) {
|
|
24
|
+
try {
|
|
25
|
+
const endpoint = (url || this.defaultDemoSiteApi) + siteName;
|
|
26
|
+
const res = await axios_1.default.get(endpoint, {
|
|
27
|
+
headers: { Authorization: `Bearer ${authenticationToken}` }
|
|
28
|
+
});
|
|
29
|
+
return (0, ts_results_1.Ok)(res.data);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error('failed to get demo site identifier : ' + JSON.stringify(err));
|
|
33
|
+
return (0, ts_results_1.Err)(new errors_1.FailedToGetDemoSiteIdentifierError());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Setup UVE Config */
|
|
37
|
+
static async setupUVEConfig({ payload, siteId, authenticationToken, url }) {
|
|
38
|
+
try {
|
|
39
|
+
const endpoint = (url || this.defaultUveConfigApi) + siteId;
|
|
40
|
+
const res = await axios_1.default.post(endpoint, payload, {
|
|
41
|
+
headers: { Authorization: `Bearer ${authenticationToken}` }
|
|
42
|
+
});
|
|
43
|
+
return (0, ts_results_1.Ok)(res.data.entity);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.error('failed to setup UVE config' + JSON.stringify(err));
|
|
47
|
+
return (0, ts_results_1.Err)(new errors_1.FailedToSetUpUVEConfig());
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.DotCMSApi = DotCMSApi;
|
|
52
|
+
DotCMSApi.defaultTokenApi = constants_1.DOTCMS_TOKEN_API;
|
|
53
|
+
DotCMSApi.defaultDemoSiteApi = constants_1.DOTCMS_DEMO_SITE;
|
|
54
|
+
DotCMSApi.defaultUveConfigApi = constants_1.DOTCMS_EMA_CONFIG_API;
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/api/index.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAC1B,2CAAkD;AAElD,4CAAyF;AACzF,sCAImB;AASnB,MAAa,SAAS;IAKlB,+BAA+B;IAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EACtB,OAAO,EACP,GAAG,EAIN;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAAuB,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtE,OAAO,IAAA,eAAE,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,IAAA,gBAAG,EAAC,IAAI,oCAA2B,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAC/B,QAAQ,EACR,mBAAmB,EACnB,GAAG,EAKN;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,GAAG,CAAmB,QAAQ,EAAE;gBACpD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,mBAAmB,EAAE,EAAE;aAC9D,CAAC,CAAC;YACH,OAAO,IAAA,eAAE,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAA,gBAAG,EAAC,IAAI,2CAAkC,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EACxB,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,GAAG,EAMN;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAAoB,QAAQ,EAAE,OAAO,EAAE;gBAC/D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,mBAAmB,EAAE,EAAE;aAC9D,CAAC,CAAC;YACH,OAAO,IAAA,eAAE,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,IAAA,gBAAG,EAAC,IAAI,+BAAsB,EAAE,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;;AAnEL,8BAoEC;AAnEkB,yBAAe,GAAG,4BAAgB,CAAC;AACnC,4BAAkB,GAAG,4BAAgB,CAAC;AACtC,6BAAmB,GAAG,iCAAqB,CAAC"}
|
package/src/asks.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SupportedFrontEndFrameworks } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Ask interactively if framework not specified
|
|
4
|
+
*/
|
|
5
|
+
export declare function askFramework(): Promise<SupportedFrontEndFrameworks>;
|
|
6
|
+
/**
|
|
7
|
+
* Ask user where to create the project
|
|
8
|
+
*/
|
|
9
|
+
export declare function askDirectory(): Promise<any>;
|
|
10
|
+
/**
|
|
11
|
+
* Ask user the url of the dotCMS instance
|
|
12
|
+
*/
|
|
13
|
+
export declare function askDotcmsCloudUrl(): Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* Ask user the username of the dotCMS instance
|
|
16
|
+
*/
|
|
17
|
+
export declare function askUserNameForDotcmsCloud(): Promise<any>;
|
|
18
|
+
/**
|
|
19
|
+
* Ask user the username of the dotCMS instance
|
|
20
|
+
*/
|
|
21
|
+
export declare function askPasswordForDotcmsCloud(): Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* Ask if the user wants to use cloud instance or local dotcms
|
|
24
|
+
* Example:
|
|
25
|
+
* user enters: "y/n"
|
|
26
|
+
*/
|
|
27
|
+
export declare function askCloudOrLocalInstance(): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Prepare final project directory
|
|
30
|
+
* Example:
|
|
31
|
+
* user enters: "."
|
|
32
|
+
* projectName: "my-app"
|
|
33
|
+
* final path becomes "./my-app"
|
|
34
|
+
*/
|
|
35
|
+
export declare function prepareDirectory(basePath: string, projectName: string): Promise<string>;
|
package/src/asks.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.askFramework = askFramework;
|
|
4
|
+
exports.askDirectory = askDirectory;
|
|
5
|
+
exports.askDotcmsCloudUrl = askDotcmsCloudUrl;
|
|
6
|
+
exports.askUserNameForDotcmsCloud = askUserNameForDotcmsCloud;
|
|
7
|
+
exports.askPasswordForDotcmsCloud = askPasswordForDotcmsCloud;
|
|
8
|
+
exports.askCloudOrLocalInstance = askCloudOrLocalInstance;
|
|
9
|
+
exports.prepareDirectory = prepareDirectory;
|
|
10
|
+
const tslib_1 = require("tslib");
|
|
11
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
12
|
+
const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
|
|
13
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
14
|
+
const constants_1 = require("./constants");
|
|
15
|
+
/**
|
|
16
|
+
* Ask interactively if framework not specified
|
|
17
|
+
*/
|
|
18
|
+
async function askFramework() {
|
|
19
|
+
const ans = await inquirer_1.default.prompt([
|
|
20
|
+
{
|
|
21
|
+
type: 'checkbox',
|
|
22
|
+
name: 'frameworks',
|
|
23
|
+
message: 'Select the frontend framework:',
|
|
24
|
+
choices: constants_1.FRAMEWORKS_CHOICES,
|
|
25
|
+
validate(selected) {
|
|
26
|
+
if (selected.length === 0)
|
|
27
|
+
return 'Please select at least one framework.';
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
]);
|
|
32
|
+
// Return the first selected framework (checkbox returns array)
|
|
33
|
+
return ans.frameworks[0];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Ask user where to create the project
|
|
37
|
+
*/
|
|
38
|
+
async function askDirectory() {
|
|
39
|
+
const ans = await inquirer_1.default.prompt([
|
|
40
|
+
{
|
|
41
|
+
type: 'input',
|
|
42
|
+
name: 'directory',
|
|
43
|
+
message: 'Project directory:',
|
|
44
|
+
default: `.`
|
|
45
|
+
}
|
|
46
|
+
]);
|
|
47
|
+
return ans.directory;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ask user the url of the dotCMS instance
|
|
51
|
+
*/
|
|
52
|
+
async function askDotcmsCloudUrl() {
|
|
53
|
+
const ans = await inquirer_1.default.prompt([
|
|
54
|
+
{
|
|
55
|
+
type: 'input',
|
|
56
|
+
name: 'url',
|
|
57
|
+
message: 'DotCMS instance URL:',
|
|
58
|
+
default: `https://demo.dotcms.com`
|
|
59
|
+
}
|
|
60
|
+
]);
|
|
61
|
+
return ans.url;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Ask user the username of the dotCMS instance
|
|
65
|
+
*/
|
|
66
|
+
async function askUserNameForDotcmsCloud() {
|
|
67
|
+
const ans = await inquirer_1.default.prompt([
|
|
68
|
+
{
|
|
69
|
+
type: 'input',
|
|
70
|
+
name: 'username',
|
|
71
|
+
message: 'Username:',
|
|
72
|
+
default: `admin@dotcms.com`
|
|
73
|
+
}
|
|
74
|
+
]);
|
|
75
|
+
return ans.username;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Ask user the username of the dotCMS instance
|
|
79
|
+
*/
|
|
80
|
+
async function askPasswordForDotcmsCloud() {
|
|
81
|
+
const ans = await inquirer_1.default.prompt([
|
|
82
|
+
{
|
|
83
|
+
type: 'input',
|
|
84
|
+
name: 'password',
|
|
85
|
+
message: 'Password:',
|
|
86
|
+
default: `admin`
|
|
87
|
+
}
|
|
88
|
+
]);
|
|
89
|
+
return ans.password;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Ask if the user wants to use cloud instance or local dotcms
|
|
93
|
+
* Example:
|
|
94
|
+
* user enters: "y/n"
|
|
95
|
+
*/
|
|
96
|
+
async function askCloudOrLocalInstance() {
|
|
97
|
+
const ans = await inquirer_1.default.prompt([
|
|
98
|
+
{
|
|
99
|
+
type: 'confirm',
|
|
100
|
+
name: 'confirm',
|
|
101
|
+
message: `Running dotCMS in the cloud? If not, no worries β select No to spin up dotCMS using Docker.`,
|
|
102
|
+
default: false
|
|
103
|
+
}
|
|
104
|
+
]);
|
|
105
|
+
return ans.confirm;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Prepare final project directory
|
|
109
|
+
* Example:
|
|
110
|
+
* user enters: "."
|
|
111
|
+
* projectName: "my-app"
|
|
112
|
+
* final path becomes "./my-app"
|
|
113
|
+
*/
|
|
114
|
+
async function prepareDirectory(basePath, projectName) {
|
|
115
|
+
const targetPath = path_1.default.resolve(basePath, projectName);
|
|
116
|
+
// If path doesn't exist β create
|
|
117
|
+
if (!fs_extra_1.default.existsSync(targetPath)) {
|
|
118
|
+
fs_extra_1.default.mkdirSync(targetPath, { recursive: true });
|
|
119
|
+
return targetPath;
|
|
120
|
+
}
|
|
121
|
+
// Directory exists β check if empty
|
|
122
|
+
const files = fs_extra_1.default.readdirSync(targetPath);
|
|
123
|
+
if (files.length === 0) {
|
|
124
|
+
return targetPath; // empty β OK
|
|
125
|
+
}
|
|
126
|
+
// Directory not empty β warn user
|
|
127
|
+
const ans = await inquirer_1.default.prompt([
|
|
128
|
+
{
|
|
129
|
+
type: 'confirm',
|
|
130
|
+
name: 'confirm',
|
|
131
|
+
message: `β οΈ Directory "${targetPath}" is not empty. All files inside will be deleted. Continue?`,
|
|
132
|
+
default: false
|
|
133
|
+
}
|
|
134
|
+
]);
|
|
135
|
+
if (!ans.confirm) {
|
|
136
|
+
console.log('β Operation cancelled.');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
// Empty directory
|
|
140
|
+
await fs_extra_1.default.emptyDir(targetPath);
|
|
141
|
+
return targetPath;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=asks.js.map
|
package/src/asks.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asks.js","sourceRoot":"","sources":["../../../../../libs/sdk/create-app/src/asks.ts"],"names":[],"mappings":";;AAYA,oCAgBC;AAKD,oCAUC;AAKD,8CAUC;AAKD,8DAUC;AAKD,8DAUC;AAOD,0DAUC;AASD,4CAmCC;;AArJD,gEAA0B;AAC1B,gEAAgC;AAEhC,wDAAwB;AAExB,2CAAiD;AAIjD;;GAEG;AACI,KAAK,UAAU,YAAY;IAC9B,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAgD;QAC7E;YACI,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,8BAAkB;YAC3B,QAAQ,CAAC,QAAQ;gBACb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,uCAAuC,CAAC;gBAC1E,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ;KACJ,CAAC,CAAC;IAEH,+DAA+D;IAC/D,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY;IAC9B,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC9B;YACI,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,GAAG;SACf;KACJ,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,SAAS,CAAC;AACzB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB;IACnC,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC9B;YACI,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,yBAAyB;SACrC;KACJ,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,GAAG,CAAC;AACnB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,yBAAyB;IAC3C,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC9B;YACI,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,kBAAkB;SAC9B;KACJ,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,yBAAyB;IAC3C,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC9B;YACI,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,OAAO;SACnB;KACJ,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,uBAAuB;IACzC,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC9B;YACI,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,6FAA6F;YACtG,OAAO,EAAE,KAAK;SACjB;KACJ,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,OAAO,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,WAAmB;IACxE,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEvD,iCAAiC;IACjC,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,oCAAoC;IACpC,MAAM,KAAK,GAAG,kBAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC,CAAC,aAAa;IACpC,CAAC;IAED,kCAAkC;IAClC,MAAM,GAAG,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC9B;YACI,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,kBAAkB,UAAU,6DAA6D;YAClG,OAAO,EAAE,KAAK;SACjB;KACJ,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,kBAAkB;IAClB,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE9B,OAAO,UAAU,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FrameworkChoices, SupportedFrontEndFrameworks } from '../types';
|
|
2
|
+
export declare const DOTCMS_HOST = "http://localhost:8082";
|
|
3
|
+
export declare const DOTCMS_USER: {
|
|
4
|
+
username: string;
|
|
5
|
+
password: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const DOTCMS_HEALTH_API = "http://localhost:8082/api/v1/probes/alive";
|
|
8
|
+
export declare const DOTCMS_TOKEN_API = "http://localhost:8082/api/v1/authentication/api-token";
|
|
9
|
+
export declare const DOTCMS_EMA_CONFIG_API = "http://localhost:8082/api/v1/apps/dotema-config-v2/";
|
|
10
|
+
export declare const DOTCMS_DEMO_SITE = "http://localhost:8082/api/v1/site/";
|
|
11
|
+
export declare const FRAMEWORKS: SupportedFrontEndFrameworks[];
|
|
12
|
+
export declare const FRAMEWORKS_CHOICES: FrameworkChoices[];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FRAMEWORKS_CHOICES = exports.FRAMEWORKS = exports.DOTCMS_DEMO_SITE = exports.DOTCMS_EMA_CONFIG_API = exports.DOTCMS_TOKEN_API = exports.DOTCMS_HEALTH_API = exports.DOTCMS_USER = exports.DOTCMS_HOST = void 0;
|
|
4
|
+
exports.DOTCMS_HOST = 'http://localhost:8082';
|
|
5
|
+
exports.DOTCMS_USER = {
|
|
6
|
+
username: 'admin@dotcms.com',
|
|
7
|
+
password: 'admin'
|
|
8
|
+
};
|
|
9
|
+
// USED APIS
|
|
10
|
+
exports.DOTCMS_HEALTH_API = `${exports.DOTCMS_HOST}/api/v1/probes/alive`;
|
|
11
|
+
exports.DOTCMS_TOKEN_API = `${exports.DOTCMS_HOST}/api/v1/authentication/api-token`;
|
|
12
|
+
exports.DOTCMS_EMA_CONFIG_API = `${exports.DOTCMS_HOST}/api/v1/apps/dotema-config-v2/`;
|
|
13
|
+
exports.DOTCMS_DEMO_SITE = `${exports.DOTCMS_HOST}/api/v1/site/`;
|
|
14
|
+
// App constants
|
|
15
|
+
exports.FRAMEWORKS = [
|
|
16
|
+
'nextjs',
|
|
17
|
+
'astro',
|
|
18
|
+
'angular',
|
|
19
|
+
'angular-ssr'
|
|
20
|
+
];
|
|
21
|
+
exports.FRAMEWORKS_CHOICES = [
|
|
22
|
+
{ name: 'Next.js', value: 'nextjs' },
|
|
23
|
+
{ name: 'Astro', value: 'astro' },
|
|
24
|
+
{ name: 'Angular', value: 'angular' },
|
|
25
|
+
{ name: 'Angular (SSR)', value: 'angular-ssr' }
|
|
26
|
+
];
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/constants/index.ts"],"names":[],"mappings":";;;AAEa,QAAA,WAAW,GAAG,uBAAuB,CAAC;AACtC,QAAA,WAAW,GAAG;IACvB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,OAAO;CACpB,CAAC;AAEF,YAAY;AACC,QAAA,iBAAiB,GAAG,GAAG,mBAAW,sBAAsB,CAAC;AACzD,QAAA,gBAAgB,GAAG,GAAG,mBAAW,kCAAkC,CAAC;AACpE,QAAA,qBAAqB,GAAG,GAAG,mBAAW,gCAAgC,CAAC;AACvE,QAAA,gBAAgB,GAAG,GAAG,mBAAW,eAAe,CAAC;AAE9D,gBAAgB;AACH,QAAA,UAAU,GAAkC;IACrD,QAAQ;IACR,OAAO;IACP,SAAS;IACT,aAAa;CAChB,CAAC;AAEW,QAAA,kBAAkB,GAAuB;IAClD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IACjC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACrC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE;CAClD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare class FailedToCreateFrontendProjectError extends Error {
|
|
2
|
+
constructor(framework: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class DockerCliNotInstalledError extends Error {
|
|
5
|
+
constructor();
|
|
6
|
+
}
|
|
7
|
+
export declare class FailedToDownloadDockerComposeError extends Error {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
export declare class FailedToGetDotcmsTokenError extends Error {
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
export declare class FailedToSetUpUVEConfig extends Error {
|
|
14
|
+
constructor();
|
|
15
|
+
}
|
|
16
|
+
export declare class FailedToGetDemoSiteIdentifierError extends Error {
|
|
17
|
+
constructor();
|
|
18
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FailedToGetDemoSiteIdentifierError = exports.FailedToSetUpUVEConfig = exports.FailedToGetDotcmsTokenError = exports.FailedToDownloadDockerComposeError = exports.DockerCliNotInstalledError = exports.FailedToCreateFrontendProjectError = void 0;
|
|
4
|
+
class FailedToCreateFrontendProjectError extends Error {
|
|
5
|
+
constructor(framework) {
|
|
6
|
+
super(`Failed to create frontend project for framework: ${framework}. Please check if you have git installed and an active internet connection.`);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.FailedToCreateFrontendProjectError = FailedToCreateFrontendProjectError;
|
|
10
|
+
class DockerCliNotInstalledError extends Error {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(`Please check if Docker CLI installed in you system!`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.DockerCliNotInstalledError = DockerCliNotInstalledError;
|
|
16
|
+
class FailedToDownloadDockerComposeError extends Error {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(`Failed to download the docker compose file`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.FailedToDownloadDockerComposeError = FailedToDownloadDockerComposeError;
|
|
22
|
+
class FailedToGetDotcmsTokenError extends Error {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(`Failed to get dotCMS API token. Please make sure if dotCMS container is running.`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.FailedToGetDotcmsTokenError = FailedToGetDotcmsTokenError;
|
|
28
|
+
class FailedToSetUpUVEConfig extends Error {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(`Failed to set up UVE configuration in DotCMS.`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.FailedToSetUpUVEConfig = FailedToSetUpUVEConfig;
|
|
34
|
+
class FailedToGetDemoSiteIdentifierError extends Error {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(`Failed to get demo site identifier from DotCMS.`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.FailedToGetDemoSiteIdentifierError = FailedToGetDemoSiteIdentifierError;
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/errors/index.ts"],"names":[],"mappings":";;;AAAA,MAAa,kCAAmC,SAAQ,KAAK;IACzD,YAAY,SAAiB;QACzB,KAAK,CACD,oDAAoD,SAAS,6EAA6E,CAC7I,CAAC;IACN,CAAC;CACJ;AAND,gFAMC;AAED,MAAa,0BAA2B,SAAQ,KAAK;IACjD;QACI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACjE,CAAC;CACJ;AAJD,gEAIC;AAED,MAAa,kCAAmC,SAAQ,KAAK;IACzD;QACI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACxD,CAAC;CACJ;AAJD,gFAIC;AAED,MAAa,2BAA4B,SAAQ,KAAK;IAClD;QACI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IAC9F,CAAC;CACJ;AAJD,kEAIC;AAED,MAAa,sBAAuB,SAAQ,KAAK;IAC7C;QACI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC3D,CAAC;CACJ;AAJD,wDAIC;AAED,MAAa,kCAAmC,SAAQ,KAAK;IACzD;QACI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC7D,CAAC;CACJ;AAJD,gFAIC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SupportedFrontEndFrameworks } from '../types';
|
|
2
|
+
export declare const cloneFrontEndSample: ({ framework, directory }: {
|
|
3
|
+
framework: SupportedFrontEndFrameworks;
|
|
4
|
+
directory: string;
|
|
5
|
+
}) => Promise<void>;
|
|
6
|
+
export declare function downloadDockerCompose(directory: string): Promise<void>;
|
package/src/git/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cloneFrontEndSample = void 0;
|
|
4
|
+
exports.downloadDockerCompose = downloadDockerCompose;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const execa_1 = require("execa");
|
|
7
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
const cloneFrontEndSample = async ({ framework, directory }) => {
|
|
11
|
+
// 1. Clone repository (sparse + blobless)
|
|
12
|
+
await (0, execa_1.execa)('git', ['clone', '--filter=blob:none', '--sparse', 'https://github.com/dotCMS/core.git', '.'], { cwd: directory });
|
|
13
|
+
// 2. Enable sparse checkout & select the folder
|
|
14
|
+
await (0, execa_1.execa)('git', ['sparse-checkout', 'set', `examples/${framework}`], {
|
|
15
|
+
cwd: directory
|
|
16
|
+
});
|
|
17
|
+
// await fs.ensureDir(path.join(directory, framework));
|
|
18
|
+
// 3. Checkout main branch (only the selected folder is downloaded)
|
|
19
|
+
await (0, execa_1.execa)('git', ['checkout', 'main'], {
|
|
20
|
+
cwd: directory
|
|
21
|
+
// stdio: 'inherit'
|
|
22
|
+
});
|
|
23
|
+
const src = path_1.default.join(directory, 'examples', `${framework}`);
|
|
24
|
+
const dest = directory;
|
|
25
|
+
// const dest = path.join(directory, framework);
|
|
26
|
+
// Ensure framework directory exists
|
|
27
|
+
// await fs.ensureDir(dest);
|
|
28
|
+
// Remove EVERYTHING in repo except the examples folder
|
|
29
|
+
const items = await fs_extra_1.default.readdir(directory);
|
|
30
|
+
for (const item of items) {
|
|
31
|
+
if (item !== 'examples') {
|
|
32
|
+
await fs_extra_1.default.remove(path_1.default.join(directory, item));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Copy only the nextjs folder into the framework folder
|
|
36
|
+
await fs_extra_1.default.copy(src, dest, { overwrite: true });
|
|
37
|
+
// Remove the remaining examples folder
|
|
38
|
+
const allItems = await fs_extra_1.default.readdir(directory);
|
|
39
|
+
for (const item of allItems) {
|
|
40
|
+
if (item === 'examples') {
|
|
41
|
+
await fs_extra_1.default.remove(path_1.default.join(directory, item));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.cloneFrontEndSample = cloneFrontEndSample;
|
|
46
|
+
async function downloadDockerCompose(directory) {
|
|
47
|
+
// 6. Download docker-compose file
|
|
48
|
+
const dockerUrl = 'https://raw.githubusercontent.com/dotCMS/core/main/docker/docker-compose-examples/single-node-demo-site/docker-compose.yml';
|
|
49
|
+
const dockerComposePath = path_1.default.join(directory, 'docker-compose.yml');
|
|
50
|
+
await (0, utils_1.downloadFile)(dockerUrl, dockerComposePath);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/git/index.ts"],"names":[],"mappings":";;;AAiEA,sDAQC;;AAzED,iCAA8B;AAC9B,gEAA0B;AAE1B,wDAAwB;AAExB,oCAAwC;AAIjC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACtC,SAAS,EACT,SAAS,EAIZ,EAAE,EAAE;IACD,0CAA0C;IAC1C,MAAM,IAAA,aAAK,EACP,KAAK,EACL,CAAC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,oCAAoC,EAAE,GAAG,CAAC,EACtF,EAAE,GAAG,EAAE,SAAS,EAAE,CACrB,CAAC;IAEF,gDAAgD;IAChD,MAAM,IAAA,aAAK,EAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,YAAY,SAAS,EAAE,CAAC,EAAE;QACpE,GAAG,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,uDAAuD;IAEvD,mEAAmE;IACnE,MAAM,IAAA,aAAK,EAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;QACrC,GAAG,EAAE,SAAS;QACd,mBAAmB;KACtB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,gDAAgD;IAEhD,oCAAoC;IACpC,4BAA4B;IAE5B,uDAAuD;IACvD,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACtB,MAAM,kBAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,MAAM,kBAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACtB,MAAM,kBAAE,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAtDW,QAAA,mBAAmB,uBAsD9B;AAEK,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IACzD,kCAAkC;IAClC,MAAM,SAAS,GACX,4HAA4H,CAAC;IAEjI,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAErE,MAAM,IAAA,oBAAY,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACrD,CAAC"}
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createApp = createApp;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const execa_1 = require("execa");
|
|
9
|
+
const ora_1 = tslib_1.__importDefault(require("ora"));
|
|
10
|
+
const ts_results_1 = require("ts-results");
|
|
11
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
12
|
+
const api_1 = require("./api");
|
|
13
|
+
const asks_1 = require("./asks");
|
|
14
|
+
const constants_1 = require("./constants");
|
|
15
|
+
const errors_1 = require("./errors");
|
|
16
|
+
const git_1 = require("./git");
|
|
17
|
+
const utils_1 = require("./utils");
|
|
18
|
+
// Supported values
|
|
19
|
+
const program = new commander_1.Command();
|
|
20
|
+
program
|
|
21
|
+
.name('dotcms-create-app')
|
|
22
|
+
.description('dotCMS CLI for creating applications')
|
|
23
|
+
.version('0.1.0-beta');
|
|
24
|
+
program
|
|
25
|
+
.argument('<project-name>', 'Name of the project folder')
|
|
26
|
+
.option('-f, --framework <framework>', 'Framework to use [nextjs,astro,angular,angular-ssr]')
|
|
27
|
+
// directory flags
|
|
28
|
+
.option('-d, --directory <path>', 'Project directory')
|
|
29
|
+
// cloud / no-cloud
|
|
30
|
+
.option('--local', 'Use local dotCMS instance using docker')
|
|
31
|
+
// cloud options (if cloud selected)
|
|
32
|
+
.option('--url <url>', 'DotCMS instance url (skip in case of local)')
|
|
33
|
+
.option('-u, --username <username>', 'DotCMS instance username (skip in case of local)')
|
|
34
|
+
.option('-p, --password <password>', 'DotCMS instance password (skip in case of local)')
|
|
35
|
+
.action(async (projectName, options) => {
|
|
36
|
+
// <-- Add beta notice here
|
|
37
|
+
console.log(chalk_1.default.bgGrey.white('\n\n βΉοΈ Beta: Features may change \n'));
|
|
38
|
+
const { dir, directory } = options;
|
|
39
|
+
const { url } = options;
|
|
40
|
+
const { user, username } = options;
|
|
41
|
+
const { pass, password } = options;
|
|
42
|
+
const { framework, f } = options;
|
|
43
|
+
let directoryInput;
|
|
44
|
+
let finalDirectory;
|
|
45
|
+
let isCloudInstanceSelected;
|
|
46
|
+
let selectedFramework;
|
|
47
|
+
if (dir === undefined && directory === undefined) {
|
|
48
|
+
directoryInput = await (0, asks_1.askDirectory)();
|
|
49
|
+
finalDirectory = await (0, asks_1.prepareDirectory)(directoryInput, projectName);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
directoryInput = dir || directory;
|
|
53
|
+
finalDirectory = await (0, asks_1.prepareDirectory)(directoryInput, projectName);
|
|
54
|
+
}
|
|
55
|
+
if (framework === undefined && f === undefined) {
|
|
56
|
+
selectedFramework = await (0, asks_1.askFramework)();
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
selectedFramework = framework || f;
|
|
60
|
+
}
|
|
61
|
+
if (options.local === undefined) {
|
|
62
|
+
isCloudInstanceSelected = await (0, asks_1.askCloudOrLocalInstance)();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
isCloudInstanceSelected = !JSON.parse(options.local);
|
|
66
|
+
}
|
|
67
|
+
if (isCloudInstanceSelected) {
|
|
68
|
+
const urlDotcmsInstance = url === undefined ? await (0, asks_1.askDotcmsCloudUrl)() : url;
|
|
69
|
+
const userNameDotCmsInstance = user === undefined && username === undefined
|
|
70
|
+
? await (0, asks_1.askUserNameForDotcmsCloud)()
|
|
71
|
+
: user || username;
|
|
72
|
+
const passwordDotCmsInstance = pass === undefined && password === undefined
|
|
73
|
+
? await (0, asks_1.askPasswordForDotcmsCloud)()
|
|
74
|
+
: pass || password;
|
|
75
|
+
const spinner = (0, ora_1.default)(`Scaffolding ${selectedFramework} application ...`).start();
|
|
76
|
+
const created = await scaffoldFrontendProject({
|
|
77
|
+
framework: selectedFramework,
|
|
78
|
+
directory: finalDirectory
|
|
79
|
+
});
|
|
80
|
+
if (!created.ok) {
|
|
81
|
+
spinner.fail(`Failed to scaffold frontend project (${selectedFramework}).`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
spinner.succeed(`Frontend project (${selectedFramework}) scaffolded successfully.`);
|
|
85
|
+
const healthApiURL = (0, utils_1.getDotcmsApisByBaseUrl)(urlDotcmsInstance).DOTCMS_HEALTH_API;
|
|
86
|
+
const emaConfigApiURL = (0, utils_1.getDotcmsApisByBaseUrl)(urlDotcmsInstance).DOTCMS_EMA_CONFIG_API;
|
|
87
|
+
const demoSiteApiURL = (0, utils_1.getDotcmsApisByBaseUrl)(urlDotcmsInstance).DOTCMS_DEMO_SITE;
|
|
88
|
+
const tokenApiUrl = (0, utils_1.getDotcmsApisByBaseUrl)(urlDotcmsInstance).DOTCMS_TOKEN_API;
|
|
89
|
+
spinner.start('Verifying if dotCMS is running...');
|
|
90
|
+
const checkIfDotcmsIsRunning = await isDotcmsRunning(`DotCMS is not running on the provided url ${urlDotcmsInstance}.Please make sure you have typed the correct url`, healthApiURL);
|
|
91
|
+
if (!checkIfDotcmsIsRunning) {
|
|
92
|
+
spinner.fail('dotCMS is not running on the following url ' +
|
|
93
|
+
urlDotcmsInstance +
|
|
94
|
+
'. Please check the url and try again.');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
spinner.succeed('dotCMS is running.');
|
|
98
|
+
const dotcmsToken = await api_1.DotCMSApi.getAuthToken({
|
|
99
|
+
payload: {
|
|
100
|
+
user: userNameDotCmsInstance,
|
|
101
|
+
password: passwordDotCmsInstance,
|
|
102
|
+
expirationDays: '30',
|
|
103
|
+
label: 'token for frontend app'
|
|
104
|
+
},
|
|
105
|
+
url: tokenApiUrl
|
|
106
|
+
});
|
|
107
|
+
if (!dotcmsToken.ok) {
|
|
108
|
+
spinner.fail('Failed to get authentication token from Dotcms.');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const demoSite = await api_1.DotCMSApi.getDemoSiteIdentifier({
|
|
112
|
+
siteName: 'demo.dotcms.com',
|
|
113
|
+
authenticationToken: dotcmsToken.val,
|
|
114
|
+
url: demoSiteApiURL
|
|
115
|
+
});
|
|
116
|
+
if (!demoSite.ok) {
|
|
117
|
+
spinner.fail('Failed to get demo site identifier from Dotcms.');
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const setUpUVE = await api_1.DotCMSApi.setupUVEConfig({
|
|
121
|
+
payload: {
|
|
122
|
+
configuration: {
|
|
123
|
+
hidden: false,
|
|
124
|
+
value: (0, utils_1.getUVEConfigValue)(`http://localhost:${(0, utils_1.getPortByFramework)(selectedFramework)}`)
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
siteId: demoSite.val.entity.identifier,
|
|
128
|
+
authenticationToken: dotcmsToken.val,
|
|
129
|
+
url: emaConfigApiURL
|
|
130
|
+
});
|
|
131
|
+
if (!setUpUVE.ok) {
|
|
132
|
+
spinner.fail('Failed to setup UVE configuration in Dotcms.');
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
spinner.succeed('Project setup completed successfully.');
|
|
136
|
+
const relativePath = path_1.default.relative(process.cwd(), finalDirectory) || '.';
|
|
137
|
+
switch (selectedFramework) {
|
|
138
|
+
case 'nextjs': {
|
|
139
|
+
(0, utils_1.finalStepsForNextjs)({
|
|
140
|
+
projectPath: relativePath,
|
|
141
|
+
token: dotcmsToken.val,
|
|
142
|
+
siteId: demoSite.val.entity.identifier,
|
|
143
|
+
urlDotCMSInstance: urlDotcmsInstance
|
|
144
|
+
});
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case 'angular': {
|
|
148
|
+
(0, utils_1.finalStepsForAngularAndAngularSSR)({
|
|
149
|
+
projectPath: relativePath,
|
|
150
|
+
token: dotcmsToken.val,
|
|
151
|
+
siteId: demoSite.val.entity.identifier,
|
|
152
|
+
urlDotCMSInstance: urlDotcmsInstance
|
|
153
|
+
});
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'angular-ssr': {
|
|
157
|
+
(0, utils_1.finalStepsForAngularAndAngularSSR)({
|
|
158
|
+
projectPath: relativePath,
|
|
159
|
+
token: dotcmsToken.val,
|
|
160
|
+
siteId: demoSite.val.entity.identifier,
|
|
161
|
+
urlDotCMSInstance: urlDotcmsInstance
|
|
162
|
+
});
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case 'astro': {
|
|
166
|
+
(0, utils_1.finalStepsForAstro)({
|
|
167
|
+
projectPath: relativePath,
|
|
168
|
+
token: dotcmsToken.val,
|
|
169
|
+
siteId: demoSite.val.entity.identifier,
|
|
170
|
+
urlDotCMSInstance: urlDotcmsInstance
|
|
171
|
+
});
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// console.log(chalk.green("β Starting DotCMS app setup...\n"));
|
|
178
|
+
// const spinner = ora(`Scaffolding ${framework} application ...`).start();
|
|
179
|
+
const spinner = (0, ora_1.default)(`Scaffolding ${selectedFramework} application ...`).start();
|
|
180
|
+
// STEP 1 β Scaffold front-end
|
|
181
|
+
const created = await scaffoldFrontendProject({
|
|
182
|
+
framework: selectedFramework,
|
|
183
|
+
directory: finalDirectory
|
|
184
|
+
});
|
|
185
|
+
if (!created.ok) {
|
|
186
|
+
spinner.fail(`Failed to scaffold frontend project (${selectedFramework}).`);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
spinner.succeed(`Frontend project (${selectedFramework}) scaffolded successfully.`);
|
|
190
|
+
spinner.start('Setting up dotCMS with Docker Compose...');
|
|
191
|
+
// STEP 2 β Download docker-compose
|
|
192
|
+
const downloaded = await downloadTheDockerCompose({
|
|
193
|
+
directory: finalDirectory
|
|
194
|
+
});
|
|
195
|
+
if (!downloaded.ok) {
|
|
196
|
+
spinner.fail('Failed to download Docker Compose file.');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
spinner.succeed('Docker Compose Download completed.');
|
|
200
|
+
spinner.start('Starting dotCMS with Docker Compose (This may take sometime enjoy a coffee βοΈ )...');
|
|
201
|
+
// STEP 3 β Run docker-compose
|
|
202
|
+
const ran = await runDockerCompose({ directory: finalDirectory });
|
|
203
|
+
if (!ran.ok) {
|
|
204
|
+
spinner.fail('Failed to start dotCMS ensure docker is running and ports 8082, 8443, 9200, and 9600 are free.');
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
spinner.succeed('dotCMS containers started successfully.');
|
|
208
|
+
spinner.start('Verifying if dotCMS is running...');
|
|
209
|
+
const checkIfDotcmsIsRunning = await isDotcmsRunning('Failed to start dotCMS.Ensure Docker is running and ports 8082, 8443, 9200, and 9600 are free');
|
|
210
|
+
if (!checkIfDotcmsIsRunning) {
|
|
211
|
+
spinner.fail('dotCMS is not running. Please check the docker containers.');
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
spinner.succeed('dotCMS is running.');
|
|
215
|
+
const dotcmsToken = await api_1.DotCMSApi.getAuthToken({
|
|
216
|
+
payload: {
|
|
217
|
+
user: constants_1.DOTCMS_USER.username,
|
|
218
|
+
password: constants_1.DOTCMS_USER.password,
|
|
219
|
+
expirationDays: '30',
|
|
220
|
+
label: 'token for frontend app'
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
if (!dotcmsToken.ok) {
|
|
224
|
+
spinner.fail('Failed to get authentication token from Dotcms.');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const demoSite = await api_1.DotCMSApi.getDemoSiteIdentifier({
|
|
228
|
+
siteName: 'demo.dotcms.com',
|
|
229
|
+
authenticationToken: dotcmsToken.val
|
|
230
|
+
});
|
|
231
|
+
if (!demoSite.ok) {
|
|
232
|
+
spinner.fail('Failed to get demo site identifier from Dotcms.');
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const setUpUVE = await api_1.DotCMSApi.setupUVEConfig({
|
|
236
|
+
payload: {
|
|
237
|
+
configuration: {
|
|
238
|
+
hidden: false,
|
|
239
|
+
value: (0, utils_1.getUVEConfigValue)(`http://localhost:${(0, utils_1.getPortByFramework)(selectedFramework)}`)
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
siteId: demoSite.val.entity.identifier,
|
|
243
|
+
authenticationToken: dotcmsToken.val
|
|
244
|
+
});
|
|
245
|
+
if (!setUpUVE.ok) {
|
|
246
|
+
spinner.fail('Failed to setup UVE configuration in Dotcms.');
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
spinner.succeed('Project setup completed successfully.');
|
|
250
|
+
const relativePath = path_1.default.relative(process.cwd(), finalDirectory) || '.';
|
|
251
|
+
switch (selectedFramework) {
|
|
252
|
+
case 'nextjs': {
|
|
253
|
+
(0, utils_1.finalStepsForNextjs)({
|
|
254
|
+
projectPath: relativePath,
|
|
255
|
+
token: dotcmsToken.val,
|
|
256
|
+
siteId: demoSite.val.entity.identifier,
|
|
257
|
+
urlDotCMSInstance: 'http://localhost:8082'
|
|
258
|
+
});
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
case 'angular': {
|
|
262
|
+
(0, utils_1.finalStepsForAngularAndAngularSSR)({
|
|
263
|
+
projectPath: relativePath,
|
|
264
|
+
token: dotcmsToken.val,
|
|
265
|
+
siteId: demoSite.val.entity.identifier,
|
|
266
|
+
urlDotCMSInstance: 'http://localhost:8082'
|
|
267
|
+
});
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
case 'angular-ssr': {
|
|
271
|
+
(0, utils_1.finalStepsForAngularAndAngularSSR)({
|
|
272
|
+
projectPath: relativePath,
|
|
273
|
+
token: dotcmsToken.val,
|
|
274
|
+
siteId: demoSite.val.entity.identifier,
|
|
275
|
+
urlDotCMSInstance: 'http://localhost:8082'
|
|
276
|
+
});
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
case 'astro': {
|
|
280
|
+
(0, utils_1.finalStepsForAstro)({
|
|
281
|
+
projectPath: relativePath,
|
|
282
|
+
token: dotcmsToken.val,
|
|
283
|
+
siteId: demoSite.val.entity.identifier,
|
|
284
|
+
urlDotCMSInstance: 'http://localhost:8082'
|
|
285
|
+
});
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
async function createApp() {
|
|
291
|
+
program.parse();
|
|
292
|
+
}
|
|
293
|
+
/* -------------------------------------------------------
|
|
294
|
+
* STEP FUNCTIONS (no spinner, only chalk)
|
|
295
|
+
* -----------------------------------------------------*/
|
|
296
|
+
async function scaffoldFrontendProject({ framework, directory }) {
|
|
297
|
+
try {
|
|
298
|
+
await (0, git_1.cloneFrontEndSample)({ directory, framework });
|
|
299
|
+
return (0, ts_results_1.Ok)(undefined);
|
|
300
|
+
}
|
|
301
|
+
catch (err) {
|
|
302
|
+
console.log(chalk_1.default.red(`β Failed to create ${framework} project. Please check git installation and network connection.` +
|
|
303
|
+
JSON.stringify(err)));
|
|
304
|
+
return (0, ts_results_1.Err)(new errors_1.FailedToCreateFrontendProjectError(framework));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
async function downloadTheDockerCompose({ directory }) {
|
|
308
|
+
try {
|
|
309
|
+
// console.log(chalk.cyan("π₯ Downloading docker-compose.yml..."));
|
|
310
|
+
await (0, git_1.downloadDockerCompose)(directory);
|
|
311
|
+
// console.log(chalk.green(`β docker-compose.yml downloaded successfully!\n`));
|
|
312
|
+
return (0, ts_results_1.Ok)(undefined);
|
|
313
|
+
}
|
|
314
|
+
catch (err) {
|
|
315
|
+
console.log(chalk_1.default.red('β Failed to download docker-compose.yml.' + JSON.stringify(err)));
|
|
316
|
+
return (0, ts_results_1.Err)(new errors_1.FailedToDownloadDockerComposeError());
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
async function runDockerCompose({ directory }) {
|
|
320
|
+
try {
|
|
321
|
+
// console.log(chalk.cyan("π³ Starting Docker containers... (This might take some time)"));
|
|
322
|
+
await (0, execa_1.execa)('docker', ['compose', 'up', '-d'], { cwd: directory });
|
|
323
|
+
await (0, execa_1.execa)('docker', ['ps'], { cwd: directory });
|
|
324
|
+
// console.log(chalk.green("β Docker containers started successfully!\n"));
|
|
325
|
+
return (0, ts_results_1.Ok)(undefined);
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
return (0, ts_results_1.Err)(err);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
async function isDotcmsRunning(errorMessage, url) {
|
|
332
|
+
try {
|
|
333
|
+
// console.log(chalk.cyan("Waiting for DotCMS to be up ...."));
|
|
334
|
+
const res = await (0, utils_1.fetchWithRetry)(url ?? constants_1.DOTCMS_HEALTH_API, 20, 5000);
|
|
335
|
+
if (res && res.status === 200) {
|
|
336
|
+
// console.log(chalk.green("β DotCMS container started sucessfully!\n"));
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
console.log(chalk_1.default.red('β' + errorMessage));
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
createApp();
|
|
347
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/sdk/create-app/src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export type SupportedFrontEndFrameworks = 'nextjs' | 'astro' | 'angular' | 'angular-ssr';
|
|
2
|
+
export type FrameworkChoices = {
|
|
3
|
+
name: string;
|
|
4
|
+
value: SupportedFrontEndFrameworks;
|
|
5
|
+
};
|
|
6
|
+
export interface GetUserTokenRequest {
|
|
7
|
+
user: string;
|
|
8
|
+
password: string;
|
|
9
|
+
expirationDays: string;
|
|
10
|
+
label: string;
|
|
11
|
+
}
|
|
12
|
+
export interface GetUserTokenResponse {
|
|
13
|
+
entity: {
|
|
14
|
+
token: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface UVEConfigRequest {
|
|
18
|
+
configuration: {
|
|
19
|
+
hidden: false;
|
|
20
|
+
value: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface UVEConfigResponse {
|
|
24
|
+
entity: 'Ok';
|
|
25
|
+
}
|
|
26
|
+
export interface DemoSiteResponse {
|
|
27
|
+
entity: {
|
|
28
|
+
addThis: string;
|
|
29
|
+
aliases: string;
|
|
30
|
+
archived: boolean;
|
|
31
|
+
default: boolean;
|
|
32
|
+
description: string;
|
|
33
|
+
embeddedDashboard: string | null;
|
|
34
|
+
googleAnalytics: string;
|
|
35
|
+
googleMap: string;
|
|
36
|
+
identifier: string;
|
|
37
|
+
inode: string;
|
|
38
|
+
keywords: string;
|
|
39
|
+
languageId: number;
|
|
40
|
+
live: boolean;
|
|
41
|
+
locked: boolean;
|
|
42
|
+
modDate: number;
|
|
43
|
+
modUser: string;
|
|
44
|
+
proxyUrlForEditMode: string | null;
|
|
45
|
+
runDashboard: boolean;
|
|
46
|
+
siteName: string;
|
|
47
|
+
siteThumbnail: string;
|
|
48
|
+
systemHost: boolean;
|
|
49
|
+
tagStorage: string;
|
|
50
|
+
working: boolean;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SupportedFrontEndFrameworks } from '../types';
|
|
2
|
+
export declare function fetchWithRetry(url: string, retries?: number, delay?: number): Promise<import("axios").AxiosResponse<any, any, {}>>;
|
|
3
|
+
export declare function getUVEConfigValue(frontEndUrl: string): string;
|
|
4
|
+
export declare function getPortByFramework(framework: SupportedFrontEndFrameworks): string;
|
|
5
|
+
export declare function getDotcmsApisByBaseUrl(baseUrl: string): {
|
|
6
|
+
DOTCMS_HEALTH_API: string;
|
|
7
|
+
DOTCMS_TOKEN_API: string;
|
|
8
|
+
DOTCMS_EMA_CONFIG_API: string;
|
|
9
|
+
DOTCMS_DEMO_SITE: string;
|
|
10
|
+
};
|
|
11
|
+
/** Utility to download a file using https */
|
|
12
|
+
export declare function downloadFile(url: string, dest: string): Promise<void>;
|
|
13
|
+
export declare function finalStepsForNextjs({ projectPath, urlDotCMSInstance, siteId, token }: {
|
|
14
|
+
projectPath: string;
|
|
15
|
+
urlDotCMSInstance: string;
|
|
16
|
+
siteId: string;
|
|
17
|
+
token: string;
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function finalStepsForAstro({ projectPath, urlDotCMSInstance, siteId, token }: {
|
|
20
|
+
projectPath: string;
|
|
21
|
+
urlDotCMSInstance: string;
|
|
22
|
+
siteId: string;
|
|
23
|
+
token: string;
|
|
24
|
+
}): void;
|
|
25
|
+
export declare function finalStepsForAngularAndAngularSSR({ projectPath, urlDotCMSInstance, siteId, token }: {
|
|
26
|
+
projectPath: string;
|
|
27
|
+
urlDotCMSInstance: string;
|
|
28
|
+
siteId: string;
|
|
29
|
+
token: string;
|
|
30
|
+
}): void;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchWithRetry = fetchWithRetry;
|
|
4
|
+
exports.getUVEConfigValue = getUVEConfigValue;
|
|
5
|
+
exports.getPortByFramework = getPortByFramework;
|
|
6
|
+
exports.getDotcmsApisByBaseUrl = getDotcmsApisByBaseUrl;
|
|
7
|
+
exports.downloadFile = downloadFile;
|
|
8
|
+
exports.finalStepsForNextjs = finalStepsForNextjs;
|
|
9
|
+
exports.finalStepsForAstro = finalStepsForAstro;
|
|
10
|
+
exports.finalStepsForAngularAndAngularSSR = finalStepsForAngularAndAngularSSR;
|
|
11
|
+
const tslib_1 = require("tslib");
|
|
12
|
+
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
13
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
14
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
15
|
+
const https_1 = tslib_1.__importDefault(require("https"));
|
|
16
|
+
async function fetchWithRetry(url, retries = 5, delay = 5000) {
|
|
17
|
+
for (let i = 0; i < retries; i++) {
|
|
18
|
+
try {
|
|
19
|
+
return await axios_1.default.get(url);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
console.log(`dotCMS still not up π΄ ${i + 1}. Retrying in ${delay / 1000}s...`);
|
|
23
|
+
if (i === retries - 1)
|
|
24
|
+
throw err; // throw after last attempt
|
|
25
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function getUVEConfigValue(frontEndUrl) {
|
|
30
|
+
return JSON.stringify({
|
|
31
|
+
config: [
|
|
32
|
+
{
|
|
33
|
+
pattern: '.*',
|
|
34
|
+
url: frontEndUrl
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function getPortByFramework(framework) {
|
|
40
|
+
switch (framework) {
|
|
41
|
+
case 'angular':
|
|
42
|
+
return '4200';
|
|
43
|
+
case 'angular-ssr':
|
|
44
|
+
return '4200';
|
|
45
|
+
case 'nextjs':
|
|
46
|
+
return '3000';
|
|
47
|
+
case 'astro':
|
|
48
|
+
return '4321';
|
|
49
|
+
default:
|
|
50
|
+
throw new Error(`Unsupported framework: ${framework}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function getDotcmsApisByBaseUrl(baseUrl) {
|
|
54
|
+
return {
|
|
55
|
+
DOTCMS_HEALTH_API: `${baseUrl}/api/v1/probes/alive`,
|
|
56
|
+
DOTCMS_TOKEN_API: `${baseUrl}/api/v1/authentication/api-token`,
|
|
57
|
+
DOTCMS_EMA_CONFIG_API: `${baseUrl}/api/v1/apps/dotema-config-v2/`,
|
|
58
|
+
DOTCMS_DEMO_SITE: `${baseUrl}/api/v1/site/`
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/** Utility to download a file using https */
|
|
62
|
+
function downloadFile(url, dest) {
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const file = fs_extra_1.default.createWriteStream(dest);
|
|
65
|
+
https_1.default
|
|
66
|
+
.get(url, (response) => {
|
|
67
|
+
if (response.statusCode !== 200) {
|
|
68
|
+
return reject(new Error(`Failed to download file: ${response.statusCode}`));
|
|
69
|
+
}
|
|
70
|
+
response.pipe(file);
|
|
71
|
+
file.on('finish', () => file.close(() => resolve()));
|
|
72
|
+
})
|
|
73
|
+
.on('error', (err) => {
|
|
74
|
+
fs_extra_1.default.unlink(dest);
|
|
75
|
+
reject(err);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function finalStepsForNextjs({ projectPath, urlDotCMSInstance, siteId, token }) {
|
|
80
|
+
console.log('\n');
|
|
81
|
+
console.log(chalk_1.default.cyanBright('π Update your frontend environment variables:\n'));
|
|
82
|
+
console.log(chalk_1.default.white('πͺ Steps:\n'));
|
|
83
|
+
console.log(chalk_1.default.white('1- cd ') + chalk_1.default.green(projectPath));
|
|
84
|
+
console.log(chalk_1.default.white('2- Create a new file with the name ') +
|
|
85
|
+
chalk_1.default.green('.env') +
|
|
86
|
+
' and paste the following:\n');
|
|
87
|
+
// ENV BLOCK β nicely spaced + grouped
|
|
88
|
+
console.log(chalk_1.default.white('ββββββββββββββββββββββββββββββββββββββββββββββ'));
|
|
89
|
+
console.log(chalk_1.default.white(getEnvVariablesForNextJS(urlDotCMSInstance, siteId, token)));
|
|
90
|
+
console.log(chalk_1.default.white('ββββββββββββββββββββββββββββββββββββββββββββββ\n'));
|
|
91
|
+
// INSTALL DEPENDENCIES
|
|
92
|
+
console.log(chalk_1.default.magentaBright('π¦ Install frontend dependencies:'));
|
|
93
|
+
console.log(chalk_1.default.white('$ npm install\n'));
|
|
94
|
+
// START DEV SERVER
|
|
95
|
+
console.log(chalk_1.default.blueBright('π» Start your frontend development server:'));
|
|
96
|
+
console.log(chalk_1.default.white('$ npm run dev\n'));
|
|
97
|
+
console.log(chalk_1.default.greenBright("π You're all set! Start building your app with dotCMS + your chosen frontend framework.\n"));
|
|
98
|
+
}
|
|
99
|
+
function finalStepsForAstro({ projectPath, urlDotCMSInstance, siteId, token }) {
|
|
100
|
+
console.log('\n');
|
|
101
|
+
console.log(chalk_1.default.cyanBright('π Update your frontend environment variables:\n'));
|
|
102
|
+
console.log(chalk_1.default.white('πͺ Steps:\n'));
|
|
103
|
+
console.log(chalk_1.default.white('1- cd ') + chalk_1.default.green(projectPath));
|
|
104
|
+
console.log(chalk_1.default.white('2- Create a new file with the name ') +
|
|
105
|
+
chalk_1.default.green('.env') +
|
|
106
|
+
' and paste the following:\n');
|
|
107
|
+
// ENV BLOCK β nicely spaced + grouped
|
|
108
|
+
console.log(chalk_1.default.white('ββββββββββββββββββββββββββββββββββββββββββββββ'));
|
|
109
|
+
console.log(chalk_1.default.white(getEnvVariablesForAstro(urlDotCMSInstance, siteId, token)));
|
|
110
|
+
console.log();
|
|
111
|
+
console.log(chalk_1.default.white('ββββββββββββββββββββββββββββββββββββββββββββββ\n'));
|
|
112
|
+
// INSTALL DEPENDENCIES
|
|
113
|
+
console.log(chalk_1.default.magentaBright('π¦ Install frontend dependencies:'));
|
|
114
|
+
console.log(chalk_1.default.white('$ npm install\n'));
|
|
115
|
+
// START DEV SERVER
|
|
116
|
+
console.log(chalk_1.default.blueBright('π» Start your frontend development server:'));
|
|
117
|
+
console.log(chalk_1.default.white('$ npm run dev\n'));
|
|
118
|
+
console.log(chalk_1.default.greenBright("π You're all set! Start building your app with dotCMS + your chosen frontend framework.\n"));
|
|
119
|
+
}
|
|
120
|
+
function finalStepsForAngularAndAngularSSR({ projectPath, urlDotCMSInstance, siteId, token }) {
|
|
121
|
+
console.log('\n');
|
|
122
|
+
console.log(chalk_1.default.cyanBright('π Update your frontend environment variables:\n'));
|
|
123
|
+
console.log(chalk_1.default.white('πͺ Steps:\n'));
|
|
124
|
+
console.log(chalk_1.default.white('1- cd ') + chalk_1.default.green(projectPath) + '/src/environments');
|
|
125
|
+
console.log(chalk_1.default.white('2- Replace the content of the file ' +
|
|
126
|
+
chalk_1.default.green('environment.ts') +
|
|
127
|
+
' and ' +
|
|
128
|
+
chalk_1.default.green('environment.development.ts') +
|
|
129
|
+
' with the following:'));
|
|
130
|
+
// ENV BLOCK β nicely spaced + grouped
|
|
131
|
+
console.log(chalk_1.default.white('ββββββββββββββββββββββββββββββββββββββββββββββ'));
|
|
132
|
+
console.log(chalk_1.default.white(getEnvVariablesForAngular(urlDotCMSInstance, siteId, token)));
|
|
133
|
+
console.log(chalk_1.default.white('ββββββββββββββββββββββββββββββββββββββββββββββ\n'));
|
|
134
|
+
// INSTALL DEPENDENCIES
|
|
135
|
+
console.log(chalk_1.default.magentaBright('π¦ Install frontend dependencies:'));
|
|
136
|
+
console.log(chalk_1.default.white('$ npm install\n'));
|
|
137
|
+
// START DEV SERVER
|
|
138
|
+
console.log(chalk_1.default.blueBright('π» Start your frontend development server:'));
|
|
139
|
+
console.log(chalk_1.default.white('$ ng serve\n'));
|
|
140
|
+
console.log(chalk_1.default.greenBright("π You're all set! Start building your app with dotCMS + your chosen frontend framework.\n"));
|
|
141
|
+
}
|
|
142
|
+
function getEnvVariablesForNextJS(host, siteId, token) {
|
|
143
|
+
return `
|
|
144
|
+
NEXT_PUBLIC_DOTCMS_AUTH_TOKEN=${token}
|
|
145
|
+
NEXT_PUBLIC_DOTCMS_HOST=${host}
|
|
146
|
+
NEXT_PUBLIC_DOTCMS_SITE_ID=${siteId}
|
|
147
|
+
NEXT_PUBLIC_DOTCMS_MODE='production'
|
|
148
|
+
NODE_TLS_REJECT_UNAUTHORIZED=0
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
function getEnvVariablesForAstro(host, siteId, token) {
|
|
152
|
+
return `
|
|
153
|
+
PUBLIC_DOTCMS_AUTH_TOKEN=${token}
|
|
154
|
+
PUBLIC_DOTCMS_HOST=${host}
|
|
155
|
+
PUBLIC_DOTCMS_SITE_ID=${siteId}
|
|
156
|
+
PUBLIC_EXPERIMENTS_API_KEY=analytic-api-key-from-dotcms-portlet
|
|
157
|
+
PUBLIC_EXPERIMENTS_DEBUG=true
|
|
158
|
+
# If your local dotcms instance is running in https, this setting allows Node.js to connect to servers with invalid SSL certificates.
|
|
159
|
+
# For testing purposes only.
|
|
160
|
+
NODE_TLS_REJECT_UNAUTHORIZED=0
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
163
|
+
function getEnvVariablesForAngular(host, siteId, token) {
|
|
164
|
+
return `
|
|
165
|
+
export const environment = {
|
|
166
|
+
dotcmsUrl: ${host},
|
|
167
|
+
authToken: ${token},
|
|
168
|
+
siteId: ${siteId},
|
|
169
|
+
};
|
|
170
|
+
`;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/utils/index.ts"],"names":[],"mappings":"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"}
|