dazscript-framework 0.1.15 → 0.1.17

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 (82) hide show
  1. package/README.md +365 -93
  2. package/babel.config.js +33 -33
  3. package/dist/babel/trace-babel-plugin.js +243 -243
  4. package/dist/babel/trace-log-babel-plugin.js +164 -164
  5. package/dist/scripts/install-generator.js +185 -185
  6. package/package.json +72 -70
  7. package/src/common/dz-dump.ts +120 -120
  8. package/src/common/log.ts +56 -56
  9. package/src/common/trace.ts +26 -26
  10. package/src/core/action-decorator.ts +15 -15
  11. package/src/core/base-script.ts +30 -30
  12. package/src/core/custom-action.ts +11 -11
  13. package/src/core/global.ts +4 -4
  14. package/src/dialog/basic-dialog.ts +40 -32
  15. package/src/dialog/builders/button-builder.ts +52 -52
  16. package/src/dialog/builders/checkbox-builder.ts +29 -29
  17. package/src/dialog/builders/color-picker-builder.ts +35 -35
  18. package/src/dialog/builders/combo-box-builder.ts +38 -35
  19. package/src/dialog/builders/combo-edit-builder.ts +35 -35
  20. package/src/dialog/builders/dialog-builder.ts +49 -49
  21. package/src/dialog/builders/groupbox-builder.ts +121 -82
  22. package/src/dialog/builders/label-builder.ts +33 -28
  23. package/src/dialog/builders/layout-builder.ts +59 -59
  24. package/src/dialog/builders/line-edit-builder.ts +124 -119
  25. package/src/dialog/builders/list-box-builder.ts +103 -0
  26. package/src/dialog/builders/list-view-builder.ts +396 -328
  27. package/src/dialog/builders/node-selection-builder.ts +55 -55
  28. package/src/dialog/builders/path-combo-box-builder.ts +24 -24
  29. package/src/dialog/builders/popup-menu-builder.ts +46 -46
  30. package/src/dialog/builders/radio-builder.ts +42 -42
  31. package/src/dialog/builders/slider-builder.ts +39 -22
  32. package/src/dialog/builders/splitter-builder.ts +88 -88
  33. package/src/dialog/builders/tab-builder.ts +120 -106
  34. package/src/dialog/builders/widget-builder.ts +136 -124
  35. package/src/dialog/builders/widgets-builder.ts +140 -135
  36. package/src/dialog/input-dialog.ts +30 -27
  37. package/src/dialog/input-validator.ts +8 -8
  38. package/src/dialog/selection-dialog.ts +47 -0
  39. package/src/dialog/shared.ts +8 -8
  40. package/src/helpers/action-helper.ts +214 -81
  41. package/src/helpers/array-helper.ts +170 -145
  42. package/src/helpers/camera-helper.ts +12 -12
  43. package/src/helpers/custom-action-helper.ts +176 -176
  44. package/src/helpers/directory-helper.ts +14 -0
  45. package/src/helpers/file-helper.ts +90 -90
  46. package/src/helpers/http-helper.ts +190 -0
  47. package/src/helpers/input-helper.ts +18 -18
  48. package/src/helpers/list-view-helper.ts +105 -89
  49. package/src/helpers/menu-helper.ts +28 -28
  50. package/src/helpers/message-box-helper.ts +25 -15
  51. package/src/helpers/node-helper.ts +461 -236
  52. package/src/helpers/number-helper.ts +10 -10
  53. package/src/helpers/numeric-property-helper.ts +91 -91
  54. package/src/helpers/object-helper.ts +2 -2
  55. package/src/helpers/pane-helper.ts +28 -20
  56. package/src/helpers/progress-helper.ts +51 -33
  57. package/src/helpers/property-helper.ts +61 -52
  58. package/src/helpers/record-helper.ts +16 -16
  59. package/src/helpers/scene-helper.ts +144 -94
  60. package/src/helpers/script-helper.ts +15 -15
  61. package/src/helpers/skeleton-helper.ts +26 -26
  62. package/src/helpers/splitter-helper.ts +8 -8
  63. package/src/helpers/string-helper.ts +39 -31
  64. package/src/helpers/surface-helper.ts +5 -5
  65. package/src/helpers/undo-helper.ts +8 -8
  66. package/src/helpers/viewport-helper.ts +21 -8
  67. package/src/lib/delayed.ts +38 -38
  68. package/src/lib/dictionary.ts +3 -0
  69. package/src/lib/frame-keys.ts +67 -67
  70. package/src/lib/guid.ts +2 -2
  71. package/src/lib/menu-item.ts +10 -9
  72. package/src/lib/observable.ts +147 -94
  73. package/src/lib/set.ts +50 -25
  74. package/src/lib/settings.ts +112 -104
  75. package/src/lib/tree-node.ts +149 -145
  76. package/src/samples/config.ts +2 -2
  77. package/src/samples/hello-world.dsa.ts +12 -12
  78. package/src/samples/sample-dialog.dsa.ts +51 -51
  79. package/src/samples/sample-dialog.ts +48 -48
  80. package/src/shared/set-keyboard-shortcut.ts +146 -102
  81. package/tsconfig.json +116 -116
  82. package/webpack.config.js +70 -70
