@wavemaker/react-codegen 11.14.1-rc.240 → 11.14.2-rc.6311

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 (73) hide show
  1. package/build-react-web.js +8 -3
  2. package/build-react-web.js.map +1 -1
  3. package/command.js +1 -1
  4. package/command.js.map +1 -1
  5. package/index.js +2 -0
  6. package/index.js.map +1 -1
  7. package/package-lock.json +13 -13
  8. package/package.json +1 -1
  9. package/src/app.generator.js +16 -7
  10. package/src/app.generator.js.map +1 -1
  11. package/src/download-packages.js +193 -0
  12. package/src/download-packages.js.map +1 -0
  13. package/src/gen-app-override-css.js +316 -245
  14. package/src/gen-app-override-css.js.map +1 -1
  15. package/src/genappoverridecssold-file.js +311 -0
  16. package/src/genappoverridecssold-file.js.map +1 -0
  17. package/src/handlebar-helpers.js +186 -0
  18. package/src/handlebar-helpers.js.map +1 -1
  19. package/src/transpile/bind.ex.transformer.js +30 -0
  20. package/src/transpile/bind.ex.transformer.js.map +1 -1
  21. package/src/transpile/components/container/panel.transformer.js +0 -1
  22. package/src/transpile/components/container/panel.transformer.js.map +1 -1
  23. package/src/transpile/components/container/wizardaction.transformer.js +34 -19
  24. package/src/transpile/components/container/wizardaction.transformer.js.map +1 -1
  25. package/src/transpile/components/container/wizardstep.transformer.js +62 -5
  26. package/src/transpile/components/container/wizardstep.transformer.js.map +1 -1
  27. package/src/transpile/components/data/form/form-field.transformer.js +27 -1
  28. package/src/transpile/components/data/form/form-field.transformer.js.map +1 -1
  29. package/src/transpile/components/data/list/list-transformer.js +29 -2
  30. package/src/transpile/components/data/list/list-transformer.js.map +1 -1
  31. package/src/transpile/components/data/live-filter-field.transformer.js +13 -1
  32. package/src/transpile/components/data/live-filter-field.transformer.js.map +1 -1
  33. package/src/transpile/components/data/liveform.transformer.js +15 -4
  34. package/src/transpile/components/data/liveform.transformer.js.map +1 -1
  35. package/src/transpile/components/data/table/table-column.transformer.js +40 -3
  36. package/src/transpile/components/data/table/table-column.transformer.js.map +1 -1
  37. package/src/transpile/components/data/table/table-row-action.transformer.js +1 -1
  38. package/src/transpile/components/dialogs/dialog-actions.transformer.js +19 -0
  39. package/src/transpile/components/dialogs/dialog-actions.transformer.js.map +1 -1
  40. package/src/transpile/components/dialogs/dialog.transformer.js +0 -11
  41. package/src/transpile/components/dialogs/dialog.transformer.js.map +1 -1
  42. package/src/transpile/components/input/checkbox-set.transformer.js +1 -1
  43. package/src/transpile/components/input/checkbox-set.transformer.js.map +1 -1
  44. package/src/transpile/components/input/checkbox.transformer.js +29 -1
  45. package/src/transpile/components/input/checkbox.transformer.js.map +1 -1
  46. package/src/transpile/components/input/currency.transformer.js +1 -1
  47. package/src/transpile/components/input/currency.transformer.js.map +1 -1
  48. package/src/transpile/components/input/radio-set.transformer.js +1 -1
  49. package/src/transpile/components/input/radio-set.transformer.js.map +1 -1
  50. package/src/transpile/components/input/switch.transformer.js.map +1 -1
  51. package/src/transpile/components/nav/nav.transformer.js +33 -1
  52. package/src/transpile/components/nav/nav.transformer.js.map +1 -1
  53. package/src/transpile/components/navigation/menu.transformer.js.map +1 -1
  54. package/src/transpile/components/navigation/popover.transformer.js +1 -1
  55. package/src/transpile/components/navigation/popover.transformer.js.map +1 -1
  56. package/src/transpile/components/utils.js +19 -6
  57. package/src/transpile/components/utils.js.map +1 -1
  58. package/src/transpile/style/dimension-style.parser.js +13 -2
  59. package/src/transpile/style/dimension-style.parser.js.map +1 -1
  60. package/src/transpile/style/style.parser.js +1 -1
  61. package/src/transpile/style/style.parser.js.map +1 -1
  62. package/src/transpile/style.transformer.js +1 -1
  63. package/src/transpile/style.transformer.js.map +1 -1
  64. package/src/transpile/transpile.js +42 -20
  65. package/src/transpile/transpile.js.map +1 -1
  66. package/src/utils.js +6 -2
  67. package/src/utils.js.map +1 -1
  68. package/src/variables/variable.transformer.js +165 -7
  69. package/src/variables/variable.transformer.js.map +1 -1
  70. package/templates/component/component.hbs +0 -10
  71. package/templates/component/partial.hbs +0 -3
  72. package/templates/project/app/components.css +5 -0
  73. package/templates/project/package.json +3 -3
