@signageos/cli 2.3.1 → 2.3.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.
Files changed (127) hide show
  1. package/README.md +1 -0
  2. package/dist/Applet/Build/appletBuildCommand.js +28 -72
  3. package/dist/Applet/Generate/Templates/rspack.config.mjs.template +12 -12
  4. package/dist/Applet/Generate/appletGenerateCommand.d.ts +23 -62
  5. package/dist/Applet/Generate/appletGenerateCommand.js +398 -365
  6. package/dist/Applet/Start/appletStartCommand.js +69 -131
  7. package/dist/Applet/Test/Upload/appletTestRunCommand.js +89 -177
  8. package/dist/Applet/Test/Upload/appletTestRunFacade.js +4 -27
  9. package/dist/Applet/Test/Upload/appletTestUploadCommand.js +98 -223
  10. package/dist/Applet/Test/Upload/appletTestUploadFacade.js +39 -102
  11. package/dist/Applet/Test/appletTestCommand.js +6 -36
  12. package/dist/Applet/Upload/appletUploadCommand.js +199 -305
  13. package/dist/Applet/Upload/appletUploadCommandHelper.js +103 -138
  14. package/dist/Applet/Upload/appletUploadFacade.d.ts +2 -2
  15. package/dist/Applet/Upload/appletUploadFacade.js +172 -263
  16. package/dist/Applet/Upload/appletUploadFacadeHelper.js +39 -52
  17. package/dist/Applet/appletCommand.d.ts +22 -62
  18. package/dist/Applet/appletCommand.js +9 -39
  19. package/dist/Applet/appletErrors.js +5 -24
  20. package/dist/Applet/appletFacade.js +106 -141
  21. package/dist/Applet/appletServerHelper.js +16 -53
  22. package/dist/Auth/loginCommand.js +96 -137
  23. package/dist/Cache/tmpCache.js +35 -13
  24. package/dist/Cli/helper.js +1 -2
  25. package/dist/Cli/packageVersion.js +82 -123
  26. package/dist/Command/commandDefinition.js +0 -1
  27. package/dist/Command/commandProcessor.js +40 -129
  28. package/dist/Command/globalArgs.js +7 -5
  29. package/dist/CommandLine/IProgressBar.js +0 -1
  30. package/dist/CommandLine/progressBarFactory.js +31 -11
  31. package/dist/CustomScript/Generate/customScriptGenerateCommand.js +17 -56
  32. package/dist/CustomScript/Generate/customScriptGenerateFacade.js +82 -106
  33. package/dist/CustomScript/Upload/customScriptUploadCommand.js +44 -120
  34. package/dist/CustomScript/customScriptCommand.js +6 -36
  35. package/dist/CustomScript/customScriptFacade.js +175 -294
  36. package/dist/Device/Connect/connectCommand.js +72 -136
  37. package/dist/Device/Content/setContentCommand.js +33 -78
  38. package/dist/Device/PowerAction/powerActionCommand.js +22 -65
  39. package/dist/Device/deviceCommand.js +7 -37
  40. package/dist/Device/deviceFacade.js +67 -123
  41. package/dist/Emulator/IEmulator.js +0 -1
  42. package/dist/Emulator/createDomain.js +33 -12
  43. package/dist/Emulator/emulatorFacade.js +74 -131
  44. package/dist/Emulator/emulatorFactory.js +112 -124
  45. package/dist/Firmware/Upload/firmwareUploadCommand.js +133 -221
  46. package/dist/Firmware/Upload/firmwareUploadFacade.js +64 -110
  47. package/dist/Firmware/Upload/firmwareUploadHelper.js +27 -5
  48. package/dist/Firmware/firmwareCommand.js +5 -35
  49. package/dist/Lib/archive.js +45 -60
  50. package/dist/Lib/childProcess.js +27 -5
  51. package/dist/Lib/fileSystem.js +62 -82
  52. package/dist/Lib/git.d.ts +1 -1
  53. package/dist/Lib/git.js +44 -82
  54. package/dist/Organization/Get/organizationGetCommand.js +14 -50
  55. package/dist/Organization/List/organizationListCommand.js +12 -46
  56. package/dist/Organization/SetDefault/organizationSetDefaultCommand.js +18 -56
  57. package/dist/Organization/organizationCommand.js +7 -37
  58. package/dist/Organization/organizationFacade.js +97 -172
  59. package/dist/RunControl/runControlHelper.js +11 -60
  60. package/dist/Timer/wait.js +1 -2
  61. package/dist/Timing/List/timingListCommand.js +20 -62
  62. package/dist/Timing/timingCommand.js +5 -35
  63. package/dist/generalCommand.js +1 -2
  64. package/dist/helper.js +48 -109
  65. package/dist/index.js +15 -45
  66. package/dist/parameters.js +17 -40
  67. package/package.json +16 -18
  68. package/dist/Applet/Build/appletBuildCommand.js.map +0 -1
  69. package/dist/Applet/Generate/appletGenerateCommand.js.map +0 -1
  70. package/dist/Applet/Start/appletStartCommand.js.map +0 -1
  71. package/dist/Applet/Test/Upload/appletTestRunCommand.js.map +0 -1
  72. package/dist/Applet/Test/Upload/appletTestRunFacade.js.map +0 -1
  73. package/dist/Applet/Test/Upload/appletTestUploadCommand.js.map +0 -1
  74. package/dist/Applet/Test/Upload/appletTestUploadFacade.js.map +0 -1
  75. package/dist/Applet/Test/appletTestCommand.js.map +0 -1
  76. package/dist/Applet/Upload/appletUploadCommand.js.map +0 -1
  77. package/dist/Applet/Upload/appletUploadCommandHelper.js.map +0 -1
  78. package/dist/Applet/Upload/appletUploadFacade.js.map +0 -1
  79. package/dist/Applet/Upload/appletUploadFacadeHelper.js.map +0 -1
  80. package/dist/Applet/appletCommand.js.map +0 -1
  81. package/dist/Applet/appletErrors.js.map +0 -1
  82. package/dist/Applet/appletFacade.js.map +0 -1
  83. package/dist/Applet/appletServerHelper.js.map +0 -1
  84. package/dist/Auth/loginCommand.js.map +0 -1
  85. package/dist/Cache/tmpCache.js.map +0 -1
  86. package/dist/Cli/helper.js.map +0 -1
  87. package/dist/Cli/packageVersion.js.map +0 -1
  88. package/dist/Command/commandDefinition.js.map +0 -1
  89. package/dist/Command/commandProcessor.js.map +0 -1
  90. package/dist/Command/globalArgs.js.map +0 -1
  91. package/dist/CommandLine/IProgressBar.js.map +0 -1
  92. package/dist/CommandLine/progressBarFactory.js.map +0 -1
  93. package/dist/CustomScript/Generate/customScriptGenerateCommand.js.map +0 -1
  94. package/dist/CustomScript/Generate/customScriptGenerateFacade.js.map +0 -1
  95. package/dist/CustomScript/Upload/customScriptUploadCommand.js.map +0 -1
  96. package/dist/CustomScript/customScriptCommand.js.map +0 -1
  97. package/dist/CustomScript/customScriptFacade.js.map +0 -1
  98. package/dist/Device/Connect/connectCommand.js.map +0 -1
  99. package/dist/Device/Content/setContentCommand.js.map +0 -1
  100. package/dist/Device/PowerAction/powerActionCommand.js.map +0 -1
  101. package/dist/Device/deviceCommand.js.map +0 -1
  102. package/dist/Device/deviceFacade.js.map +0 -1
  103. package/dist/Emulator/IEmulator.js.map +0 -1
  104. package/dist/Emulator/createDomain.js.map +0 -1
  105. package/dist/Emulator/emulatorFacade.js.map +0 -1
  106. package/dist/Emulator/emulatorFactory.js.map +0 -1
  107. package/dist/Firmware/Upload/firmwareUploadCommand.js.map +0 -1
  108. package/dist/Firmware/Upload/firmwareUploadFacade.js.map +0 -1
  109. package/dist/Firmware/Upload/firmwareUploadHelper.js.map +0 -1
  110. package/dist/Firmware/firmwareCommand.js.map +0 -1
  111. package/dist/Lib/archive.js.map +0 -1
  112. package/dist/Lib/childProcess.js.map +0 -1
  113. package/dist/Lib/fileSystem.js.map +0 -1
  114. package/dist/Lib/git.js.map +0 -1
  115. package/dist/Organization/Get/organizationGetCommand.js.map +0 -1
  116. package/dist/Organization/List/organizationListCommand.js.map +0 -1
  117. package/dist/Organization/SetDefault/organizationSetDefaultCommand.js.map +0 -1
  118. package/dist/Organization/organizationCommand.js.map +0 -1
  119. package/dist/Organization/organizationFacade.js.map +0 -1
  120. package/dist/RunControl/runControlHelper.js.map +0 -1
  121. package/dist/Timer/wait.js.map +0 -1
  122. package/dist/Timing/List/timingListCommand.js.map +0 -1
  123. package/dist/Timing/timingCommand.js.map +0 -1
  124. package/dist/generalCommand.js.map +0 -1
  125. package/dist/helper.js.map +0 -1
  126. package/dist/index.js.map +0 -1
  127. package/dist/parameters.js.map +0 -1
