@procamp/cli 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/index.js +1 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/command/generate.d.ts +1 -1
- package/dist/command/generate.js +63 -48
- package/dist/command/generate.js.map +1 -1
- package/dist/command/init.d.ts +1 -1
- package/dist/command/init.js +82 -36
- package/dist/command/init.js.map +1 -1
- package/dist/command/login.js +54 -22
- package/dist/command/login.js.map +1 -1
- package/dist/command/new.d.ts +1 -1
- package/dist/command/new.js +32 -6
- package/dist/command/new.js.map +1 -1
- package/dist/command/pack.d.ts +1 -1
- package/dist/command/pack.js +60 -23
- package/dist/command/pack.js.map +1 -1
- package/dist/command/publish.js +45 -19
- package/dist/command/publish.js.map +1 -1
- package/dist/command/validate.d.ts +1 -1
- package/dist/command/validate.js +12 -1
- package/dist/command/validate.js.map +1 -1
- package/dist/interfaces/procamp_config.d.ts +7 -0
- package/dist/interfaces/procamp_config.js +3 -0
- package/dist/interfaces/procamp_config.js.map +1 -0
- package/dist/utils/getUserId.d.ts +2 -1
- package/dist/utils/getUserId.js +26 -3
- package/dist/utils/getUserId.js.map +1 -1
- package/package.json +4 -7
package/dist/bin/index.js
CHANGED
|
@@ -37,7 +37,7 @@ exports.program
|
|
|
37
37
|
.description('Validate course folder structure')
|
|
38
38
|
.action(validate_1.validate);
|
|
39
39
|
exports.program
|
|
40
|
-
.command('generate
|
|
40
|
+
.command('generate <courseName>')
|
|
41
41
|
.alias('g')
|
|
42
42
|
.description('Generating Course with blueprint.yml')
|
|
43
43
|
.action(generate_1.generateCourse);
|
package/dist/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";;;;AAEA,yCAAoC;AACpC,kDAAqD;AACrD,0CAA6C;AAC7C,4CAAyC;AACzC,wCAA8C;AAC9C,0CAA4C;AAC5C,gDAAmD;AACnD,kDAA+C;AAC/C,0CAAuC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bin/index.ts"],"names":[],"mappings":";;;;AAEA,yCAAoC;AACpC,kDAAqD;AACrD,0CAA6C;AAC7C,4CAAyC;AACzC,wCAA8C;AAC9C,0CAA4C;AAC5C,gDAAmD;AACnD,kDAA+C;AAC/C,0CAAuC;AAEvC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAExD,QAAA,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AACrC,eAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAE7D,eAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CACL,6BAA6B,EAC7B,iCAAiC,EACjC,OAAO,CAAC,GAAG,EAAE,CACd;KACA,MAAM,CAAC,iBAAU,CAAC,CAAC;AAEtB,eAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,kBAAY,CAAC,CAAC;AAExB,eAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,6BAA6B,EAAE,uBAAuB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC7E,MAAM,CAAC,gBAAS,CAAC,CAAC;AAErB,eAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,uBAAa,CAAC,CAAC;AAEzB,eAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,mBAAQ,CAAC,CAAC;AAGpB,eAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,yBAAc,CAAC,CAAC;AAE1B,eAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,aAAK,CAAC,CAAC;AACvE,eAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE;IACpC,IAAA,aAAK,EAAC,sBAAsB,OAAO,YAAY,CAAC,CAAC;IACjD,eAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,eAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC","sourcesContent":["#! /usr/bin/env node\n\nimport { Command } from 'commander';\nimport { generateCourse } from '../command/generate';\nimport { initCourse } from '../command/init';\nimport { login } from '../command/login';\nimport { createCourse } from '../command/new';\nimport { zipCourse } from '../command/pack';\nimport { publishCourse } from '../command/publish';\nimport { validate } from '../command/validate';\nimport { error } from '../utils/error';\n\nconst { version, name, description } = require('../../package.json');\n\nexport const program = new Command();\nprogram.name(name).version(version).description(description);\n\nprogram\n .command('init')\n .description('Initialise project configuration ')\n .option(\n '-d, --directory <directory>',\n 'Directory to initialise project',\n process.cwd()\n )\n .action(initCourse);\n\nprogram\n .command('new <projectName>')\n .description('Generate course project')\n .action(createCourse);\n\nprogram\n .command('pack')\n .description('Compress files')\n .option('-d, --directory <directory>', 'Directory to compress', process.cwd())\n .action(zipCourse);\n\nprogram\n .command('publish')\n .description('Publish file to service')\n .action(publishCourse);\n\nprogram\n .command('validate')\n .description('Validate course folder structure')\n .action(validate);\n\n// Commande pour générer un chapitre\nprogram\n .command('generate <courseName>')\n .alias('g')\n .description('Generating Course with blueprint.yml')\n .action(generateCourse);\n\nprogram.command('login').description('Login to procamp').action(login);\nprogram.on('command:*', ([command]) => {\n error(`Erreur : commande \"${command}\" inconnue`);\n program.help();\n process.exit(1);\n});\nprogram.parse(process.argv);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function generateCourse(): Promise<void>;
|
|
1
|
+
export declare function generateCourse(courseName: string): Promise<void>;
|
package/dist/command/generate.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,23 +31,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
32
|
});
|
|
10
33
|
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
11
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
38
|
exports.generateCourse = void 0;
|
|
13
|
-
const fs = require("fs-extra");
|
|
14
|
-
const inquirer_1 = require("inquirer");
|
|
15
|
-
const yaml = require("js-yaml");
|
|
16
|
-
const path = require("path");
|
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
41
|
+
const yaml = __importStar(require("js-yaml"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
17
43
|
const error_1 = require("../utils/error");
|
|
18
44
|
const getUserId_1 = require("../utils/getUserId");
|
|
45
|
+
const process = __importStar(require("process"));
|
|
19
46
|
const deleteFolder = (srcDir, arrayObject) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
-
if (fs.
|
|
21
|
-
const entries = fs.
|
|
47
|
+
if (yield fs.exists(srcDir)) {
|
|
48
|
+
const entries = yield fs.readdir(srcDir, { withFileTypes: true });
|
|
22
49
|
const directories = entries
|
|
23
50
|
.filter((dirent) => dirent.isDirectory())
|
|
24
51
|
.map((dirent) => dirent.name);
|
|
25
52
|
const names = arrayObject.map((obj) => obj.title);
|
|
26
53
|
let deleteFolder = [];
|
|
27
|
-
for (
|
|
54
|
+
for (const directory of directories) {
|
|
28
55
|
const dir = directory
|
|
29
56
|
.toString()
|
|
30
57
|
.slice(directory.toString().indexOf('-') + 1)
|
|
@@ -41,12 +68,12 @@ const deleteFolder = (srcDir, arrayObject) => __awaiter(void 0, void 0, void 0,
|
|
|
41
68
|
default: 'y'
|
|
42
69
|
});
|
|
43
70
|
if (confirm) {
|
|
44
|
-
|
|
45
|
-
fs.
|
|
71
|
+
for (const directory of deleteFolder) {
|
|
72
|
+
yield fs.rm(path.join(srcDir, directory), {
|
|
46
73
|
recursive: true,
|
|
47
74
|
force: true
|
|
48
75
|
});
|
|
49
|
-
}
|
|
76
|
+
}
|
|
50
77
|
console.log('Unlisted folders deleted');
|
|
51
78
|
}
|
|
52
79
|
else {
|
|
@@ -57,10 +84,10 @@ const deleteFolder = (srcDir, arrayObject) => __awaiter(void 0, void 0, void 0,
|
|
|
57
84
|
}
|
|
58
85
|
});
|
|
59
86
|
const updateCourse = (srcDir, fileDir, object, i) => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
-
if (fs.
|
|
61
|
-
const entries = fs.
|
|
87
|
+
if (yield fs.exists(srcDir)) {
|
|
88
|
+
const entries = yield fs.readdir(srcDir, { withFileTypes: true });
|
|
62
89
|
if (entries.length === 0)
|
|
63
|
-
fs.
|
|
90
|
+
yield fs.ensureDir(fileDir);
|
|
64
91
|
else {
|
|
65
92
|
const directories = entries
|
|
66
93
|
.filter((dirent) => dirent.isDirectory())
|
|
@@ -79,51 +106,39 @@ const updateCourse = (srcDir, fileDir, object, i) => __awaiter(void 0, void 0, v
|
|
|
79
106
|
}
|
|
80
107
|
}
|
|
81
108
|
else {
|
|
82
|
-
fs.
|
|
109
|
+
yield fs.ensureDir(fileDir);
|
|
83
110
|
}
|
|
84
111
|
}
|
|
85
112
|
}
|
|
86
113
|
else
|
|
87
114
|
yield fs.mkdir(fileDir);
|
|
88
115
|
});
|
|
89
|
-
function generateCourse() {
|
|
116
|
+
function generateCourse(courseName) {
|
|
90
117
|
return __awaiter(this, void 0, void 0, function* () {
|
|
91
118
|
const configFile = path.join(process.cwd(), 'blueprint.yaml');
|
|
92
|
-
if (fs.
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
name: 'name',
|
|
96
|
-
message: 'What is the name of the folder?',
|
|
97
|
-
default: 'course'
|
|
98
|
-
});
|
|
99
|
-
const baseDir = name;
|
|
100
|
-
const fileContents = fs.readFileSync(configFile, 'utf8');
|
|
119
|
+
if (yield fs.exists(configFile)) {
|
|
120
|
+
const baseDir = courseName === '.' ? process.cwd() : courseName;
|
|
121
|
+
const fileContents = yield fs.readFile(configFile, 'utf8');
|
|
101
122
|
const courses = yaml.load(fileContents);
|
|
102
123
|
const courseData = Object.assign({}, courses);
|
|
103
124
|
try {
|
|
104
125
|
let configContent = (0, getUserId_1.getUserId)();
|
|
105
|
-
fs.ensureDir(baseDir
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
catch (e) {
|
|
123
|
-
throw e;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}));
|
|
126
|
+
yield fs.ensureDir(baseDir);
|
|
127
|
+
if (yield fs.exists(baseDir)) {
|
|
128
|
+
const courseInfo = courseData.course;
|
|
129
|
+
const meta = {
|
|
130
|
+
title: baseDir,
|
|
131
|
+
author: courseInfo.author,
|
|
132
|
+
description: courseInfo.description,
|
|
133
|
+
version: courseInfo.version,
|
|
134
|
+
courseId: courseInfo.courseId,
|
|
135
|
+
userId: configContent ? configContent.userId : ''
|
|
136
|
+
};
|
|
137
|
+
yield fs.writeJson(`${baseDir}/meta.json`, meta, {
|
|
138
|
+
spaces: 2
|
|
139
|
+
});
|
|
140
|
+
yield fs.writeFile(`${baseDir}/README.md`, '');
|
|
141
|
+
}
|
|
127
142
|
if ('chapters' in courseData) {
|
|
128
143
|
const chapters = courseData.chapters;
|
|
129
144
|
yield deleteFolder(baseDir, chapters);
|
|
@@ -176,9 +191,9 @@ function generateCourse() {
|
|
|
176
191
|
const assessmentDir = `${lessonDir}/${(1)
|
|
177
192
|
.toString()
|
|
178
193
|
.padStart(2, '0')}-${lesson.title.replace(/[:\s]+/g, '-')}`;
|
|
179
|
-
fs.
|
|
194
|
+
yield fs.ensureDir(assessmentDir);
|
|
180
195
|
yield fs.writeFile(`${assessmentDir}/README.md`, '');
|
|
181
|
-
yield fs.ensureDir(`${assessmentDir}/app-a
|
|
196
|
+
yield fs.ensureDir(`${assessmentDir}/app-a`);
|
|
182
197
|
}
|
|
183
198
|
}
|
|
184
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/command/generate.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs-extra';\nimport inquirer from 'inquirer';\nimport * as yaml from 'js-yaml';\nimport * as path from 'path';\nimport { course, courseInfo } from '../interfaces/course';\nimport { error } from '../utils/error';\nimport { getUserId } from '../utils/getUserId';\n\nconst deleteFolder = async (srcDir, arrayObject) => {\n if (fs.existsSync(srcDir)) {\n const entries = fs.readdirSync(srcDir, { withFileTypes: true });\n const directories = entries\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n const names = arrayObject.map((obj) => obj.title);\n let deleteFolder: string[] = [];\n for (let directory of directories) {\n const dir = directory\n .toString()\n .slice(directory.toString().indexOf('-') + 1)\n .replaceAll('-', ' ');\n if (!names.includes(dir)) {\n deleteFolder.push(directory);\n }\n }\n if (deleteFolder.length !== 0) {\n const { confirm } = await inquirer.prompt({\n type: 'confirm',\n message: `We found folders not listed in the structure of your course: \\n ${deleteFolder} \\n Do you want to delete them ?`,\n name: 'confirm',\n default: 'y'\n });\n\n if (confirm) {\n deleteFolder.forEach((directory) => {\n fs.rmSync(path.join(srcDir, directory), {\n recursive: true,\n force: true\n });\n });\n console.log('Unlisted folders deleted');\n } else {\n console.log('Deletion aborted.');\n return;\n }\n }\n }\n};\n\nconst updateCourse = async (srcDir, fileDir, object, i) => {\n if (fs.existsSync(srcDir)) {\n const entries = fs.readdirSync(srcDir, { withFileTypes: true });\n if (entries.length === 0) fs.ensureDirSync(fileDir);\n else {\n const directories = entries\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n const file = directories.find((file) => {\n return (\n file\n .toString()\n .slice(file.toString().indexOf('-') + 1)\n .localeCompare(object.title.toString().replaceAll(' ', '-')) === 0\n );\n });\n\n if (file) {\n const filePath = path.join(srcDir, file);\n if (\n Number(file.toString().slice(0, file.toString().indexOf('-'))) !==\n i + 1\n ) {\n await fs.move(filePath, fileDir, { overwrite: true });\n }\n } else {\n fs.ensureDirSync(fileDir);\n }\n }\n } else await fs.mkdir(fileDir);\n};\n\nexport async function generateCourse() {\n const configFile = path.join(process.cwd(), 'blueprint.yaml');\n if (fs.existsSync(configFile)) {\n const { name } = await inquirer.prompt({\n type: 'input',\n name: 'name',\n message: 'What is the name of the folder?',\n default: 'course'\n });\n const baseDir = name;\n const fileContents = fs.readFileSync(configFile, 'utf8');\n const courses: any = yaml.load(fileContents);\n const courseData: course = { ...courses };\n\n try {\n let configContent = getUserId();\n\n fs.ensureDir(baseDir, async () => {\n if (fs.existsSync(baseDir)) {\n const courseInfo = courseData.course;\n const meta: courseInfo = {\n title: baseDir,\n author: courseInfo.author,\n description: courseInfo.description,\n version: courseInfo.version,\n courseId: courseInfo.courseId,\n userId: configContent['sub']\n };\n\n try {\n await fs.writeJson(`${baseDir}/meta.json`, meta, {\n spaces: 2\n });\n await fs.writeFile(`${baseDir}/README.md`, '');\n } catch (e) {\n throw e;\n }\n }\n });\n\n if ('chapters' in courseData) {\n const chapters = courseData.chapters;\n await deleteFolder(baseDir, chapters);\n for (let i = 0; i < chapters.length; i++) {\n const chapter = chapters[i];\n const chapterDir = `${baseDir}/${(i + 1)\n .toString()\n .padStart(2, '0')}-${chapter.title.replace(/[:\\s]+/g, '-')}`;\n await updateCourse(baseDir, chapterDir, chapter, i);\n\n // Create meta.json for chapter\n const chapterMeta = {\n title: chapter.title,\n order: i + 1\n };\n\n await fs.writeJson(`${chapterDir}/meta.json`, chapterMeta, {\n spaces: 2\n });\n\n if ('lessons' in chapter) {\n const lessons = chapter.lessons;\n await deleteFolder(chapterDir, lessons);\n for (let j = 0; j < lessons.length; j++) {\n const lesson = lessons[j];\n const lessonDir = `${chapterDir}/${(j + 1)\n .toString()\n .padStart(2, '0')}-${lesson.title.replace(/[:\\s]+/g, '-')}`;\n await updateCourse(chapterDir, lessonDir, lesson, j);\n\n // Create meta.json for lesson\n const lessonMeta = {\n title: lesson.title,\n objectives: lesson.objectives,\n order: j + 1\n };\n await fs.writeJson(`${lessonDir}/meta.json`, lessonMeta, {\n spaces: 2\n });\n\n if ('assessments' in lesson) {\n const assessments = lesson.assessments;\n await deleteFolder(lessonDir, assessments);\n for (let k = 0; k < assessments.length; k++) {\n const assessment = assessments[k];\n const assessmentDir = `${lessonDir}/${(k + 1)\n .toString()\n .padStart(2, '0')}-${assessment.title.replace(\n /[:\\s]+/g,\n '-'\n )}`;\n await updateCourse(lessonDir, assessmentDir, assessment, k);\n\n // Create meta.json for assessment\n // const assessmentMeta = {\n // title: assessment.title,\n // description: assessment.description,\n // language: assessment.language,\n // solution: assessment.solution,\n // order: k + 1,\n // };\n //await fsExtra.writeJson(`${assessmentDir}/meta.json`, assessmentMeta, {spaces: 2});\n await fs.writeFile(`${assessmentDir}/README.md`, '');\n\n // Create app-a and app-b folders inside assessment folder\n await fs.ensureDir(`${assessmentDir}/app-a`);\n\n if (assessment.solution === true)\n await fs.ensureDir(`${assessmentDir}/app-b`);\n }\n } else {\n const assessmentDir = `${lessonDir}/${(1)\n .toString()\n .padStart(2, '0')}-${lesson.title.replace(/[:\\s]+/g, '-')}`;\n fs.ensureDirSync(assessmentDir);\n // await fsExtra.writeJson(`${assessmentDir}/meta.json`, \"\");\n await fs.writeFile(`${assessmentDir}/README.md`, '');\n // Create app-a folders inside assessment folder\n await fs.ensureDir(`${assessmentDir}/app-a/src/lib`);\n }\n }\n } else return error(`I can't find lessons in the chapter ${i + 1}`);\n }\n } else return error(\"You haven't chapters in your blueprint.yaml\");\n\n console.log('Folder structure created');\n } catch (err) {\n error('Error creating folder structure: ' + err);\n }\n } else return error('We need the blueprint.yaml file to create a course');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/command/generate.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs-extra';\nimport inquirer from 'inquirer';\nimport * as yaml from 'js-yaml';\nimport * as path from 'path';\nimport { course, courseInfo } from '../interfaces/course';\nimport { error } from '../utils/error';\nimport { getUserId } from '../utils/getUserId';\nimport * as process from 'process';\n\nconst deleteFolder = async (srcDir: string, arrayObject) => {\n if (await fs.exists(srcDir)) {\n const entries = await fs.readdir(srcDir, { withFileTypes: true });\n const directories = entries\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n const names = arrayObject.map((obj) => obj.title);\n let deleteFolder: string[] = [];\n for (const directory of directories) {\n const dir = directory\n .toString()\n .slice(directory.toString().indexOf('-') + 1)\n .replaceAll('-', ' ');\n if (!names.includes(dir)) {\n deleteFolder.push(directory);\n }\n }\n if (deleteFolder.length !== 0) {\n const { confirm } = await inquirer.prompt({\n type: 'confirm',\n message: `We found folders not listed in the structure of your course: \\n ${deleteFolder} \\n Do you want to delete them ?`,\n name: 'confirm',\n default: 'y'\n });\n\n if (confirm) {\n for (const directory of deleteFolder) {\n await fs.rm(path.join(srcDir, directory), {\n recursive: true,\n force: true\n });\n }\n console.log('Unlisted folders deleted');\n } else {\n console.log('Deletion aborted.');\n return;\n }\n }\n }\n};\n\nconst updateCourse = async (\n srcDir: string,\n fileDir: string,\n object,\n i: number\n) => {\n if (await fs.exists(srcDir)) {\n const entries = await fs.readdir(srcDir, { withFileTypes: true });\n if (entries.length === 0) await fs.ensureDir(fileDir);\n else {\n const directories = entries\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n const file = directories.find((file) => {\n return (\n file\n .toString()\n .slice(file.toString().indexOf('-') + 1)\n .localeCompare(object.title.toString().replaceAll(' ', '-')) === 0\n );\n });\n\n if (file) {\n const filePath = path.join(srcDir, file);\n if (\n Number(file.toString().slice(0, file.toString().indexOf('-'))) !==\n i + 1\n ) {\n await fs.move(filePath, fileDir, { overwrite: true });\n }\n } else {\n await fs.ensureDir(fileDir);\n }\n }\n } else await fs.mkdir(fileDir);\n};\n\nexport async function generateCourse(courseName: string) {\n const configFile = path.join(process.cwd(), 'blueprint.yaml');\n if (await fs.exists(configFile)) {\n const baseDir = courseName === '.' ? process.cwd() : courseName;\n const fileContents = await fs.readFile(configFile, 'utf8');\n const courses: any = yaml.load(fileContents);\n const courseData: course = { ...courses };\n\n try {\n let configContent = getUserId();\n\n await fs.ensureDir(baseDir);\n\n if (await fs.exists(baseDir)) {\n const courseInfo = courseData.course;\n const meta: courseInfo = {\n title: baseDir,\n author: courseInfo.author,\n description: courseInfo.description,\n version: courseInfo.version,\n courseId: courseInfo.courseId,\n userId: configContent ? configContent.userId : ''\n };\n\n await fs.writeJson(`${baseDir}/meta.json`, meta, {\n spaces: 2\n });\n await fs.writeFile(`${baseDir}/README.md`, '');\n }\n\n if ('chapters' in courseData) {\n const chapters = courseData.chapters;\n await deleteFolder(baseDir, chapters);\n for (let i = 0; i < chapters.length; i++) {\n const chapter = chapters[i];\n const chapterDir = `${baseDir}/${(i + 1)\n .toString()\n .padStart(2, '0')}-${chapter.title.replace(/[:\\s]+/g, '-')}`;\n await updateCourse(baseDir, chapterDir, chapter, i);\n\n // Create meta.json for chapter\n const chapterMeta = {\n title: chapter.title,\n order: i + 1\n };\n\n await fs.writeJson(`${chapterDir}/meta.json`, chapterMeta, {\n spaces: 2\n });\n\n if ('lessons' in chapter) {\n const lessons = chapter.lessons;\n await deleteFolder(chapterDir, lessons);\n for (let j = 0; j < lessons.length; j++) {\n const lesson = lessons[j];\n const lessonDir = `${chapterDir}/${(j + 1)\n .toString()\n .padStart(2, '0')}-${lesson.title.replace(/[:\\s]+/g, '-')}`;\n await updateCourse(chapterDir, lessonDir, lesson, j);\n\n // Create meta.json for lesson\n const lessonMeta = {\n title: lesson.title,\n objectives: lesson.objectives,\n order: j + 1\n };\n await fs.writeJson(`${lessonDir}/meta.json`, lessonMeta, {\n spaces: 2\n });\n\n if ('assessments' in lesson) {\n const assessments = lesson.assessments;\n await deleteFolder(lessonDir, assessments);\n for (let k = 0; k < assessments.length; k++) {\n const assessment = assessments[k];\n const assessmentDir = `${lessonDir}/${(k + 1)\n .toString()\n .padStart(2, '0')}-${assessment.title.replace(\n /[:\\s]+/g,\n '-'\n )}`;\n await updateCourse(lessonDir, assessmentDir, assessment, k);\n\n await fs.writeFile(`${assessmentDir}/README.md`, '');\n\n // Create app-a and app-b folders inside assessment folder\n await fs.ensureDir(`${assessmentDir}/app-a`);\n\n if (assessment.solution === true)\n await fs.ensureDir(`${assessmentDir}/app-b`);\n }\n } else {\n const assessmentDir = `${lessonDir}/${(1)\n .toString()\n .padStart(2, '0')}-${lesson.title.replace(/[:\\s]+/g, '-')}`;\n await fs.ensureDir(assessmentDir);\n await fs.writeFile(`${assessmentDir}/README.md`, '');\n // Create app-a folders inside assessment folder\n await fs.ensureDir(`${assessmentDir}/app-a`);\n }\n }\n } else return error(`I can't find lessons in the chapter ${i + 1}`);\n }\n } else return error(\"You haven't chapters in your blueprint.yaml\");\n\n console.log('Folder structure created');\n } catch (err) {\n error('Error creating folder structure: ' + err);\n }\n } else return error('We need the blueprint.yaml file to create a course');\n}\n"]}
|
package/dist/command/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function initCourse(opt: any): void
|
|
1
|
+
export declare function initCourse(opt: any): Promise<void>;
|
package/dist/command/init.js
CHANGED
|
@@ -1,41 +1,83 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
2
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
38
|
exports.initCourse = void 0;
|
|
4
|
-
const fs = require("fs-extra");
|
|
5
|
-
const inquirer_1 = require("inquirer");
|
|
6
|
-
const path = require("path");
|
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
7
42
|
const error_1 = require("../utils/error");
|
|
8
43
|
const getUserId_1 = require("../utils/getUserId");
|
|
9
44
|
function initCourse(opt) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const directory = opt.directory;
|
|
47
|
+
const questions = [
|
|
48
|
+
{
|
|
49
|
+
type: 'input',
|
|
50
|
+
name: 'title',
|
|
51
|
+
message: 'What is the title of the Folder?',
|
|
52
|
+
default: path.basename(directory)
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'input',
|
|
56
|
+
name: 'author',
|
|
57
|
+
message: 'Author ?',
|
|
58
|
+
default: ''
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
type: 'input',
|
|
62
|
+
name: 'description',
|
|
63
|
+
message: 'What is the course description ?',
|
|
64
|
+
default: ''
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'input',
|
|
68
|
+
name: 'version',
|
|
69
|
+
message: 'What is the course version ?',
|
|
70
|
+
default: '1.0'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: 'input',
|
|
74
|
+
name: 'courseId',
|
|
75
|
+
message: 'What is the course id ?',
|
|
76
|
+
default: ''
|
|
77
|
+
}
|
|
78
|
+
];
|
|
79
|
+
let configContent = (0, getUserId_1.getUserId)();
|
|
80
|
+
const answers = yield inquirer_1.default.prompt(questions);
|
|
39
81
|
if (!answers.courseId || answers.courseId.length === 0)
|
|
40
82
|
return (0, error_1.error)('Course id must be not null');
|
|
41
83
|
const meta = {
|
|
@@ -43,15 +85,19 @@ function initCourse(opt) {
|
|
|
43
85
|
author: answers.author,
|
|
44
86
|
description: answers.description,
|
|
45
87
|
courseId: answers.courseId,
|
|
46
|
-
|
|
88
|
+
version: answers.version,
|
|
89
|
+
userId: configContent ? configContent.userId : ''
|
|
47
90
|
};
|
|
48
91
|
const filename = 'meta.json';
|
|
49
92
|
const filepath = path.join(directory, filename);
|
|
50
|
-
|
|
93
|
+
try {
|
|
94
|
+
yield fs.writeFile(filepath, JSON.stringify(meta));
|
|
95
|
+
console.log(`Le fichier ${filename} a été créé avec succès dans le répertoire ${directory} !`);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
51
98
|
if (err)
|
|
52
99
|
throw err;
|
|
53
|
-
|
|
54
|
-
});
|
|
100
|
+
}
|
|
55
101
|
});
|
|
56
102
|
}
|
|
57
103
|
exports.initCourse = initCourse;
|
package/dist/command/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/command/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/command/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,wDAAgC;AAChC,2CAA6B;AAC7B,0CAAuC;AACvC,kDAA+C;AAG/C,SAAsB,UAAU,CAAC,GAAG;;QAClC,MAAM,SAAS,GAAW,GAAG,CAAC,SAAS,CAAC;QACxC,MAAM,SAAS,GAAG;YAChB;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,kCAAkC;gBAC3C,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;aAClC;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE,EAAE;aACZ;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,kCAAkC;gBAC3C,OAAO,EAAE,EAAE;aACZ;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,8BAA8B;gBACvC,OAAO,EAAE,KAAK;aACf;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,EAAE;aACZ;SACF,CAAC;QACF,IAAI,aAAa,GAAG,IAAA,qBAAS,GAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACpD,OAAO,IAAA,aAAK,EAAC,4BAA4B,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAe;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SAClD,CAAC;QACF,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEhD,IAAI;YACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CACT,cAAc,QAAQ,8CAA8C,SAAS,IAAI,CAClF,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC;SACpB;IACH,CAAC;CAAA;AA3DD,gCA2DC","sourcesContent":["import * as fs from 'fs-extra';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport { error } from '../utils/error';\nimport { getUserId } from '../utils/getUserId';\nimport { courseInfo } from '../interfaces/course';\n\nexport async function initCourse(opt) {\n const directory: string = opt.directory;\n const questions = [\n {\n type: 'input',\n name: 'title',\n message: 'What is the title of the Folder?',\n default: path.basename(directory)\n },\n {\n type: 'input',\n name: 'author',\n message: 'Author ?',\n default: ''\n },\n {\n type: 'input',\n name: 'description',\n message: 'What is the course description ?',\n default: ''\n },\n {\n type: 'input',\n name: 'version',\n message: 'What is the course version ?',\n default: '1.0'\n },\n {\n type: 'input',\n name: 'courseId',\n message: 'What is the course id ?',\n default: ''\n }\n ];\n let configContent = getUserId();\n const answers = await inquirer.prompt(questions);\n\n if (!answers.courseId || answers.courseId.length === 0)\n return error('Course id must be not null');\n\n const meta: courseInfo = {\n title: answers.title,\n author: answers.author,\n description: answers.description,\n courseId: answers.courseId,\n version: answers.version,\n userId: configContent ? configContent.userId : ''\n };\n const filename = 'meta.json';\n const filepath = path.join(directory, filename);\n\n try {\n await fs.writeFile(filepath, JSON.stringify(meta));\n console.log(\n `Le fichier ${filename} a été créé avec succès dans le répertoire ${directory} !`\n );\n } catch (err) {\n if (err) throw err;\n }\n}\n"]}
|
package/dist/command/login.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,14 +31,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
32
|
});
|
|
10
33
|
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
11
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
38
|
exports.login = void 0;
|
|
13
|
-
const axios_1 = require("axios");
|
|
14
|
-
const fs = require("fs-extra");
|
|
15
|
-
const inquirer_1 = require("inquirer");
|
|
16
|
-
const jwt_decode_1 = require("jwt-decode");
|
|
17
|
-
const os = require("
|
|
18
|
-
const path = require("path");
|
|
39
|
+
const axios_1 = __importDefault(require("axios"));
|
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
|
41
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
|
+
const jwt_decode_1 = __importDefault(require("jwt-decode"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
19
45
|
const error_1 = require("../utils/error");
|
|
20
46
|
function login() {
|
|
21
47
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -47,14 +73,15 @@ function login() {
|
|
|
47
73
|
}
|
|
48
74
|
];
|
|
49
75
|
const configPath = path.join(os.homedir(), '.procamp-config.json');
|
|
76
|
+
const clientDataStatic = {
|
|
77
|
+
grant_type: 'password',
|
|
78
|
+
client_id: 'procamp-cli',
|
|
79
|
+
client_secret: 'XGNKcjhw2uYICROaNcfRzMlC5QDXoHWY'
|
|
80
|
+
};
|
|
50
81
|
let configContent;
|
|
51
|
-
if (!fs.
|
|
82
|
+
if (!(yield fs.exists(configPath))) {
|
|
52
83
|
try {
|
|
53
|
-
fs.
|
|
54
|
-
grant_type: 'password',
|
|
55
|
-
client_id: 'procamp-cli',
|
|
56
|
-
client_secret: 'ntVrw42swn4eD5nrIePMPg3R8kQFND6x'
|
|
57
|
-
}, { spaces: 2 });
|
|
84
|
+
yield fs.writeJSON(configPath, clientDataStatic, { spaces: 2 });
|
|
58
85
|
}
|
|
59
86
|
catch (e) {
|
|
60
87
|
throw e;
|
|
@@ -62,6 +89,14 @@ function login() {
|
|
|
62
89
|
}
|
|
63
90
|
try {
|
|
64
91
|
configContent = yield fs.readJSON(configPath);
|
|
92
|
+
const configContentClient = {
|
|
93
|
+
grant_type: configContent['grant_type'],
|
|
94
|
+
client_id: configContent['client_id'],
|
|
95
|
+
client_secret: configContent['client_secret']
|
|
96
|
+
};
|
|
97
|
+
if (configContentClient !== clientDataStatic) {
|
|
98
|
+
configContent = Object.assign(Object.assign({}, configContent), clientDataStatic);
|
|
99
|
+
}
|
|
65
100
|
}
|
|
66
101
|
catch (e) {
|
|
67
102
|
throw e;
|
|
@@ -90,24 +125,21 @@ function login() {
|
|
|
90
125
|
.post('https://auth.procamp.dev/realms/procamp/protocol/openid-connect/token', bodyContent, {
|
|
91
126
|
headers: headersList
|
|
92
127
|
})
|
|
93
|
-
.then((res) => {
|
|
128
|
+
.then((res) => __awaiter(this, void 0, void 0, function* () {
|
|
94
129
|
let decoded;
|
|
95
130
|
if ('access_token' in res.data)
|
|
96
131
|
decoded = (0, jwt_decode_1.default)(res.data.access_token);
|
|
97
|
-
fs.writeJSON(configPath, Object.assign(Object.assign({}, clientData), decoded), { spaces: 2 }
|
|
98
|
-
if (err) {
|
|
99
|
-
console.error('Error writing config file:', err);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
132
|
+
yield fs.writeJSON(configPath, Object.assign(Object.assign({}, clientData), { api_key: decoded['api-key'], userId: decoded['sub'] }), { spaces: 2 });
|
|
102
133
|
console.log('You are \x1b[32m%s\x1b[0m', 'connected');
|
|
103
|
-
|
|
104
|
-
})
|
|
134
|
+
}))
|
|
105
135
|
.catch((e) => {
|
|
106
136
|
if ('response' in e)
|
|
107
137
|
if ('data' in e.response)
|
|
108
|
-
if ('error_description' in e.response.data)
|
|
138
|
+
if ('error_description' in e.response.data) {
|
|
109
139
|
(0, error_1.error)(`${e.response.data.error_description}`);
|
|
110
|
-
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
throw e;
|
|
111
143
|
});
|
|
112
144
|
});
|
|
113
145
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/command/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/command/login.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from 'axios';\nimport * as fs from 'fs-extra';\nimport inquirer from 'inquirer';\nimport jwt_decode from 'jwt-decode';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { error } from '../utils/error';\nimport { procampConfig } from '../interfaces/procamp_config';\n\nexport async function login() {\n const questions = [\n {\n type: 'input',\n name: 'email',\n message: 'Email:',\n validate: function (input) {\n // Basic email format validation using a regular expression\n const emailRegex = /^\\S+@\\S+\\.\\S+$/;\n if (input.toString().length === 0) return 'Email not be null';\n\n if (emailRegex.test(input)) {\n return true;\n }\n\n return 'Please enter a valid email address.';\n }\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n validate: (password) => {\n if (!password || password.length === 0)\n return error('Password must be not null');\n return true;\n }\n }\n ];\n\n const configPath = path.join(os.homedir(), '.procamp-config.json');\n const clientDataStatic = {\n grant_type: 'password',\n client_id: 'procamp-cli',\n client_secret: 'XGNKcjhw2uYICROaNcfRzMlC5QDXoHWY'\n };\n let configContent: procampConfig;\n if (!(await fs.exists(configPath))) {\n try {\n await fs.writeJSON(configPath, clientDataStatic, { spaces: 2 });\n } catch (e) {\n throw e;\n }\n }\n try {\n configContent = await fs.readJSON(configPath);\n const configContentClient = {\n grant_type: configContent['grant_type'],\n client_id: configContent['client_id'],\n client_secret: configContent['client_secret']\n };\n\n if (configContentClient !== clientDataStatic) {\n configContent = {\n ...configContent,\n ...clientDataStatic\n };\n }\n } catch (e) {\n throw e;\n }\n inquirer.prompt(questions).then((answers) => {\n const clientData = {\n grant_type: configContent.grant_type,\n client_id: configContent.client_id,\n client_secret: configContent.client_secret\n };\n const data = {\n username: answers.email,\n password: answers.password,\n ...clientData\n };\n let bodyContent = '';\n const entries = Object.entries(data);\n for (let i = 0; i < entries.length; i++) {\n const [name, value] = entries[i];\n bodyContent += `${name}=${value}`;\n if (i !== entries.length - 1) {\n bodyContent += '&';\n }\n }\n let headersList = {\n Accept: '*/*',\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n axios\n .post(\n 'https://auth.procamp.dev/realms/procamp/protocol/openid-connect/token',\n bodyContent,\n {\n headers: headersList\n }\n )\n .then(async (res) => {\n let decoded: object;\n\n if ('access_token' in res.data)\n decoded = jwt_decode(res.data.access_token);\n\n await fs.writeJSON(\n configPath,\n {\n ...clientData,\n api_key: decoded['api-key'],\n userId: decoded['sub']\n },\n { spaces: 2 }\n );\n console.log('You are \\x1b[32m%s\\x1b[0m', 'connected');\n })\n .catch((e) => {\n if ('response' in e)\n if ('data' in e.response)\n if ('error_description' in e.response.data) {\n error(`${e.response.data.error_description}`);\n return;\n }\n throw e;\n });\n });\n}\n"]}
|
package/dist/command/new.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function createCourse(projectName:
|
|
1
|
+
export declare function createCourse(projectName: string): Promise<void>;
|
package/dist/command/new.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,11 +31,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
32
|
});
|
|
10
33
|
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
11
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
38
|
exports.createCourse = void 0;
|
|
13
|
-
const fs = require("fs-extra");
|
|
14
|
-
const inquirer_1 = require("inquirer");
|
|
15
|
-
const path = require("path");
|
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
16
42
|
const init_1 = require("./init");
|
|
17
43
|
function createCourse(projectName) {
|
|
18
44
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -26,11 +52,11 @@ function createCourse(projectName) {
|
|
|
26
52
|
console.log('Aborted.');
|
|
27
53
|
return;
|
|
28
54
|
}
|
|
29
|
-
fs.
|
|
55
|
+
yield fs.mkdir(projectName, { recursive: true });
|
|
30
56
|
console.log(`${projectName} course project generated!`);
|
|
31
57
|
const pathfolder = path.join(process.cwd(), projectName);
|
|
32
|
-
if (fs.
|
|
33
|
-
(0, init_1.initCourse)({
|
|
58
|
+
if (yield fs.exists(pathfolder)) {
|
|
59
|
+
yield (0, init_1.initCourse)({
|
|
34
60
|
directory: pathfolder
|
|
35
61
|
});
|
|
36
62
|
return;
|
package/dist/command/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/command/new.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/command/new.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,wDAAgC;AAChC,2CAA6B;AAC7B,iCAAoC;AAEpC,SAAsB,YAAY,CAAC,WAAmB;;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACxC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,yDAAyD,WAAW,IAAI;YACjF,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO;SACR;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,4BAA4B,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YAC/B,MAAM,IAAA,iBAAU,EAAC;gBACf,SAAS,EAAE,UAAU;aACtB,CAAC,CAAC;YACH,OAAO;SACR;IACH,CAAC;CAAA;AArBD,oCAqBC","sourcesContent":["import * as fs from 'fs-extra';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport { initCourse } from './init';\n\nexport async function createCourse(projectName: string) {\n const { confirm } = await inquirer.prompt({\n type: 'confirm',\n message: `Are you sure you want to generate a new project named ${projectName} ?`,\n name: 'confirm',\n default: 'y'\n });\n\n if (!confirm) {\n console.log('Aborted.');\n return;\n }\n await fs.mkdir(projectName, { recursive: true });\n console.log(`${projectName} course project generated!`);\n const pathfolder = path.join(process.cwd(), projectName);\n if (await fs.exists(pathfolder)) {\n await initCourse({\n directory: pathfolder\n });\n return;\n }\n}\n"]}
|
package/dist/command/pack.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function zipCourse(options: any): void
|
|
1
|
+
export declare function zipCourse(options: any): Promise<void>;
|
package/dist/command/pack.js
CHANGED
|
@@ -1,32 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
2
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
38
|
exports.zipCourse = void 0;
|
|
4
|
-
const
|
|
5
|
-
const fs = require("fs-extra");
|
|
6
|
-
const path = require("path");
|
|
39
|
+
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
7
42
|
const error_1 = require("../utils/error");
|
|
8
43
|
function zipCourse(options) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
console.log(`Compressing ${options.directory}...`);
|
|
46
|
+
const output = '.output.zip';
|
|
47
|
+
const zip = new adm_zip_1.default();
|
|
48
|
+
const sourceDirectory = path.resolve(options.directory);
|
|
49
|
+
if (yield fs.exists(sourceDirectory)) {
|
|
50
|
+
const filesToIgnore = ['_MACOSX', 'node_modules'];
|
|
51
|
+
zip.addLocalFolder(sourceDirectory, '', function (filename) {
|
|
52
|
+
for (const files of filesToIgnore) {
|
|
53
|
+
if (filename.startsWith(files)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
19
56
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
57
|
+
return !filename.startsWith('.');
|
|
58
|
+
});
|
|
59
|
+
const outputFilePath = path.join(sourceDirectory, output);
|
|
60
|
+
zip.writeZip(outputFilePath);
|
|
61
|
+
console.log(`${sourceDirectory} compressed to ${output} in directory ${sourceDirectory}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
(0, error_1.error)(`${options.directory} does not exist`);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
30
67
|
}
|
|
31
68
|
exports.zipCourse = zipCourse;
|
|
32
69
|
//# sourceMappingURL=pack.js.map
|
package/dist/command/pack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/command/pack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/command/pack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAA6B;AAC7B,6CAA+B;AAC/B,2CAA6B;AAC7B,0CAAuC;AAEvC,SAAsB,SAAS,CAAC,OAAO;;QACrC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,aAAa,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,iBAAM,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE;YACpC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAClD,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,EAAE,UAAU,QAAQ;gBACxD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;oBACjC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;wBAC9B,OAAO,KAAK,CAAC;qBACd;iBACF;gBACD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC1D,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CACT,GAAG,eAAe,kBAAkB,MAAM,iBAAiB,eAAe,EAAE,CAC7E,CAAC;SACH;aAAM;YACL,IAAA,aAAK,EAAC,GAAG,OAAO,CAAC,SAAS,iBAAiB,CAAC,CAAC;SAC9C;IACH,CAAC;CAAA;AAvBD,8BAuBC","sourcesContent":["import AdmZip from 'adm-zip';\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\nimport { error } from '../utils/error';\n\nexport async function zipCourse(options) {\n console.log(`Compressing ${options.directory}...`);\n const output = '.output.zip';\n const zip = new AdmZip();\n const sourceDirectory = path.resolve(options.directory);\n if (await fs.exists(sourceDirectory)) {\n const filesToIgnore = ['_MACOSX', 'node_modules'];\n zip.addLocalFolder(sourceDirectory, '', function (filename) {\n for (const files of filesToIgnore) {\n if (filename.startsWith(files)) {\n return false;\n }\n }\n return !filename.startsWith('.');\n });\n const outputFilePath = path.join(sourceDirectory, output);\n zip.writeZip(outputFilePath);\n console.log(\n `${sourceDirectory} compressed to ${output} in directory ${sourceDirectory}`\n );\n } else {\n error(`${options.directory} does not exist`);\n }\n}\n"]}
|
package/dist/command/publish.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,21 +31,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
31
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
32
|
});
|
|
10
33
|
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
11
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
38
|
exports.publishCourse = void 0;
|
|
13
39
|
const course_validator_1 = require("@procamp/course-validator");
|
|
14
|
-
const axios_1 = require("axios");
|
|
15
|
-
const
|
|
16
|
-
const fs = require("fs-extra");
|
|
17
|
-
const os = require("os");
|
|
18
|
-
const path = require("path");
|
|
40
|
+
const axios_1 = __importDefault(require("axios"));
|
|
41
|
+
const form_data_1 = __importDefault(require("form-data"));
|
|
42
|
+
const fs = __importStar(require("fs-extra"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
19
45
|
const error_1 = require("../utils/error");
|
|
20
46
|
const pack_1 = require("./pack");
|
|
21
47
|
function publishCourse() {
|
|
22
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
23
49
|
const directory = process.cwd();
|
|
24
50
|
const filenameConf = path.join(directory, 'meta.json');
|
|
25
|
-
if (fs.
|
|
51
|
+
if (yield fs.exists(filenameConf)) {
|
|
26
52
|
const data = yield fs.readFile(filenameConf, { encoding: 'utf-8' });
|
|
27
53
|
const meta = JSON.parse(data);
|
|
28
54
|
if (meta.courseId && meta.courseId.length !== 0) {
|
|
@@ -30,30 +56,30 @@ function publishCourse() {
|
|
|
30
56
|
const filePathZip = path.join(directory, '.output.zip');
|
|
31
57
|
const configPath = path.join(os.homedir(), '.procamp-config.json');
|
|
32
58
|
let configContent;
|
|
33
|
-
if (fs.
|
|
59
|
+
if (yield fs.exists(configPath)) {
|
|
34
60
|
try {
|
|
35
61
|
configContent = yield fs.readJSON(configPath);
|
|
36
62
|
}
|
|
37
63
|
catch (e) {
|
|
38
64
|
throw e;
|
|
39
65
|
}
|
|
40
|
-
if (!('
|
|
41
|
-
if (
|
|
42
|
-
yield fs.writeJson(filenameConf, Object.assign(Object.assign({}, meta), { userId: configContent['
|
|
66
|
+
if (!('userId' in meta) || meta.userId.length !== 0) {
|
|
67
|
+
if (configContent.userId)
|
|
68
|
+
yield fs.writeJson(filenameConf, Object.assign(Object.assign({}, meta), { userId: configContent['userId'] }), { spaces: 2 });
|
|
43
69
|
}
|
|
44
70
|
}
|
|
45
71
|
else
|
|
46
72
|
return (0, error_1.error)("I don't find config file.Please log in ");
|
|
47
73
|
yield (0, course_validator_1.validateCourse)(directory);
|
|
48
|
-
const postZipfile = () => {
|
|
49
|
-
if (fs.
|
|
74
|
+
const postZipfile = () => __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
if (yield fs.exists(filePathZip)) {
|
|
50
76
|
const fileStream = fs.createReadStream(filePathZip);
|
|
51
|
-
const form = new
|
|
77
|
+
const form = new form_data_1.default();
|
|
52
78
|
form.append('file', fileStream);
|
|
53
79
|
axios_1.default
|
|
54
80
|
.post(`https://course-manager.procamp.dev/api/courses/${courseId}`, form, {
|
|
55
81
|
headers: {
|
|
56
|
-
'x-api-key': configContent['
|
|
82
|
+
'x-api-key': configContent['api_key']
|
|
57
83
|
}
|
|
58
84
|
})
|
|
59
85
|
.then((response) => {
|
|
@@ -71,15 +97,15 @@ function publishCourse() {
|
|
|
71
97
|
}
|
|
72
98
|
});
|
|
73
99
|
}
|
|
74
|
-
};
|
|
75
|
-
if (!fs.
|
|
76
|
-
(0, pack_1.zipCourse)({
|
|
100
|
+
});
|
|
101
|
+
if (!(yield fs.exists(filePathZip))) {
|
|
102
|
+
yield (0, pack_1.zipCourse)({
|
|
77
103
|
directory: directory
|
|
78
104
|
});
|
|
79
|
-
postZipfile();
|
|
105
|
+
yield postZipfile();
|
|
80
106
|
return;
|
|
81
107
|
}
|
|
82
|
-
return postZipfile();
|
|
108
|
+
return yield postZipfile();
|
|
83
109
|
}
|
|
84
110
|
else {
|
|
85
111
|
return (0, error_1.error)("Course Id key don't exist or null in meta.json.\n" +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/command/publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/command/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import { validateCourse } from '@procamp/course-validator';\nimport axios from 'axios';\nimport FormData from 'form-data';\nimport * as fs from 'fs-extra';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { error } from '../utils/error';\nimport { zipCourse } from './pack';\nimport { procampConfig } from '../interfaces/procamp_config';\nimport { courseInfo } from '../interfaces/course';\n\nexport async function publishCourse() {\n const directory = process.cwd();\n const filenameConf = path.join(directory, 'meta.json');\n\n if (await fs.exists(filenameConf)) {\n const data = await fs.readFile(filenameConf, { encoding: 'utf-8' });\n const meta: courseInfo = JSON.parse(data);\n if (meta.courseId && meta.courseId.length !== 0) {\n const courseId: string = meta.courseId;\n const filePathZip = path.join(directory, '.output.zip');\n const configPath = path.join(os.homedir(), '.procamp-config.json');\n let configContent: procampConfig;\n if (await fs.exists(configPath)) {\n try {\n configContent = await fs.readJSON(configPath);\n } catch (e) {\n throw e;\n }\n if (!('userId' in meta) || meta.userId.length !== 0) {\n if (configContent.userId)\n await fs.writeJson(\n filenameConf,\n { ...meta, userId: configContent['userId'] },\n { spaces: 2 }\n );\n }\n } else return error(\"I don't find config file.Please log in \");\n\n await validateCourse(directory);\n const postZipfile = async () => {\n if (await fs.exists(filePathZip)) {\n const fileStream = fs.createReadStream(filePathZip);\n const form = new FormData();\n form.append('file', fileStream);\n axios\n .post(\n `https://course-manager.procamp.dev/api/courses/${courseId}`,\n form,\n {\n headers: {\n 'x-api-key': configContent['api_key']\n }\n }\n )\n .then((response) => {\n console.log(response.data);\n })\n .catch((err) => {\n if ('response' in err)\n if ('data' in err.response) {\n const data = err.response.data;\n if ('statusCode' in data && 'message' in data)\n error(\n 'Error publishing folder: ' +\n data.message +\n '. Error ' +\n data.statusCode\n );\n }\n });\n }\n };\n\n if (!(await fs.exists(filePathZip))) {\n await zipCourse({\n directory: directory\n });\n await postZipfile();\n return;\n }\n\n return await postZipfile();\n } else {\n return error(\n \"Course Id key don't exist or null in meta.json.\\n\" +\n 'Please complete course id'\n );\n }\n } else {\n return error('meta.json file does not exist');\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function validate(): void
|
|
1
|
+
export declare function validate(): Promise<void>;
|
package/dist/command/validate.js
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.validate = void 0;
|
|
4
13
|
const course_validator_1 = require("@procamp/course-validator");
|
|
5
14
|
function validate() {
|
|
6
|
-
(0,
|
|
15
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
yield (0, course_validator_1.validateCourse)(process.cwd());
|
|
17
|
+
});
|
|
7
18
|
}
|
|
8
19
|
exports.validate = validate;
|
|
9
20
|
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/command/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/command/validate.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gEAA2D;AAE3D,SAAsB,QAAQ;;QAC5B,MAAM,IAAA,iCAAc,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC;CAAA;AAFD,4BAEC","sourcesContent":["import { validateCourse } from '@procamp/course-validator';\n\nexport async function validate() {\n await validateCourse(process.cwd());\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procamp_config.js","sourceRoot":"","sources":["../../src/interfaces/procamp_config.ts"],"names":[],"mappings":"","sourcesContent":["export interface procampConfig {\n grant_type: string;\n client_id: string;\n client_secret: string;\n api_key: string;\n userId: string;\n}\n"]}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { procampConfig } from '../interfaces/procamp_config';
|
|
2
|
+
export declare function getUserId(): procampConfig;
|
package/dist/utils/getUserId.js
CHANGED
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.getUserId = void 0;
|
|
4
|
-
const fs = require("fs-extra");
|
|
5
|
-
const os = require("os");
|
|
6
|
-
const path = require("path");
|
|
27
|
+
const fs = __importStar(require("fs-extra"));
|
|
28
|
+
const os = __importStar(require("os"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
7
30
|
function getUserId() {
|
|
8
31
|
const configPath = path.join(os.homedir(), '.procamp-config.json');
|
|
9
32
|
if (fs.existsSync(configPath)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserId.js","sourceRoot":"","sources":["../../src/utils/getUserId.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getUserId.js","sourceRoot":"","sources":["../../src/utils/getUserId.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,uCAAyB;AACzB,2CAA6B;AAG7B,SAAgB,SAAS;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACnE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;KACpC;IACD,OAAO;AACT,CAAC;AAND,8BAMC","sourcesContent":["import * as fs from 'fs-extra';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { procampConfig } from '../interfaces/procamp_config';\n\nexport function getUserId(): procampConfig {\n const configPath = path.join(os.homedir(), '.procamp-config.json');\n if (fs.existsSync(configPath)) {\n return fs.readJSONSync(configPath);\n }\n return;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@procamp/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Procamp CLI",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
},
|
|
23
23
|
"keywords": [
|
|
24
24
|
"typescript",
|
|
25
|
-
"tsc"
|
|
25
|
+
"tsc",
|
|
26
|
+
"camp"
|
|
26
27
|
],
|
|
27
28
|
"author": "Afrointelligence",
|
|
28
29
|
"license": "ISC",
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
"@types/adm-zip": "^0.5.0",
|
|
31
32
|
"@types/fs-extra": "^11.0.1",
|
|
32
33
|
"@types/inquirer": "^9.0.3",
|
|
34
|
+
"@types/jest": "^29.5.1",
|
|
33
35
|
"@types/js-yaml": "^4.0.5",
|
|
34
36
|
"@types/node": "^18.16.4",
|
|
35
37
|
"@types/rimraf": "^4.0.5",
|
|
@@ -41,18 +43,13 @@
|
|
|
41
43
|
},
|
|
42
44
|
"dependencies": {
|
|
43
45
|
"@procamp/course-validator": "^1.0.2",
|
|
44
|
-
"@types/jest": "^29.5.1",
|
|
45
46
|
"adm-zip": "^0.5.10",
|
|
46
47
|
"axios": "^1.4.0",
|
|
47
48
|
"commander": "^10.0.1",
|
|
48
|
-
"ejs": "^3.1.9",
|
|
49
49
|
"form-data": "^4.0.0",
|
|
50
50
|
"fs-extra": "^11.1.1",
|
|
51
|
-
"glob-promise": "^6.0.2",
|
|
52
|
-
"globby": "^11.1.0",
|
|
53
51
|
"inquirer": "^8.2.5",
|
|
54
52
|
"js-yaml": "^4.1.0",
|
|
55
|
-
"path": "^0.12.7",
|
|
56
53
|
"ts-jest": "^29.1.0"
|
|
57
54
|
}
|
|
58
55
|
}
|