@@ -0,0 +1,193 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.downloadNPMPackage = void 0;
40
+ const path = __importStar(require("path"));
41
+ const fs = __importStar(require("fs"));
42
+ const utils_1 = require("./utils");
43
+ const os_1 = __importDefault(require("os"));
44
+ const rimraf = __importStar(require("rimraf"));
45
+ /**
46
+ * To check the npm package installation successs or not
47
+ * @param {*} path File path where installation success message was written
48
+ * @param {*} msg Success messsage to confirm that package was installed
49
+ * @returns boolean true/false
50
+ */
51
+ const isNPMPackageExist = (path, msg) => {
52
+ if (fs.existsSync(path)) {
53
+ const successMsg = fs.readFileSync(path, { encoding: "utf8", flag: "r" });
54
+ if (successMsg == msg) {
55
+ return true;
56
+ }
57
+ }
58
+ else {
59
+ return false;
60
+ }
61
+ };
62
+ /**
63
+ * Check node modules package were installed or not
64
+ * Create dir for packages with the version name
65
+ * Copy the generated angular app package.json to PATH_NPM_PACKAGE folder
66
+ * Run npm install
67
+ * Write success file to be make sure it was installed successfully.
68
+ */
69
+ const downloadNPMPackage = async (packageInfo) => {
70
+ const HOME_DIR = os_1.default.homedir();
71
+ const PATH_NPM_PACKAGE = (packageInfo.baseDir || HOME_DIR + "/.wm/node_modules/") +
72
+ packageInfo.name +
73
+ "/" +
74
+ packageInfo.version;
75
+ const PATH_NPM_PACKAGE_SUCCESS = PATH_NPM_PACKAGE + "/.SUCCESS", LOCK_FILE = path.join(PATH_NPM_PACKAGE, ".LOCK");
76
+ let isError = false;
77
+ try {
78
+ if (!packageInfo.baseDir) {
79
+ // going to install in the .wm folder if baseDir is not defined(optimizeUIBuild true)
80
+ // To check node modules.
81
+ if (!isNPMPackageExist(PATH_NPM_PACKAGE_SUCCESS, packageInfo.successMsg)) {
82
+ // Check if another process is already installing
83
+ if (fs.existsSync(LOCK_FILE)) {
84
+ console.log(`Waiting for another build to complete npm install... for package ${packageInfo.name}`);
85
+ await waitForLock(LOCK_FILE, 20 * 60 * 1000); // Wait for 20 minutes (timeout in milliseconds)
86
+ }
87
+ else {
88
+ // Acquire the lock
89
+ fs.mkdirSync(PATH_NPM_PACKAGE, { recursive: true });
90
+ fs.writeFileSync(LOCK_FILE, "PROGRESS");
91
+ await processPackage(packageInfo, PATH_NPM_PACKAGE);
92
+ //only create a .SUCCESS file when there is no error
93
+ if (!isError) {
94
+ isError = false;
95
+ fs.writeFileSync(PATH_NPM_PACKAGE_SUCCESS, packageInfo.successMsg);
96
+ }
97
+ }
98
+ }
99
+ else {
100
+ console.log(packageInfo.infoMsg + ` Node packages already installed! for package ${packageInfo.name}`);
101
+ }
102
+ }
103
+ else {
104
+ await processPackage(packageInfo, PATH_NPM_PACKAGE);
105
+ }
106
+ }
107
+ catch (err) {
108
+ deleteFiles([PATH_NPM_PACKAGE_SUCCESS, LOCK_FILE]);
109
+ console.log(`Something went wrong while installing - for package ${packageInfo.name}`, err);
110
+ process.exit(err.code || err.pid);
111
+ }
112
+ finally {
113
+ //cleanup : in windows / optimizeUIBuild is false, we need to delete the temp downloaded package
114
+ if (!packageInfo.baseDir) {
115
+ deleteFiles([LOCK_FILE]);
116
+ }
117
+ }
118
+ return PATH_NPM_PACKAGE;
119
+ };
120
+ exports.downloadNPMPackage = downloadNPMPackage;
121
+ const processPackage = (packageInfo, PATH_NPM_PACKAGE) => {
122
+ let npmInstallCMD = "npm install --legacy-peer-deps ";
123
+ if (packageInfo.packageJsonFile && fs.existsSync(packageInfo.packageJsonFile)) {
124
+ fs.copyFileSync(packageInfo.packageJsonFile, PATH_NPM_PACKAGE + "/package.json");
125
+ try {
126
+ //expecting this lock file to be present for exact versions to be downloaded from private registry
127
+ fs.copyFileSync(`${path.dirname(packageInfo.packageJsonFile)} + /package-lock.json`, `${PATH_NPM_PACKAGE} + /package-lock.json`);
128
+ }
129
+ catch (err) {
130
+ if (err.code === "ENOENT") {
131
+ console.error(`Info: package-lock.json file not found at ${path.dirname(packageInfo.packageJsonFile)}`);
132
+ }
133
+ }
134
+ }
135
+ else {
136
+ npmInstallCMD = "npm init -y && " + npmInstallCMD;
137
+ npmInstallCMD +=
138
+ packageInfo.skipPackageVersion === true
139
+ ? packageInfo.name
140
+ : (packageInfo.scope ? packageInfo.scope + "/" : "") +
141
+ packageInfo.name +
142
+ "@" +
143
+ packageInfo.version;
144
+ }
145
+ fs.mkdirSync(PATH_NPM_PACKAGE, { recursive: true });
146
+ (0, utils_1.executeSyncCmd)("cd " + PATH_NPM_PACKAGE + " && " + npmInstallCMD, errMsg => {
147
+ console.log(packageInfo.infoMsg + " Something wrong with npm installation ", errMsg);
148
+ throw Error(errMsg);
149
+ }, packageInfo.infoMsg);
150
+ };
151
+ /**
152
+ *
153
+ */
154
+ const deleteFiles = (files) => {
155
+ files.forEach((file) => {
156
+ try {
157
+ rimraf.sync(file);
158
+ console.log(`Successfully deleted file - ${file}`);
159
+ }
160
+ catch (err) {
161
+ console.error(`Error while deleting file ${file}`, err);
162
+ throw new Error(`Error while deleting file: ${file}, Error: ${err}`);
163
+ }
164
+ });
165
+ };
166
+ /**
167
+ *
168
+ * @param lockFile
169
+ * @param timeout
170
+ * @returns {Promise<void>}
171
+ */
172
+ const waitForLock = async (lockFile, timeout) => {
173
+ timeout = timeout || 20 * 60 * 1000; // Wait for 20 minutes (timeout in milliseconds)
174
+ // Helper function to wait for the lock to be released with a timeout
175
+ const startTime = Date.now();
176
+ while (fs.existsSync(lockFile)) {
177
+ if (Date.now() - startTime > timeout) {
178
+ console.error("Timeout!! - waiting for the lock to be released. Exiting...");
179
+ process.exit(1); // Terminate the process with an error code
180
+ }
181
+ await sleep(1000); // Wait for 1 second before checking again
182
+ }
183
+ };
184
+ /**
185
+ *
186
+ * @param ms
187
+ * @returns {Promise<unknown>}
188
+ */
189
+ const sleep = (ms) => {
190
+ // Helper function to sleep for a given time
191
+ return new Promise(resolve => setTimeout(resolve, ms));
192
+ };
193
+ //# sourceMappingURL=download-packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-packages.js","sourceRoot":"","sources":["../../src/download-packages.ts"],"names":[],"mappings":"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"}