@@ -1,14 +1,26 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
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;
12
24
  };
13
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -19,79 +31,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
19
31
  step((generator = generator.apply(thisArg, _arguments || [])).next());
20
32
  });
21
33
  };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (_) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
- if (ar || !(i in from)) {
68
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
- ar[i] = from[i];
70
- }
71
- }
72
- return to.concat(ar || Array.prototype.slice.call(from));
73
- };
74
- var __values = (this && this.__values) || function(o) {
75
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
76
- if (m) return m.call(o);
77
- if (o && typeof o.length === "number") return {
78
- next: function () {
79
- if (o && i >= o.length) o = void 0;
80
- return { value: o && o[i++], done: !o };
81
- }
82
- };
83
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
84
36
  };
85
37
  Object.defineProperty(exports, "__esModule", { value: true });
86
38
  exports.appletGenerate = void 0;
87
- var fs = require("fs-extra");
88
- var child_process = require("child_process");
89
- var chalk_1 = require("chalk");
90
- var path = require("path");
91
- var prompts = require("prompts");
92
- var log_1 = require("@signageos/sdk/dist/Console/log");
93
- var commandDefinition_1 = require("../../Command/commandDefinition");
94
- var git_1 = require("../../Lib/git");
39
+ const fs = __importStar(require("fs-extra"));
40
+ const child_process = __importStar(require("child_process"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const path = __importStar(require("path"));
43
+ const prompts_1 = __importDefault(require("prompts"));
44
+ const log_1 = require("@signageos/sdk/dist/Console/log");
45
+ const git_1 = require("../../Lib/git");
46
+ const commandDefinition_1 = require("../../Command/commandDefinition");
47
+ const which_1 = __importDefault(require("which"));
95
48
  var Language;
96
49
  (function (Language) {
97
50
  Language["JavaScript"] = "javascript";
@@ -107,35 +60,48 @@ var GitOptions;
107
60
  GitOptions["No"] = "no";
108
61
  GitOptions["Yes"] = "yes";
109
62
  })(GitOptions || (GitOptions = {}));
110
- var NAME_REGEXP = /^\w(\w|\d|-)*\w$/;
111
- var NPM_EXECUTABLE = 'npm';
112
- var OPTION_LIST = [
113
- { name: 'name', type: String, description: "Applet name. Match RegExp: ".concat(NAME_REGEXP.toString()) },
114
- { name: 'applet-version', type: String, description: "Applet initial version. Use semantic version", defaultValue: '0.0.0' },
63
+ var Packager;
64
+ (function (Packager) {
65
+ Packager["Npm"] = "npm";
66
+ Packager["Pnpm"] = "pnpm";
67
+ Packager["Yarn"] = "yarn";
68
+ Packager["Bun"] = "bun";
69
+ })(Packager || (Packager = {}));
70
+ const NAME_REGEXP = /^\w(\w|\d|-)*\w$/;
71
+ let PACKAGER_EXECUTABLE = 'npm';
72
+ const OPTION_LIST = [
73
+ { name: 'name', type: String, description: `Applet name. Match RegExp: ${NAME_REGEXP.toString()}` },
74
+ { name: 'applet-version', type: String, description: 'Applet initial version. Use semantic version', defaultValue: '0.0.0' },
115
75
  { name: 'target-dir', type: String, description: 'Directory where will be the applet generated to' },
116
- { name: 'npm-registry', type: String, description: "NPM registry URL. If you have your private npm registry" },
117
- { name: 'language', type: String, description: "Generate applet with \"typescript\" or \"javascript\" source code" },
118
- { name: 'bundler', type: String, description: "Generate applet with \"webpack\" (default) or \"rspack\"" },
119
- { name: 'git', type: String, description: "Init applet as git repository \"no\" (default) or \"yes\"", defaultValue: 'no' },
76
+ { name: 'git', type: String, description: 'Init applet as git repository "no" (default) or "yes"' },
77
+ { name: 'packager', type: String, description: 'Use preferred package manager "npm" (default), "pnpm", "yarn" or "bun"' },
78
+ { name: 'npm-registry', type: String, description: 'NPM registry URL. If you have your private npm registry' },
79
+ { name: 'language', type: String, description: 'Generate applet with "typescript" or "javascript" source code' },
80
+ { name: 'bundler', type: String, description: 'Generate applet with "webpack" (default) or "rspack"' },
120
81
  ];
121
- var DEPENDENCIES = {
82
+ const DEPENDENCIES = {
122
83
  common: [
123
84
  '@signageos/front-applet@latest',
124
- '@signageos/front-display@14',
85
+ '@signageos/front-display@latest',
125
86
  '@signageos/webpack-plugin@latest',
126
- 'es-check@8',
87
+ 'es-check@9',
127
88
  /* required for transpilation to ES5 */
89
+ 'css-loader@7',
90
+ 'style-loader@4',
91
+ 'core-js@3',
92
+ ],
93
+ webpack: [
94
+ 'webpack@5',
95
+ 'webpack-cli@6',
96
+ 'webpack-dev-server@5',
97
+ 'html-webpack-plugin@5',
98
+ 'babel-loader@10',
128
99
  '@babel/core@7',
129
100
  '@babel/preset-env@7',
130
- 'babel-loader@8',
131
- 'css-loader@6',
132
- 'style-loader@3',
133
- 'core-js@3',
134
101
  ],
135
- webpack: ['webpack@5', 'webpack-cli@4', 'webpack-dev-server@4', 'html-webpack-plugin@5'],
136
102
  rspack: ['@rspack/core@latest', '@rspack/cli@latest'],
137
103
  };
138
- var RUNSCRIPTS = {
104
+ const RUNSCRIPTS = {
139
105
  common: {
140
106
  prepare: 'npm run clean && npm run build',
141
107
  upload: 'sos applet upload',
@@ -160,7 +126,7 @@ var RUNSCRIPTS = {
160
126
  * @returns string
161
127
  * @throws Will throw an error if the file does not exist
162
128
  */
163
- var importFileAsString = function (relativePath) {
129
+ const importFileAsString = (relativePath) => {
164
130
  return fs.readFileSync(path.resolve(__dirname, relativePath), 'utf-8');
165
131
  };
166
132
  /**
@@ -176,6 +142,7 @@ var importFileAsString = function (relativePath) {
176
142
  * @param {string} options.language - The language of the applet (typescript or javascript)
177
143
  * @param {string} options.bundler - The bundler to use (webpack or rspack)
178
144
  * @param {string} options.git - Whether to initialize a git repository (yes or no)
145
+ * @param {string} options.packager - Whether to manage packages with npm, pnpm, bun or yarn
179
146
  * @returns {Promise<void>} - A promise that resolves when the applet is generated
180
147
  * @example
181
148
  * appletGenerate.run({
@@ -193,277 +160,344 @@ exports.appletGenerate = (0, commandDefinition_1.createCommandDefinition)({
193
160
  description: 'Generate basic applet sample',
194
161
  optionList: OPTION_LIST,
195
162
  commands: [],
196
- run: function (options) {
197
- var _a;
198
- return __awaiter(this, void 0, void 0, function () {
199
- var currentDirectory, appletName, response, language, response, git, gitFound, response, bundler, response, appletRootDirectory, appletRootDirectoryName, mergedDeps, bundlerConfig, generateFiles, _b, _c, _d, _e, error_1, generateFiles_1, generateFiles_1_1, generateFile, e_1_1, child;
200
- var _f, _g, e_1, _h;
201
- return __generator(this, function (_j) {
202
- switch (_j.label) {
203
- case 0:
204
- currentDirectory = process.cwd();
205
- appletName = options.name;
206
- if (!!appletName) return [3 /*break*/, 2];
207
- return [4 /*yield*/, prompts({
208
- type: 'text',
209
- name: 'name',
210
- message: "Type applet name",
211
- })];
212
- case 1:
213
- response = _j.sent();
214
- appletName = response.name;
215
- _j.label = 2;
216
- case 2:
217
- if (!appletName) {
218
- throw new Error("Missing argument --name <string>");
219
- }
220
- if (!NAME_REGEXP.test(appletName)) {
221
- throw new Error("Name has to start and end with a character (a-zA-Z0-9_)\nRegExp: ".concat(NAME_REGEXP.toString()));
222
- }
223
- language = options.language;
224
- if (!(language === undefined)) return [3 /*break*/, 4];
225
- return [4 /*yield*/, prompts({
226
- type: 'select',
227
- name: 'language',
228
- message: "Select language of generated applet",
229
- choices: [
230
- { title: Language.TypeScript, value: Language.TypeScript },
231
- { title: Language.JavaScript, value: Language.JavaScript },
232
- ],
233
- })];
234
- case 3:
235
- response = _j.sent();
236
- language = response.language;
237
- _j.label = 4;
238
- case 4:
239
- checkSupport('language', language, Object.values(Language));
240
- git = options.git;
241
- return [4 /*yield*/, (0, git_1.machineHasGit)()];
242
- case 5:
243
- gitFound = _j.sent();
244
- if (!gitFound) {
245
- console.error("Git not found on this machine");
246
- }
247
- if (!(git === undefined && gitFound)) return [3 /*break*/, 7];
248
- return [4 /*yield*/, prompts({
249
- type: 'select',
250
- name: 'git',
251
- message: "Init applet as git repository",
252
- choices: [
253
- { title: GitOptions.No, value: GitOptions.No },
254
- { title: GitOptions.Yes, value: GitOptions.Yes },
255
- ],
256
- })];
257
- case 6:
258
- response = _j.sent();
259
- git = response.git;
260
- _j.label = 7;
261
- case 7:
262
- checkSupport('git', git, Object.values(GitOptions));
263
- bundler = (_a = options.bundler) === null || _a === void 0 ? void 0 : _a.toLowerCase();
264
- if (!(bundler === undefined)) return [3 /*break*/, 9];
265
- return [4 /*yield*/, prompts({
266
- type: 'select',
267
- name: 'bundler',
268
- message: "Select bundler of generated applet",
269
- choices: [
270
- { title: Bundler.Webpack, value: Bundler.Webpack },
271
- { title: Bundler.Rspack, value: Bundler.Rspack },
272
- ],
273
- })];
274
- case 8:
275
- response = _j.sent();
276
- bundler = response.bundler;
277
- _j.label = 9;
278
- case 9:
279
- checkSupport('bundler', bundler, Object.values(Bundler));
280
- appletRootDirectory = options['target-dir'] || path.join(currentDirectory, appletName);
281
- appletRootDirectoryName = options['target-dir'] || appletName;
282
- mergedDeps = __spreadArray([], __read(DEPENDENCIES.common), false);
283
- switch (bundler) {
284
- case Bundler.Webpack:
285
- mergedDeps.push.apply(mergedDeps, __spreadArray([], __read(DEPENDENCIES.webpack), false));
286
- break;
287
- case Bundler.Rspack:
288
- mergedDeps.push.apply(mergedDeps, __spreadArray([], __read(DEPENDENCIES.rspack), false));
289
- break;
290
- default:
291
- throw new Error("Bundler ".concat(bundler, " is not supported"));
292
- }
293
- bundlerConfig = (_f = {},
294
- _f[Bundler.Webpack] = {
295
- path: path.join(appletRootDirectory, 'webpack.config.js'),
296
- content: createWebpackConfig(),
297
- },
298
- _f[Bundler.Rspack] = {
299
- path: path.join(appletRootDirectory, 'rspack.config.mjs'),
300
- content: createRspackConfig(),
301
- },
302
- _f);
303
- generateFiles = [];
304
- // TypeScript or JavaScript
305
- if (language === Language.TypeScript) {
306
- generateFiles.push({
307
- path: path.join(appletRootDirectory, 'src', 'index.ts'),
308
- content: createIndexTs(),
309
- });
310
- generateFiles.push({
311
- path: path.join(appletRootDirectory, 'tsconfig.json'),
312
- content: createTsConfig(),
313
- });
314
- // Extend dependencies for Typescript
315
- mergedDeps.push('ts-loader@9', 'typescript@5', '@babel/preset-typescript@7', 'ts-node@10');
316
- }
317
- else {
318
- generateFiles.push({
319
- path: path.join(appletRootDirectory, 'src', 'index.js'),
320
- content: createIndexJs(),
321
- });
322
- }
323
- // Create styles
324
- // TODO sass support
325
- {
326
- generateFiles.push({
327
- path: path.join(appletRootDirectory, 'src', 'index.css'),
328
- content: createIndexCss(),
329
- });
330
- }
331
- // Create custom npm registry config
332
- if (options['npm-registry']) {
333
- generateFiles.push({
334
- path: path.join(appletRootDirectory, '.npmrc'),
335
- content: createNpmRunControl(options['npm-registry']),
336
- });
337
- }
338
- if (!options['applet-version']) {
339
- throw new Error('Argument --applet-version is required');
340
- }
341
- // Add files to project
342
- _c = (_b = generateFiles).push;
343
- _g = {
344
- path: path.join(appletRootDirectory, 'package.json')
345
- };
346
- _e = (_d = JSON).stringify;
347
- return [4 /*yield*/, createPackageConfig(appletName, options['applet-version'], bundler)];
348
- case 10:
349
- // Add files to project
350
- _c.apply(_b, [(_g.content = _e.apply(_d, [_j.sent(), undefined, 2]) + '\n',
351
- _g)]);
352
- generateFiles.push(bundlerConfig[bundler]);
353
- generateFiles.push({
354
- path: path.join(appletRootDirectory, 'public', 'index.html'),
355
- content: createIndexHtml(appletName),
356
- });
357
- generateFiles.push({
358
- path: path.join(appletRootDirectory, '.sosignore'),
359
- content: 'node_modules/\n',
360
- });
361
- // Create project files
362
- return [4 /*yield*/, fs.mkdir(appletRootDirectory)];
363
- case 11:
364
- // Create project files
365
- _j.sent();
366
- if (!(git === GitOptions.Yes && gitFound)) return [3 /*break*/, 15];
367
- generateFiles.push({
368
- path: path.join(appletRootDirectory, '.gitignore'),
369
- content: 'node_modules/\n./dist',
370
- });
371
- _j.label = 12;
372
- case 12:
373
- _j.trys.push([12, 14, , 15]);
374
- return [4 /*yield*/, (0, git_1.initGitRepository)(appletRootDirectory)];
375
- case 13:
376
- _j.sent();
377
- return [3 /*break*/, 15];
378
- case 14:
379
- error_1 = _j.sent();
380
- console.error("Git repository initialization failed: ".concat(error_1));
381
- return [3 /*break*/, 15];
382
- case 15:
383
- _j.trys.push([15, 21, 22, 23]);
384
- generateFiles_1 = __values(generateFiles), generateFiles_1_1 = generateFiles_1.next();
385
- _j.label = 16;
386
- case 16:
387
- if (!!generateFiles_1_1.done) return [3 /*break*/, 20];
388
- generateFile = generateFiles_1_1.value;
389
- return [4 /*yield*/, fs.ensureDir(path.dirname(generateFile.path))];
390
- case 17:
391
- _j.sent();
392
- return [4 /*yield*/, fs.writeFile(generateFile.path, generateFile.content)];
393
- case 18:
394
- _j.sent();
395
- _j.label = 19;
396
- case 19:
397
- generateFiles_1_1 = generateFiles_1.next();
398
- return [3 /*break*/, 16];
399
- case 20: return [3 /*break*/, 23];
400
- case 21:
401
- e_1_1 = _j.sent();
402
- e_1 = { error: e_1_1 };
403
- return [3 /*break*/, 23];
404
- case 22:
405
- try {
406
- if (generateFiles_1_1 && !generateFiles_1_1.done && (_h = generateFiles_1.return)) _h.call(generateFiles_1);
407
- }
408
- finally { if (e_1) throw e_1.error; }
409
- return [7 /*endfinally*/];
410
- case 23:
411
- // Install dependencies
412
- console.log('Installing dependencies:\n', mergedDeps);
413
- process.chdir(appletRootDirectory);
414
- child = child_process.spawn(NPM_EXECUTABLE, __spreadArray(['install', '--save-dev'], __read(mergedDeps), false), {
415
- stdio: 'inherit',
416
- shell: true,
417
- });
418
- child.on('close', function () {
419
- (0, log_1.log)('info', "\nApplet ".concat(chalk_1.default.green(appletName), " created!"));
420
- (0, log_1.log)('info', "use: cd ".concat(chalk_1.default.green(appletRootDirectoryName), " and ").concat(chalk_1.default.green('npm start'), "\n"));
421
- });
422
- return [2 /*return*/];
163
+ run(options) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ const currentDirectory = process.cwd();
166
+ // Detect if the command has been called with optional parameters
167
+ const excludedKeys = ['command', 'applet-version'];
168
+ const argumentsFound = Object.entries(options)
169
+ .filter(([key, _value]) => !excludedKeys.includes(key))
170
+ .map(([key, value]) => ({ [key]: value })).length > 0;
171
+ console.info('sOS CLI started with params:', options);
172
+ // Create file index
173
+ const generateFiles = [];
174
+ // PROMPT: Applet Name
175
+ let appletName = typeof options.name === 'string' ? options.name : undefined;
176
+ if (!appletName) {
177
+ const response = yield (0, prompts_1.default)({
178
+ type: 'text',
179
+ name: 'name',
180
+ message: `Type applet name`,
181
+ });
182
+ appletName = response.name;
183
+ }
184
+ if (!appletName) {
185
+ throw new Error(`Missing argument --name <string>`);
186
+ }
187
+ if (!NAME_REGEXP.test(appletName)) {
188
+ throw new Error(`Name has to start and end with a character (a-zA-Z0-9_)\nRegExp: ${NAME_REGEXP.toString()}`);
189
+ }
190
+ // PROMPT: Language select
191
+ let language;
192
+ if (options.language === undefined) {
193
+ const response = yield (0, prompts_1.default)({
194
+ type: 'select',
195
+ name: 'language',
196
+ message: `Select language of generated applet`,
197
+ choices: [
198
+ { title: Language.TypeScript, value: Language.TypeScript },
199
+ { title: Language.JavaScript, value: Language.JavaScript },
200
+ ],
201
+ });
202
+ language = response.language;
203
+ }
204
+ else {
205
+ language = typeof options.language === 'string' ? options.language.toLowerCase() : Language.TypeScript;
206
+ }
207
+ checkSupport('language', language, Object.values(Language));
208
+ // PROMPT: Git support select
209
+ let git;
210
+ const gitFound = yield (0, which_1.default)('git', { nothrow: true });
211
+ if (!gitFound) {
212
+ console.error(`Git not found on this machine`);
213
+ }
214
+ // PROMPT: Skip prompt if git was not found
215
+ if (options.git === undefined && gitFound && !argumentsFound) {
216
+ const response = yield (0, prompts_1.default)({
217
+ type: 'select',
218
+ name: 'git',
219
+ message: `Init applet as git repository`,
220
+ choices: [
221
+ { title: GitOptions.No, value: GitOptions.No },
222
+ { title: GitOptions.Yes, value: GitOptions.Yes },
223
+ ],
224
+ });
225
+ git = response.git;
226
+ }
227
+ else {
228
+ git = typeof options.git === 'string' ? options.git.toLowerCase() : GitOptions.No;
229
+ }
230
+ checkSupport('git', git, Object.values(GitOptions));
231
+ // PROMPT: Bundler select
232
+ let bundler;
233
+ if (options.bundler === undefined) {
234
+ const response = yield (0, prompts_1.default)({
235
+ type: 'select',
236
+ name: 'bundler',
237
+ message: `Select bundler of generated applet`,
238
+ choices: [
239
+ { title: Bundler.Webpack, value: Bundler.Webpack },
240
+ { title: Bundler.Rspack, value: Bundler.Rspack },
241
+ ],
242
+ });
243
+ bundler = response.bundler;
244
+ }
245
+ else {
246
+ bundler = typeof options.bundler === 'string' ? options.bundler.toLowerCase() : Bundler.Webpack;
247
+ }
248
+ checkSupport('bundler', bundler, Object.values(Bundler));
249
+ const targetDir = typeof options['target-dir'] === 'string' ? options['target-dir'] : undefined;
250
+ const appletRootDirectory = targetDir || path.join(currentDirectory, appletName);
251
+ const appletRootDirectoryName = targetDir || appletName;
252
+ // Merge dependencies
253
+ const mergedDeps = [...DEPENDENCIES.common];
254
+ switch (bundler) {
255
+ case Bundler.Rspack:
256
+ mergedDeps.push(...DEPENDENCIES.rspack);
257
+ break;
258
+ case Bundler.Webpack:
259
+ mergedDeps.push(...DEPENDENCIES.webpack);
260
+ break;
261
+ default:
262
+ console.warn(`Unknown bundler ${bundler}. No additional dependencies added.`);
263
+ }
264
+ // PROMPT: Package manager select
265
+ let packager;
266
+ if (options.packager === undefined) {
267
+ const response = yield (0, prompts_1.default)({
268
+ type: 'select',
269
+ name: 'packager',
270
+ message: `Select preferred package manager`,
271
+ choices: [
272
+ { title: Packager.Npm, value: Packager.Npm },
273
+ { title: Packager.Pnpm, value: Packager.Pnpm },
274
+ { title: Packager.Yarn, value: Packager.Yarn },
275
+ { title: Packager.Bun, value: Packager.Bun },
276
+ ],
277
+ });
278
+ packager = response.packager;
279
+ }
280
+ else {
281
+ packager = typeof options.packager === 'string' ? options.packager.toLowerCase() : Packager.Npm;
282
+ }
283
+ checkSupport('packager', packager, Object.values(Packager));
284
+ switch (packager) {
285
+ case Packager.Pnpm:
286
+ PACKAGER_EXECUTABLE = 'pnpm';
287
+ RUNSCRIPTS.common = {
288
+ prepare: 'pnpm run clean && pnpm run build',
289
+ upload: 'sos applet upload',
290
+ clean: 'pnpx rimraf dist',
291
+ escheck: 'pnpx es-check --module es5 dist/**/*.js',
292
+ postbuild: 'pnpm run escheck',
293
+ };
294
+ break;
295
+ case Packager.Yarn:
296
+ PACKAGER_EXECUTABLE = 'yarn';
297
+ RUNSCRIPTS.common = {
298
+ prepare: 'yarn run clean && yarn run build',
299
+ upload: 'sos applet upload',
300
+ clean: 'npx rimraf dist',
301
+ escheck: 'npx es-check --module es5 dist/**/*.js',
302
+ postbuild: 'npm run escheck',
303
+ };
304
+ break;
305
+ case Packager.Bun:
306
+ PACKAGER_EXECUTABLE = 'bun';
307
+ RUNSCRIPTS.common = {
308
+ prepare: 'bun run clean && bun run build',
309
+ upload: 'sos applet upload',
310
+ clean: 'bunx rimraf dist',
311
+ escheck: 'bunx es-check --module es5 dist/**/*.js',
312
+ postbuild: 'bun run escheck',
313
+ };
314
+ break;
315
+ default:
316
+ }
317
+ generateFiles.push({
318
+ path: path.join(appletRootDirectory, '.npmrc'),
319
+ content: 'registry=https://registry.npmjs.org/\nalways-auth=false',
320
+ });
321
+ // TypeScript or JavaScript
322
+ if (language === Language.TypeScript) {
323
+ generateFiles.push({
324
+ path: path.join(appletRootDirectory, 'src', 'index.ts'),
325
+ content: createIndexTs(),
326
+ });
327
+ generateFiles.push({
328
+ path: path.join(appletRootDirectory, 'tsconfig.json'),
329
+ content: createTsConfig(),
330
+ });
331
+ // Extend dependencies for Typescript
332
+ mergedDeps.push('typescript@5');
333
+ // Extend dependencies for Webpack
334
+ if (bundler === Bundler.Webpack) {
335
+ mergedDeps.push('ts-loader@9', '@babel/preset-typescript@7', 'ts-node@10');
423
336
  }
337
+ }
338
+ else {
339
+ generateFiles.push({
340
+ path: path.join(appletRootDirectory, 'src', 'index.js'),
341
+ content: createIndexJs(),
342
+ });
343
+ }
344
+ // Create styles
345
+ // TODO sass support
346
+ {
347
+ generateFiles.push({
348
+ path: path.join(appletRootDirectory, 'src', 'index.css'),
349
+ content: createIndexCss(),
350
+ });
351
+ }
352
+ // Create custom npm registry config
353
+ if (typeof options['npm-registry'] === 'string') {
354
+ generateFiles.push({
355
+ path: path.join(appletRootDirectory, '.npmrc'),
356
+ content: createNpmRunControl(options['npm-registry']),
357
+ });
358
+ }
359
+ if (!options['applet-version']) {
360
+ throw new Error('Argument --applet-version is required');
361
+ }
362
+ // Add files to project
363
+ generateFiles.push({
364
+ path: path.join(appletRootDirectory, 'package.json'),
365
+ content: JSON.stringify(yield createPackageConfig(appletName, String(options['applet-version']), bundler, language), undefined, 2) + '\n',
366
+ });
367
+ // Configure bundler
368
+ switch (bundler) {
369
+ case Bundler.Rspack:
370
+ generateFiles.push({
371
+ path: path.join(appletRootDirectory, 'rspack.config.mjs'),
372
+ content: createRspackConfig(),
373
+ });
374
+ break;
375
+ case Bundler.Webpack:
376
+ generateFiles.push({
377
+ path: path.join(appletRootDirectory, 'webpack.config.js'),
378
+ content: createWebpackConfig(),
379
+ });
380
+ break;
381
+ default:
382
+ throw new Error('Argument --bundler is required');
383
+ }
384
+ generateFiles.push({
385
+ path: path.join(appletRootDirectory, 'public', 'index.html'),
386
+ content: createIndexHtml(appletName),
424
387
  });
388
+ generateFiles.push({
389
+ path: path.join(appletRootDirectory, '.sosignore'),
390
+ content: 'node_modules/\n',
391
+ });
392
+ // Initialise git repository
393
+ if (git === GitOptions.Yes && gitFound) {
394
+ generateFiles.push({
395
+ path: path.join(appletRootDirectory, '.gitignore'),
396
+ content: 'node_modules/\n./dist',
397
+ });
398
+ yield (0, git_1.initGitRepository)(appletRootDirectory, true).catch((error) => {
399
+ console.error(`Git repository initialization failed: ${error}`);
400
+ });
401
+ }
402
+ // Create applet directory
403
+ for (const generateFile of generateFiles) {
404
+ yield fs.ensureDir(path.dirname(generateFile.path));
405
+ yield fs.writeFile(generateFile.path, generateFile.content);
406
+ }
407
+ console.info(`Loooking for ${PACKAGER_EXECUTABLE}`);
408
+ const packagerFound = yield (0, which_1.default)(PACKAGER_EXECUTABLE).catch((err) => {
409
+ console.error(`${PACKAGER_EXECUTABLE} not found on this machine: ${err}`);
410
+ });
411
+ if (packagerFound) {
412
+ // Install dependencies
413
+ process.chdir(appletRootDirectory);
414
+ // Ensure the default .npmrc file will be loaded from project root
415
+ // Yarn 2+ uses .yarnrc.yml, but we can use this flag to override user's .npmrc
416
+ const packagerPrefix = ''; // 'NPM_CONFIG_USERCONFIG=/dev/null';
417
+ const configFlag = packager === Packager.Yarn ? '--no-default-rc' : '';
418
+ const installCommand = packager === Packager.Yarn ? 'add' : 'install';
419
+ // Log the command being executed
420
+ console.info(`Installing dependencies: ${packagerPrefix} ${PACKAGER_EXECUTABLE} ${installCommand} ${configFlag} --save-dev ${mergedDeps.join(' ')}`);
421
+ const child = child_process.spawn(PACKAGER_EXECUTABLE, [packagerPrefix, installCommand, configFlag, '--save-dev', ...mergedDeps], {
422
+ stdio: 'pipe',
423
+ shell: true,
424
+ });
425
+ // Capture and log stdout
426
+ child.stdout.on('data', (data) => {
427
+ console.log(`${data.toString()}`);
428
+ });
429
+ // Capture and log stderr
430
+ child.stderr.on('data', (data) => {
431
+ console.error(`${data.toString()}`);
432
+ });
433
+ // Handle errors
434
+ child.on('error', (error) => {
435
+ console.error(`Error executing command: ${error.message}`);
436
+ });
437
+ // Handle process exit
438
+ child.on('close', (code) => {
439
+ if (code === 0) {
440
+ (0, log_1.log)('info', `\nApplet ${chalk_1.default.green(appletName)} created!`);
441
+ (0, log_1.log)('info', `\nContinue with ${chalk_1.default.green(`cd ${appletRootDirectoryName}`)} and ${chalk_1.default.green(`${PACKAGER_EXECUTABLE} start`)}`);
442
+ }
443
+ else {
444
+ console.error(`Command exited with code ${code}`);
445
+ }
446
+ });
447
+ }
448
+ else {
449
+ (0, log_1.log)('info', `${chalk_1.default.red(`Please first install ${PACKAGER_EXECUTABLE} globally.`)}\nContinue with ${chalk_1.default.green(`cd ${appletRootDirectoryName}`)}, ${chalk_1.default.green(`${PACKAGER_EXECUTABLE} install`)} and ${chalk_1.default.green(`${PACKAGER_EXECUTABLE} start`)}`);
450
+ (0, log_1.log)('info', `\nApplet ${chalk_1.default.white(appletName)} created!`);
451
+ }
425
452
  });
426
453
  },
427
454
  });
428
455
  /**
429
456
  * Create package.json config
430
457
  */
431
- var createPackageConfig = function (name, version, bundler) { return __awaiter(void 0, void 0, void 0, function () {
432
- var scriptDef;
433
- return __generator(this, function (_a) {
434
- scriptDef = __assign({}, RUNSCRIPTS.common);
435
- switch (bundler) {
436
- case Bundler.Webpack:
437
- scriptDef = __assign(__assign({}, scriptDef), RUNSCRIPTS.webpack);
438
- break;
439
- case Bundler.Rspack:
440
- scriptDef = __assign(__assign({}, scriptDef), RUNSCRIPTS.rspack);
441
- break;
442
- default:
443
- throw new Error("Bundler ".concat(bundler, " is not supported"));
458
+ const createPackageConfig = (name, version, bundler, language) => __awaiter(void 0, void 0, void 0, function* () {
459
+ // Define type for script definition to avoid TypeScript errors
460
+ let scriptDef = Object.assign({}, RUNSCRIPTS.common);
461
+ switch (bundler) {
462
+ case Bundler.Rspack:
463
+ scriptDef = Object.assign(Object.assign({}, scriptDef), RUNSCRIPTS.rspack);
464
+ break;
465
+ case Bundler.Webpack:
466
+ default:
467
+ scriptDef = Object.assign(Object.assign({}, scriptDef), RUNSCRIPTS.webpack);
468
+ }
469
+ // Add typescript checking before builds
470
+ if (language === Language.TypeScript) {
471
+ scriptDef.typecheck = 'tsc --noEmit';
472
+ // Make sure build exists before modifying it
473
+ if (scriptDef.build) {
474
+ scriptDef.build = `npm run typecheck && ${scriptDef.build}`;
444
475
  }
445
- return [2 /*return*/, {
446
- name: name,
447
- version: version,
448
- main: 'dist/index.html',
449
- scripts: scriptDef,
450
- files: ['dist'],
451
- description: 'signageOS applet',
452
- repository: {},
453
- license: 'UNLICENSED',
454
- }];
455
- });
456
- }); };
457
- var createWebpackConfig = function () { return importFileAsString('./Templates/webpack.config.js.template'); };
458
- var createRspackConfig = function () { return importFileAsString('./Templates/rspack.config.mjs.template'); };
459
- var createIndexHtml = function (title) {
460
- return importFileAsString('./Templates/index.html.template').replaceAll('${title}', title);
476
+ }
477
+ return {
478
+ name,
479
+ version,
480
+ main: 'dist/index.html',
481
+ scripts: scriptDef,
482
+ files: ['dist'],
483
+ description: 'signageOS applet',
484
+ repository: {},
485
+ license: 'UNLICENSED',
486
+ };
487
+ });
488
+ const createWebpackConfig = () => importFileAsString('./Templates/webpack.config.js.template');
489
+ const createRspackConfig = () => importFileAsString('./Templates/rspack.config.mjs.template');
490
+ const createIndexHtml = (title) => {
491
+ return importFileAsString('./Templates/index.html.template').replace(/\$\{title\}/g, title);
461
492
  };
462
- var createIndexCss = function () { return importFileAsString('./Templates/index.css.template'); };
463
- var createIndexJs = function () { return importFileAsString('./Templates/index.js.template'); };
464
- var createIndexTs = function () { return createIndexJs(); }; // There is currently no differences
465
- var createTsConfig = function () { return importFileAsString('./Templates/tsconfig.js.template'); };
466
- var createNpmRunControl = function (registryUrl) { return "\nregistry=".concat(registryUrl, "\nalways-auth=true\n"); };
493
+ const createIndexCss = () => importFileAsString('./Templates/index.css.template');
494
+ const createIndexJs = () => importFileAsString('./Templates/index.js.template');
495
+ const createIndexTs = () => createIndexJs(); // There is currently no difference
496
+ const createTsConfig = () => importFileAsString('./Templates/tsconfig.js.template');
497
+ const createNpmRunControl = (registryUrl) => `
498
+ registry=${registryUrl}
499
+ always-auth=true
500
+ `;
467
501
  /**
468
502
  * Check if the value is present and is one of the supported options
469
503
  * @param propName - The name of the property to check
@@ -471,10 +505,9 @@ var createNpmRunControl = function (registryUrl) { return "\nregistry=".concat(r
471
505
  * @param options - The supported options
472
506
  * @throws Will throw an error if the value is not present or not one of the supported options
473
507
  */
474
- var checkSupport = function (propName, value, options) {
475
- var values = Object.values(options);
508
+ function checkSupport(propName, value, options) {
509
+ const values = Object.values(options);
476
510
  if (!value || !values.includes(value)) {
477
- throw new Error("Missing or incorrect argument --".concat(propName, " <").concat(values.join('|'), ">"));
511
+ throw new Error(`Missing or incorrect argument --${propName} <${values.join('|')}>`);
478
512
  }
479
- };
480
- //# sourceMappingURL=appletGenerateCommand.js.map
513
+ }