@@ -1,185 +1,185 @@
1
- const tsFileParser = require('ts-file-parser');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const glob = require('glob');
5
- const { program } = require('commander');
6
-
7
- program
8
- .requiredOption(
9
- '-p, --scriptsPath <path>',
10
- 'Specify the path to your scripts'
11
- )
12
- .option(
13
- '-m, --defaultMenuPath [path]',
14
- 'Specify the default menu path',
15
- 'My Scripts'
16
- )
17
- .parse(process.argv);
18
- let options = program.opts();
19
-
20
- const nameofActionDecorator = 'action';
21
-
22
- const scriptsPath = options.scriptsPath.endsWith('/')
23
- ? options.scriptsPath
24
- : options.scriptsPath + '/';
25
- const defaultMenuPath = options.defaultMenuPath.endsWith('/')
26
- ? options.defaultMenuPath
27
- : options.defaultMenuPath + '/';
28
-
29
- const container = { scripts: [] };
30
-
31
- function getPartialPath(filePath) {
32
- const fileInfo = path.parse(filePath);
33
- const dir = fileInfo.dir.replace('/src', '').replace(/^\.\//, '');
34
- return `${dir}/${fileInfo.name}`;
35
- }
36
-
37
- function compareStrings(a, b) {
38
- return a.localeCompare(b, undefined, { sensitivity: 'base' });
39
- }
40
-
41
- function stringOrDefault(str, defaultValue) {
42
- return str !== undefined && str !== null && str !== '' ? str : defaultValue;
43
- }
44
-
45
- function generateInstallerTemplate(data) {
46
- return `
47
- import { installCustomActions as install } from '@dsf/helpers/custom-action-helper';
48
-
49
- install(${data});
50
- `;
51
- }
52
-
53
- function generateUninstallerTemplate(data) {
54
- return `
55
- import { uninstallCustomActions as uninstall } from '@dsf/helpers/custom-action-helper';
56
-
57
- uninstall(${data});
58
- `;
59
- }
60
-
61
- function processScript(filePath) {
62
- const fileInfo = path.parse(filePath);
63
- const content = fs.readFileSync(filePath, 'utf-8').toString();
64
- const json = tsFileParser.parseStruct(content, {}, filePath);
65
-
66
- json.classes.forEach((cls) => {
67
- const actionDecorator = cls.decorators.find(
68
- (d) => d.name === nameofActionDecorator
69
- );
70
-
71
- if (!actionDecorator) return;
72
-
73
- const decorator = actionDecorator.arguments[0] ?? {};
74
-
75
- const script = {
76
- name: null,
77
- text: fileInfo.name.replace('.dsa', ''),
78
- filePath:
79
- decorator.bundle === undefined
80
- ? getPartialPath(filePath)
81
- : fileInfo.name.replace('.ts', ''),
82
- menuPath: `${defaultMenuPath}${path.parse(getPartialPath(filePath)).dir}`,
83
- description: fileInfo.name.replace('.dsa', ''),
84
- group: stringOrDefault(decorator.group, undefined),
85
- shortcut: stringOrDefault(decorator.shortcut),
86
- toolbar: stringOrDefault(decorator.toolbar, undefined),
87
- };
88
-
89
- const icon = filePath.replace('.ts', '.png');
90
- if (fs.existsSync(icon)) {
91
- script.icon =
92
- decorator.bundle === undefined
93
- ? `${getPartialPath(filePath)}.png`
94
- : fileInfo.name.replace('.dsa', '.dsa.png');
95
- }
96
-
97
- if (actionDecorator) {
98
- script.text = stringOrDefault(decorator.text, script.text);
99
- if (typeof decorator.menuPath === 'boolean') {
100
- script.menuPath = decorator.menuPath === true ? script.menuPath : '';
101
- } else {
102
- script.menuPath = stringOrDefault(decorator.menuPath, script.menuPath);
103
- }
104
- script.menuPath = script.menuPath.replace(
105
- '#{defaultMenuPath}',
106
- defaultMenuPath
107
- );
108
- script.shortcut = decorator.shortcut;
109
- }
110
-
111
- console.log(`Adding script: ${script.text}`, script);
112
- container.scripts.push(script);
113
-
114
- // Check if the decorator has a "bundle" property
115
- if (decorator.bundle !== undefined) {
116
- let packageInstallerFilePath = `Install.dsa.ts`;
117
- let packageUninstallerFilePath = `Uninstall.dsa.ts`;
118
-
119
- if (decorator.bundle !== true) {
120
- // If decorator.bundle is a string, use it as the bundle file name
121
- packageInstallerFilePath = `Install ${decorator.bundle}.dsa.ts`;
122
- packageUninstallerFilePath = `Uninstall ${decorator.bundle}.dsa.ts`;
123
- }
124
-
125
- // Generate a separate file with the specified or default name
126
- let bundleScriptContent = generateInstallerTemplate(
127
- JSON.stringify(container.scripts, null, 4)
128
- );
129
- let bundleScriptFilePath = path.join(
130
- path.parse(filePath).dir,
131
- packageInstallerFilePath
132
- );
133
- fs.writeFileSync(bundleScriptFilePath, bundleScriptContent);
134
-
135
- bundleScriptContent = generateUninstallerTemplate(
136
- JSON.stringify(container.scripts, null, 4)
137
- );
138
- bundleScriptFilePath = path.join(
139
- path.parse(filePath).dir,
140
- packageUninstallerFilePath
141
- );
142
- fs.writeFileSync(bundleScriptFilePath, bundleScriptContent);
143
- }
144
- });
145
- }
146
-
147
- function processScripts(paths) {
148
- paths.forEach((filePath) => {
149
- console.log(`Processing ${filePath}`);
150
- processScript(filePath);
151
- });
152
- }
153
-
154
- function generate() {
155
- glob(`${scriptsPath}/**/*.dsa.ts`, function (err, paths) {
156
- if (err) {
157
- console.error('Error while globbing:', err);
158
- return;
159
- }
160
-
161
- processScripts(paths);
162
-
163
- container.scripts = container.scripts.sort((a, b) => {
164
- const aKey = a.menuPath + a.filePath;
165
- const bKey = b.menuPath + b.filePath;
166
- return compareStrings(aKey, bKey);
167
- });
168
-
169
- // Generate the InstallerScript class and call install function
170
- const installerScriptContent = generateInstallerTemplate(
171
- JSON.stringify(container.scripts, null, 4)
172
- );
173
- let outputFilePath = './src/Install.dsa.ts';
174
- fs.writeFileSync(outputFilePath, installerScriptContent);
175
-
176
- const uninstallerScriptContent = generateUninstallerTemplate(
177
- JSON.stringify(container.scripts, null, 4)
178
- );
179
- outputFilePath = './src/Uninstall.dsa.ts';
180
- fs.writeFileSync(outputFilePath, uninstallerScriptContent);
181
- });
182
- }
183
-
184
- // Call the generate function at the end of the script
185
- generate();
1
+ const tsFileParser = require('ts-file-parser');
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const glob = require('glob');
5
+ const { program } = require('commander');
6
+
7
+ program
8
+ .requiredOption(
9
+ '-p, --scriptsPath <path>',
10
+ 'Specify the path to your scripts'
11
+ )
12
+ .option(
13
+ '-m, --defaultMenuPath [path]',
14
+ 'Specify the default menu path',
15
+ 'My Scripts'
16
+ )
17
+ .parse(process.argv);
18
+ let options = program.opts();
19
+
20
+ const nameofActionDecorator = 'action';
21
+
22
+ const scriptsPath = options.scriptsPath.endsWith('/')
23
+ ? options.scriptsPath
24
+ : options.scriptsPath + '/';
25
+ const defaultMenuPath = options.defaultMenuPath.endsWith('/')
26
+ ? options.defaultMenuPath
27
+ : options.defaultMenuPath + '/';
28
+
29
+ const container = { scripts: [] };
30
+
31
+ function getPartialPath(filePath) {
32
+ const fileInfo = path.parse(filePath);
33
+ const dir = fileInfo.dir.replace('/src', '').replace(/^\.\//, '');
34
+ return `${dir}/${fileInfo.name}`;
35
+ }
36
+
37
+ function compareStrings(a, b) {
38
+ return a.localeCompare(b, undefined, { sensitivity: 'base' });
39
+ }
40
+
41
+ function stringOrDefault(str, defaultValue) {
42
+ return str !== undefined && str !== null && str !== '' ? str : defaultValue;
43
+ }
44
+
45
+ function generateInstallerTemplate(data) {
46
+ return `
47
+ import { installCustomActions as install } from '@dsf/helpers/custom-action-helper';
48
+
49
+ install(${data});
50
+ `;
51
+ }
52
+
53
+ function generateUninstallerTemplate(data) {
54
+ return `
55
+ import { uninstallCustomActions as uninstall } from '@dsf/helpers/custom-action-helper';
56
+
57
+ uninstall(${data});
58
+ `;
59
+ }
60
+
61
+ function processScript(filePath) {
62
+ const fileInfo = path.parse(filePath);
63
+ const content = fs.readFileSync(filePath, 'utf-8').toString();
64
+ const json = tsFileParser.parseStruct(content, {}, filePath);
65
+
66
+ json.classes.forEach((cls) => {
67
+ const actionDecorator = cls.decorators.find(
68
+ (d) => d.name === nameofActionDecorator
69
+ );
70
+
71
+ if (!actionDecorator) return;
72
+
73
+ const decorator = actionDecorator.arguments[0] ?? {};
74
+
75
+ const script = {
76
+ name: null,
77
+ text: fileInfo.name.replace('.dsa', ''),
78
+ filePath:
79
+ decorator.bundle === undefined
80
+ ? getPartialPath(filePath)
81
+ : fileInfo.name.replace('.ts', ''),
82
+ menuPath: `${defaultMenuPath}${path.parse(getPartialPath(filePath)).dir}`,
83
+ description: fileInfo.name.replace('.dsa', ''),
84
+ group: stringOrDefault(decorator.group, undefined),
85
+ shortcut: stringOrDefault(decorator.shortcut),
86
+ toolbar: stringOrDefault(decorator.toolbar, undefined),
87
+ };
88
+
89
+ const icon = filePath.replace('.ts', '.png');
90
+ if (fs.existsSync(icon)) {
91
+ script.icon =
92
+ decorator.bundle === undefined
93
+ ? `${getPartialPath(filePath)}.png`
94
+ : fileInfo.name.replace('.dsa', '.dsa.png');
95
+ }
96
+
97
+ if (actionDecorator) {
98
+ script.text = stringOrDefault(decorator.text, script.text);
99
+ if (typeof decorator.menuPath === 'boolean') {
100
+ script.menuPath = decorator.menuPath === true ? script.menuPath : '';
101
+ } else {
102
+ script.menuPath = stringOrDefault(decorator.menuPath, script.menuPath);
103
+ }
104
+ script.menuPath = script.menuPath.replace(
105
+ '#{defaultMenuPath}',
106
+ defaultMenuPath
107
+ );
108
+ script.shortcut = decorator.shortcut;
109
+ }
110
+
111
+ console.log(`Adding script: ${script.text}`, script);
112
+ container.scripts.push(script);
113
+
114
+ // Check if the decorator has a "bundle" property
115
+ if (decorator.bundle !== undefined) {
116
+ let packageInstallerFilePath = `Install.dsa.ts`;
117
+ let packageUninstallerFilePath = `Uninstall.dsa.ts`;
118
+
119
+ if (decorator.bundle !== true) {
120
+ // If decorator.bundle is a string, use it as the bundle file name
121
+ packageInstallerFilePath = `Install ${decorator.bundle}.dsa.ts`;
122
+ packageUninstallerFilePath = `Uninstall ${decorator.bundle}.dsa.ts`;
123
+ }
124
+
125
+ // Generate a separate file with the specified or default name
126
+ let bundleScriptContent = generateInstallerTemplate(
127
+ JSON.stringify(container.scripts, null, 4)
128
+ );
129
+ let bundleScriptFilePath = path.join(
130
+ path.parse(filePath).dir,
131
+ packageInstallerFilePath
132
+ );
133
+ fs.writeFileSync(bundleScriptFilePath, bundleScriptContent);
134
+
135
+ bundleScriptContent = generateUninstallerTemplate(
136
+ JSON.stringify(container.scripts, null, 4)
137
+ );
138
+ bundleScriptFilePath = path.join(
139
+ path.parse(filePath).dir,
140
+ packageUninstallerFilePath
141
+ );
142
+ fs.writeFileSync(bundleScriptFilePath, bundleScriptContent);
143
+ }
144
+ });
145
+ }
146
+
147
+ function processScripts(paths) {
148
+ paths.forEach((filePath) => {
149
+ console.log(`Processing ${filePath}`);
150
+ processScript(filePath);
151
+ });
152
+ }
153
+
154
+ function generate() {
155
+ glob(`${scriptsPath}/**/*.dsa.ts`, function (err, paths) {
156
+ if (err) {
157
+ console.error('Error while globbing:', err);
158
+ return;
159
+ }
160
+
161
+ processScripts(paths);
162
+
163
+ container.scripts = container.scripts.sort((a, b) => {
164
+ const aKey = a.menuPath + a.filePath;
165
+ const bKey = b.menuPath + b.filePath;
166
+ return compareStrings(aKey, bKey);
167
+ });
168
+
169
+ // Generate the InstallerScript class and call install function
170
+ const installerScriptContent = generateInstallerTemplate(
171
+ JSON.stringify(container.scripts, null, 4)
172
+ );
173
+ let outputFilePath = './src/Install.dsa.ts';
174
+ fs.writeFileSync(outputFilePath, installerScriptContent);
175
+
176
+ const uninstallerScriptContent = generateUninstallerTemplate(
177
+ JSON.stringify(container.scripts, null, 4)
178
+ );
179
+ outputFilePath = './src/Uninstall.dsa.ts';
180
+ fs.writeFileSync(outputFilePath, uninstallerScriptContent);
181
+ });
182
+ }
183
+
184
+ // Call the generate function at the end of the script
185
+ generate();
package/package.json CHANGED
@@ -1,70 +1,72 @@
1
- {
2
- "name": "dazscript-framework",
3
- "version": "0.1.15",
4
- "author": "Freddy Diaz",
5
- "license": "MPL-2.0",
6
- "description": "",
7
- "scripts": {
8
- "prebuild": "npm run installer",
9
- "build": "webpack --env outputPath=./out",
10
- "postbuild": "npm run icons",
11
- "watch": "webpack --env outputPath=./out --watch",
12
- "icons": "copyfiles -u 1 src/**/*.png out/",
13
- "installer": "node ./dist/scripts/install-generator.js -p ./src/samples -m /DazScriptFramework"
14
- },
15
- "keywords": [
16
- "daz3d",
17
- "daz studio",
18
- "daz script",
19
- "dson",
20
- "dsa",
21
- "dse"
22
- ],
23
- "exports": {
24
- "./webpack": "./webpack.config.js",
25
- "./babel": "./babel.config.js",
26
- "./babel/trace-babel-plugin": "./dist/babel/trace-babel-plugin.js",
27
- "./babel/trace-log-babel-plugin": "./dist/babel/trace-log-babel-plugin.js"
28
- },
29
- "files": [
30
- "tsconfig.json",
31
- "webpack.config.js",
32
- "babel.config.js",
33
- "dist/**/*",
34
- "src/**/*"
35
- ],
36
- "repository": {
37
- "type": "git",
38
- "url": "https://github.com/fjdiazt/dazscript-framework"
39
- },
40
- "peerDependencies": {
41
- "@babel/core": "^7.23.2",
42
- "@babel/plugin-proposal-class-properties": "^7.18.6",
43
- "@babel/plugin-proposal-decorators": "^7.23.2",
44
- "@babel/plugin-transform-arrow-functions": "^7.22.5",
45
- "@babel/plugin-transform-block-scoping": "^7.23.0",
46
- "@babel/preset-env": "^7.23.2",
47
- "@babel/preset-typescript": "^7.23.2",
48
- "@babel/types": "^7.26.3",
49
- "babel-core": "^6.26.3",
50
- "babel-loader": "^9.1.3",
51
- "babel-loader-exclude-node-modules-except": "^1.2.1",
52
- "babel-plugin-transform-class-properties": "^6.24.1",
53
- "babel-plugin-transform-typescript-metadata": "^0.3.2",
54
- "commander": "^11.1.0",
55
- "cross-env": "^7.0.3",
56
- "dazscript-types": "^0.2.0",
57
- "glob": "^7.2.0",
58
- "ts-file-parser": "^0.0.21",
59
- "ts-loader": "^9.5.0",
60
- "tsconfig-paths-webpack-plugin": "^4.1.0",
61
- "typescript": "^5.2.2",
62
- "webpack": "^5.88.2",
63
- "webpack-cli": "^5.1.4"
64
- },
65
- "devDependencies": {
66
- "@types/node": "^22.10.5",
67
- "eslint": "^9.17.0",
68
- "typescript": "^5.7.3"
69
- }
70
- }
1
+ {
2
+ "name": "dazscript-framework",
3
+ "version": "0.1.17",
4
+ "author": "Freddy Diaz",
5
+ "license": "MPL-2.0",
6
+ "description": "",
7
+ "scripts": {
8
+ "prepare": "node ./scripts/install-git-hooks.js",
9
+ "prebuild": "npm run installer",
10
+ "build": "webpack --env outputPath=./out",
11
+ "postbuild": "npm run icons",
12
+ "watch": "webpack --env outputPath=./out --watch",
13
+ "icons": "copyfiles -u 1 src/**/*.png out/",
14
+ "installer": "node ./dist/scripts/install-generator.js -p ./src/samples -m /DazScriptFramework"
15
+ },
16
+ "keywords": [
17
+ "daz3d",
18
+ "daz studio",
19
+ "daz script",
20
+ "dson",
21
+ "dsa",
22
+ "dse"
23
+ ],
24
+ "exports": {
25
+ "./webpack": "./webpack.config.js",
26
+ "./babel": "./babel.config.js",
27
+ "./babel/trace-babel-plugin": "./dist/babel/trace-babel-plugin.js",
28
+ "./babel/trace-log-babel-plugin": "./dist/babel/trace-log-babel-plugin.js"
29
+ },
30
+ "files": [
31
+ "tsconfig.json",
32
+ "webpack.config.js",
33
+ "babel.config.js",
34
+ "dist/**/*",
35
+ "src/**/*"
36
+ ],
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/fjdiazt/dazscript-framework.git"
40
+ },
41
+ "peerDependencies": {
42
+ "@babel/core": "^7.23.2",
43
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
44
+ "@babel/plugin-proposal-decorators": "^7.23.2",
45
+ "@babel/plugin-transform-arrow-functions": "^7.22.5",
46
+ "@babel/plugin-transform-block-scoping": "^7.23.0",
47
+ "@babel/preset-env": "^7.23.2",
48
+ "@babel/preset-typescript": "^7.23.2",
49
+ "@babel/types": "^7.26.3",
50
+ "babel-core": "^6.26.3",
51
+ "babel-loader": "^9.1.3",
52
+ "babel-loader-exclude-node-modules-except": "^1.2.1",
53
+ "babel-plugin-transform-class-properties": "^6.24.1",
54
+ "babel-plugin-transform-typescript-metadata": "^0.3.2",
55
+ "commander": "^11.1.0",
56
+ "cross-env": "^7.0.3",
57
+ "dazscript-types": "^0.2.3",
58
+ "glob": "^7.2.0",
59
+ "ts-file-parser": "^0.0.21",
60
+ "ts-loader": "^9.5.0",
61
+ "tsconfig-paths-webpack-plugin": "^4.1.0",
62
+ "typescript": "^5.2.2",
63
+ "webpack": "^5.88.2",
64
+ "webpack-cli": "^5.1.4"
65
+ },
66
+ "devDependencies": {
67
+ "@types/node": "^22.10.5",
68
+ "copyfiles": "^2.4.1",
69
+ "eslint": "^9.17.0",
70
+ "typescript": "^5.7.3"
71
+ }
72
+ }