@cyklang/cli 0.5.4 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,16 @@
1
1
  import { Cmd } from "./Cmd";
2
+ import { DBManager, DBRemote } from "@cyklang/core";
2
3
  export declare class InstallCommand extends Cmd {
3
- constructor(name: string);
4
- install(node_package: string, options: any): Promise<void>;
5
4
  /**
6
- * method installNodePackage
7
- * @param node_package
5
+ * constructor
6
+ * @param name
8
7
  */
9
- installNodePackage(node_package: string): Promise<void>;
8
+ constructor(name: string);
10
9
  /**
11
- * method lookupInstallScript
10
+ * method install
12
11
  * @param node_package
12
+ * @param options
13
13
  */
14
- lookupInstallScript(node_package: string): Promise<string | undefined>;
14
+ install(node_package: string, options: any): Promise<void>;
15
15
  }
16
+ export declare function installPackage(node_package: string, dbManager: DBManager, dbRemote: DBRemote): Promise<void>;
@@ -26,109 +26,183 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.InstallCommand = void 0;
29
+ exports.installPackage = exports.InstallCommand = void 0;
30
30
  const Cmd_1 = require("./Cmd");
31
31
  const fs = __importStar(require("fs"));
32
32
  const path = __importStar(require("path"));
33
33
  const kolorist_1 = require("kolorist");
34
34
  const loglevel_1 = __importDefault(require("loglevel"));
35
35
  const ModuleCommand_1 = require("./ModuleCommand");
36
+ const UninstallCommand_1 = require("./UninstallCommand");
37
+ const AssetCommand_1 = require("./AssetCommand");
36
38
  const logger = loglevel_1.default.getLogger('InstallCommand.ts');
37
39
  logger.setLevel('debug');
38
40
  class InstallCommand extends Cmd_1.Cmd {
41
+ /**
42
+ * constructor
43
+ * @param name
44
+ */
39
45
  constructor(name) {
40
46
  super(name);
41
- this.description('npm install and upload xml modules to Cyk server')
47
+ this.description('npm install and run install script')
42
48
  .argument('<node_package>', 'Node Package installed as dev dependency')
43
49
  .action(async (node_package, options) => {
44
50
  await this.install(node_package, options);
45
51
  });
46
52
  }
53
+ /**
54
+ * method install
55
+ * @param node_package
56
+ * @param options
57
+ */
47
58
  async install(node_package, options) {
48
59
  try {
49
60
  await this.prologue(options);
50
- if (this.dbManager === undefined)
51
- throw 'dbManager undefined';
52
- /**
53
- * install the Node Package
54
- */
55
- await this.installNodePackage(node_package);
56
- const installScript = await this.lookupInstallScript(node_package);
57
- if (installScript) {
58
- /**
59
- * execute installScript
60
- */
61
- const installPath = path.join('node_modules', node_package, 'scripts', installScript);
62
- await this.runShellCommand(installPath, []);
63
- }
64
- else {
65
- /**
66
- * default install : upload modules and execute _init.xml
67
- */
68
- console.log();
69
- console.log('upload modules to server ...');
70
- const xmlFolder = path.join('node_modules', node_package, 'xml');
71
- if (!fs.existsSync(xmlFolder) || !fs.statSync(xmlFolder).isDirectory()) {
72
- throw 'xml folder not found ( ' + xmlFolder + ' )';
73
- }
74
- /**
75
- * upload modules to the server
76
- */
77
- let initModule;
78
- const files = fs.readdirSync(xmlFolder);
79
- for (let ind = 0; ind < files.length; ind++) {
80
- const file = files[ind];
81
- await (0, ModuleCommand_1.uploadModule)(path.join(xmlFolder, file), this.dbManager);
82
- if (file.endsWith('_init.xml')) {
83
- initModule = file;
84
- }
85
- }
86
- console.log((0, kolorist_1.green)('*') + ' upload modules to server');
87
- if (initModule) {
88
- const initPath = path.join(xmlFolder, initModule);
89
- await this.runShellCommand('npx', ['cyk', 'run', initPath]);
90
- }
91
- }
61
+ if (this.dbManager === undefined || !this.dbRemote)
62
+ throw 'dbManager or dbRemote undefined';
63
+ await installPackage(node_package, this.dbManager, this.dbRemote);
92
64
  }
93
65
  catch (err) {
94
66
  logger.error(err);
95
67
  }
96
68
  }
69
+ }
70
+ exports.InstallCommand = InstallCommand;
71
+ async function installPackage(node_package, dbManager, dbRemote) {
97
72
  /**
98
- * method installNodePackage
99
- * @param node_package
73
+ * install the Node Package
100
74
  */
101
- async installNodePackage(node_package) {
102
- try {
103
- await this.runShellCommand('npm', ['install', '--save-dev', node_package]);
104
- }
105
- catch (error) {
106
- console.error('Error installing ' + node_package + ' :', error);
107
- throw error;
108
- }
75
+ await installNodePackage(node_package, dbManager, dbRemote);
76
+ const installScript = await lookupInstallScript(node_package);
77
+ if (installScript) {
78
+ /**
79
+ * execute installScript
80
+ */
81
+ const installPath = path.join('node_modules', node_package, 'scripts', installScript);
82
+ await (0, Cmd_1.runShellCommand)(installPath, []);
109
83
  }
84
+ else {
85
+ /**
86
+ * default install : upload modules and execute _init.xml
87
+ */
88
+ await defaultInstallScript(node_package, dbManager, dbRemote);
89
+ }
90
+ }
91
+ exports.installPackage = installPackage;
92
+ /**
93
+ * method defaultInstallScript
94
+ * @param node_package
95
+ */
96
+ async function defaultInstallScript(node_package, dbManager, dbRemote) {
97
+ console.log();
98
+ console.log('Default install script');
110
99
  /**
111
- * method lookupInstallScript
112
- * @param node_package
100
+ * upload package assets
113
101
  */
114
- async lookupInstallScript(node_package) {
115
- let result;
116
- try {
117
- const scriptsFolder = path.join('node_modules', node_package, 'scripts');
118
- if (fs.existsSync(scriptsFolder) && fs.statSync(scriptsFolder).isDirectory()) {
119
- const files = fs.readdirSync(scriptsFolder);
120
- for (let ind = 0; ind < files.length; ind++) {
121
- const file = files[ind];
122
- if (file.startsWith('install.')) {
123
- result = file;
124
- }
102
+ await uploadPackageAssets(node_package, dbManager, dbRemote);
103
+ /**
104
+ * upload package modules to the server
105
+ */
106
+ await uploadPackageModules(node_package, dbManager);
107
+ }
108
+ /**
109
+ * function uploadPackageAssets
110
+ * @param node_package
111
+ * @param dbManager
112
+ */
113
+ async function uploadPackageAssets(node_package, dbManager, dbRemote) {
114
+ const assetFolder = path.join('node_modules', node_package, 'asset');
115
+ if (!fs.existsSync(assetFolder) || !fs.statSync(assetFolder).isDirectory()) {
116
+ return;
117
+ }
118
+ console.log();
119
+ console.log('upload assets to server ...');
120
+ const items = fs.readdirSync(assetFolder);
121
+ for (let ind = 0; ind < items.length; ind++) {
122
+ const item = items[ind];
123
+ const itemPath = path.join(assetFolder, item);
124
+ if (fs.statSync(itemPath).isDirectory()) {
125
+ const dest = "/" + item + "/";
126
+ await (0, AssetCommand_1.uploadDirectory)(itemPath, dest, { yes: true }, dbManager, dbRemote);
127
+ }
128
+ else {
129
+ const dest = "/" + item;
130
+ const fd = { path: path.join(assetFolder, item), mtime: new Date() };
131
+ await (0, AssetCommand_1.uploadAsset)(fd, dest, dbManager, dbRemote);
132
+ }
133
+ }
134
+ console.log((0, kolorist_1.green)('*') + ' upload assets to server');
135
+ }
136
+ /**
137
+ * function uploadModules
138
+ * @param node_package
139
+ * @param dbManager
140
+ */
141
+ async function uploadPackageModules(node_package, dbManager) {
142
+ const moduleFolder = path.join('node_modules', node_package, 'module');
143
+ if (!fs.existsSync(moduleFolder) || !fs.statSync(moduleFolder).isDirectory()) {
144
+ return;
145
+ }
146
+ console.log();
147
+ console.log('upload modules to server ...');
148
+ let initModule;
149
+ const files = fs.readdirSync(moduleFolder);
150
+ for (let ind = 0; ind < files.length; ind++) {
151
+ const file = files[ind];
152
+ if (!dbManager)
153
+ throw 'dbManager undefined';
154
+ await (0, ModuleCommand_1.uploadModule)(path.join(moduleFolder, file), dbManager);
155
+ if (file.endsWith('_init.xml')) {
156
+ initModule = file;
157
+ }
158
+ }
159
+ console.log((0, kolorist_1.green)('*') + ' upload modules to server');
160
+ if (initModule) {
161
+ const initPath = path.join(moduleFolder, initModule);
162
+ await (0, Cmd_1.runShellCommand)('npx', ['cyk', 'run', initPath]);
163
+ }
164
+ }
165
+ /**
166
+ * method installNodePackage
167
+ * @param node_package
168
+ */
169
+ async function installNodePackage(node_package, dbManager, dbRemote) {
170
+ try {
171
+ const packageJson = await (0, Cmd_1.readPackageJson)();
172
+ if (packageJson.devDependencies && packageJson.devDependencies[node_package]
173
+ || packageJson.dependencies && packageJson.dependencies[node_package]) {
174
+ console.log(node_package + ' already installed. We uninstall it first');
175
+ if (!dbManager)
176
+ throw 'dbManager undefined';
177
+ await (0, UninstallCommand_1.uninstallPackage)(node_package, dbManager, dbRemote);
178
+ }
179
+ await (0, Cmd_1.runShellCommand)('npm', ['install', '--save-dev', node_package]);
180
+ }
181
+ catch (error) {
182
+ console.error('Error installing ' + node_package + ' :', error);
183
+ throw error;
184
+ }
185
+ }
186
+ /**
187
+ * function lookupInstallScript
188
+ * @param node_package
189
+ */
190
+ async function lookupInstallScript(node_package) {
191
+ let result;
192
+ try {
193
+ const scriptsFolder = path.join('node_modules', node_package, 'scripts');
194
+ if (fs.existsSync(scriptsFolder) && fs.statSync(scriptsFolder).isDirectory()) {
195
+ const files = fs.readdirSync(scriptsFolder);
196
+ for (let ind = 0; ind < files.length; ind++) {
197
+ const file = files[ind];
198
+ if (file.startsWith('install.')) {
199
+ result = file;
125
200
  }
126
201
  }
127
- return result;
128
- }
129
- catch (err) {
130
- throw err;
131
202
  }
203
+ return result;
204
+ }
205
+ catch (err) {
206
+ throw err;
132
207
  }
133
208
  }
134
- exports.InstallCommand = InstallCommand;
@@ -10,3 +10,9 @@ export declare class ModuleCommand extends Command {
10
10
  * @param dbManager
11
11
  */
12
12
  export declare function uploadModule(file: string, dbManager: DBManager): Promise<void>;
13
+ /**
14
+ * function deleteModule
15
+ * @param dbname
16
+ * @param dbManager
17
+ */
18
+ export declare function deleteModule(dbname: string, dbManager: DBManager): Promise<void>;
@@ -27,7 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.uploadModule = exports.ModuleCommand = void 0;
30
+ exports.deleteModule = exports.uploadModule = exports.ModuleCommand = void 0;
31
31
  const core_1 = require("@cyklang/core");
32
32
  const fs = __importStar(require("fs"));
33
33
  const loglevel_1 = __importDefault(require("loglevel"));
@@ -166,6 +166,7 @@ async function uploadModule(file, dbManager) {
166
166
  logger.info('module ' + dbname + ' added with ID ' + id);
167
167
  }
168
168
  else {
169
+ logger.debug('module exists : ' + dbModuleExist.dbname + ', id ' + dbModuleExist.id);
169
170
  // update
170
171
  dbModuleExist.source = source;
171
172
  dbModuleExist.access = tag.attributes.ACCESS;
@@ -280,3 +281,13 @@ class ModuleDelete extends Cmd_1.Cmd {
280
281
  }
281
282
  }
282
283
  }
284
+ /**
285
+ * function deleteModule
286
+ * @param dbname
287
+ * @param dbManager
288
+ */
289
+ async function deleteModule(dbname, dbManager) {
290
+ const dbClient = new DBClient_1.DBClient(dbManager);
291
+ await dbClient.deleteModule(dbname);
292
+ }
293
+ exports.deleteModule = deleteModule;
@@ -0,0 +1,20 @@
1
+ import { Cmd } from "./Cmd";
2
+ import { DBManager, DBRemote } from "@cyklang/core";
3
+ export declare class UninstallCommand extends Cmd {
4
+ /**
5
+ * constructor
6
+ * @param name
7
+ */
8
+ constructor(name: string);
9
+ /**
10
+ * method uninstall
11
+ * @param node_package
12
+ * @param options
13
+ */
14
+ uninstall(node_package: string, options: any): Promise<void>;
15
+ }
16
+ /**
17
+ * function uninstallPackage
18
+ * @param node_package
19
+ */
20
+ export declare function uninstallPackage(node_package: string, dbManager: DBManager, dbRemote: DBRemote): Promise<void>;
@@ -0,0 +1,211 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.uninstallPackage = exports.UninstallCommand = void 0;
30
+ const Cmd_1 = require("./Cmd");
31
+ const fs = __importStar(require("fs"));
32
+ const path = __importStar(require("path"));
33
+ const kolorist_1 = require("kolorist");
34
+ const loglevel_1 = __importDefault(require("loglevel"));
35
+ const ModuleCommand_1 = require("./ModuleCommand");
36
+ const logger = loglevel_1.default.getLogger('UninstallCommand.ts');
37
+ logger.setLevel('debug');
38
+ class UninstallCommand extends Cmd_1.Cmd {
39
+ /**
40
+ * constructor
41
+ * @param name
42
+ */
43
+ constructor(name) {
44
+ super(name);
45
+ this.description('run uninstall script and npm uninstall command')
46
+ .argument('<node_package>', 'Node Package installed as dev dependency')
47
+ .action(async (node_package, options) => {
48
+ await this.uninstall(node_package, options);
49
+ });
50
+ }
51
+ /**
52
+ * method uninstall
53
+ * @param node_package
54
+ * @param options
55
+ */
56
+ async uninstall(node_package, options) {
57
+ try {
58
+ await this.prologue(options);
59
+ if (!this.dbManager || !this.dbRemote)
60
+ throw 'dbManager or dbRemote undefined';
61
+ await uninstallPackage(node_package, this.dbManager, this.dbRemote);
62
+ }
63
+ catch (err) {
64
+ logger.error(err);
65
+ }
66
+ }
67
+ }
68
+ exports.UninstallCommand = UninstallCommand;
69
+ /**
70
+ * function uninstallPackage
71
+ * @param node_package
72
+ */
73
+ async function uninstallPackage(node_package, dbManager, dbRemote) {
74
+ const uninstallScript = await lookupUninstallScript(node_package);
75
+ if (uninstallScript) {
76
+ /**
77
+ * run scripts/uninstall
78
+ */
79
+ const uninstallPath = path.join('node_modules', node_package, 'scripts', uninstallScript);
80
+ await (0, Cmd_1.runShellCommand)(uninstallPath, []);
81
+ }
82
+ else {
83
+ /**
84
+ * default uninstall :
85
+ */
86
+ await defaultUninstallScript(node_package, dbManager, dbRemote);
87
+ }
88
+ /**
89
+ * uninstall the node package
90
+ */
91
+ await uninstallNodePackage(node_package);
92
+ }
93
+ exports.uninstallPackage = uninstallPackage;
94
+ /**
95
+ * method defaultUninstallScript
96
+ * @param node_package
97
+ */
98
+ async function defaultUninstallScript(node_package, dbManager, dbRemote) {
99
+ console.log();
100
+ console.log('Default uninstall script');
101
+ /**
102
+ * delete package modules from server
103
+ */
104
+ await deletePackageModules(node_package, dbManager);
105
+ /**
106
+ * delete package assets from server
107
+ */
108
+ await deletePackageAssets(node_package, dbManager, dbRemote);
109
+ }
110
+ /**
111
+ * function deletePackageAssets
112
+ * @param node_package
113
+ * @param dbManager
114
+ * @param dbRemote
115
+ */
116
+ async function deletePackageAssets(node_package, dbManager, dbRemote) {
117
+ const assetFolder = path.join('node_modules', node_package, 'asset');
118
+ if (!fs.existsSync(assetFolder) || !fs.statSync(assetFolder).isDirectory()) {
119
+ return;
120
+ }
121
+ console.log();
122
+ console.log('delete assets from server ...');
123
+ await browseFolder(assetFolder, async (filePath) => {
124
+ const route = '/' + path.relative(assetFolder, filePath);
125
+ const dbAsset = await dbManager.dbAssetExist(route);
126
+ if (!dbAsset) {
127
+ logger.info('asset ' + route + ' not found');
128
+ return;
129
+ }
130
+ await dbManager.dbAssetDelete(dbAsset);
131
+ logger.info('asset ' + route + ' deleted');
132
+ });
133
+ console.log((0, kolorist_1.green)('*') + ' delete assets from server');
134
+ }
135
+ /**
136
+ * browseFolder
137
+ * @param folder
138
+ * @param treatment
139
+ */
140
+ async function browseFolder(folder, treatment) {
141
+ const files = fs.readdirSync(folder);
142
+ for (let ind = 0; ind < files.length; ind++) {
143
+ const file = files[ind];
144
+ const pathName = folder + '/' + file;
145
+ if (fs.statSync(pathName).isDirectory()) {
146
+ await browseFolder(pathName, treatment);
147
+ }
148
+ else {
149
+ await treatment(pathName);
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * function deletePackageModules
155
+ * @param node_package
156
+ * @param dbManager
157
+ * @returns
158
+ */
159
+ async function deletePackageModules(node_package, dbManager) {
160
+ const moduleFolder = path.join('node_modules', node_package, 'module');
161
+ if (!fs.existsSync(moduleFolder) || !fs.statSync(moduleFolder).isDirectory()) {
162
+ return;
163
+ }
164
+ console.log();
165
+ console.log('delete modules from server ...');
166
+ const files = fs.readdirSync(moduleFolder);
167
+ for (let ind = 0; ind < files.length; ind++) {
168
+ const file = files[ind];
169
+ if (!dbManager)
170
+ throw 'dbManager undefined';
171
+ const fileInfo = path.parse(file);
172
+ await (0, ModuleCommand_1.deleteModule)(fileInfo.name, dbManager);
173
+ }
174
+ console.log((0, kolorist_1.green)('*') + ' delete modules from server');
175
+ }
176
+ /**
177
+ * function uninstallNodePackage
178
+ * @param node_package
179
+ */
180
+ async function uninstallNodePackage(node_package) {
181
+ try {
182
+ await (0, Cmd_1.runShellCommand)('npm', ['uninstall', '--save-dev', node_package]);
183
+ }
184
+ catch (error) {
185
+ console.error('Error uninstalling ' + node_package + ' :', error);
186
+ throw error;
187
+ }
188
+ }
189
+ /**
190
+ * function lookupUninstallScript
191
+ * @param node_package
192
+ */
193
+ async function lookupUninstallScript(node_package) {
194
+ let result;
195
+ try {
196
+ const scriptsFolder = path.join('node_modules', node_package, 'scripts');
197
+ if (fs.existsSync(scriptsFolder) && fs.statSync(scriptsFolder).isDirectory()) {
198
+ const files = fs.readdirSync(scriptsFolder);
199
+ for (let ind = 0; ind < files.length; ind++) {
200
+ const file = files[ind];
201
+ if (file.startsWith('uninstall.')) {
202
+ result = file;
203
+ }
204
+ }
205
+ }
206
+ return result;
207
+ }
208
+ catch (err) {
209
+ throw err;
210
+ }
211
+ }
package/build/index.js CHANGED
@@ -15,13 +15,15 @@ const RunCommand_1 = require("./RunCommand");
15
15
  const InstallCommand_1 = require("./InstallCommand");
16
16
  const AssetCommand_1 = require("./AssetCommand");
17
17
  const OpenCommand_1 = require("./OpenCommand");
18
+ const UninstallCommand_1 = require("./UninstallCommand");
18
19
  const logger = loglevel_1.default.getLogger("index.ts");
19
20
  logger.setLevel("debug");
20
21
  const program = new commander_1.Command();
21
22
  program.name('cyk').description('cyklang CLI')
22
- .version('0.5.4');
23
+ .version('0.5.6');
23
24
  program.addCommand(new InstallCommand_1.InstallCommand('install'));
24
25
  program.addCommand(new InstallCommand_1.InstallCommand('i'));
26
+ program.addCommand(new UninstallCommand_1.UninstallCommand('uninstall'));
25
27
  program.addCommand(new AssetCommand_1.AssetCommand('asset', 'manage assets'));
26
28
  program.addCommand(new AssetCommand_1.AssetCommand('a', 'manage assets'));
27
29
  program.addCommand(new ModuleCommand_1.ModuleCommand('module'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyklang/cli",
3
- "version": "0.5.4",
3
+ "version": "0.5.6",
4
4
  "description": "cyklang CLI",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
@@ -17,7 +17,7 @@
17
17
  "author": "",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@cyklang/core": "^0.5.2",
20
+ "@cyklang/core": "^0.5.3",
21
21
  "commander": "^9.4.0",
22
22
  "dotenv": "^16.0.1",
23
23
  "form-data": "^4.0.0",