@raisenow/tamaro-cli 1.2.0 → 1.3.0

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 (72) hide show
  1. package/.history/.nvmrc_20250729181039 +1 -0
  2. package/.history/{CHANGELOG_20250625142901.md → CHANGELOG_20250729195139.md} +6 -0
  3. package/.history/{CHANGELOG_20250624055156.md → CHANGELOG_20250729195148.md} +10 -4
  4. package/.history/{CHANGELOG_20250625142902.md → CHANGELOG_20250729195156.md} +6 -0
  5. package/.history/CHANGELOG_20250729195218.md +29 -0
  6. package/.history/{CHANGELOG_20250625142852.md → CHANGELOG_20250729195223.md} +4 -2
  7. package/.history/CHANGELOG_20250729195506.md +29 -0
  8. package/.history/CHANGELOG_20250729224404.md +30 -0
  9. package/.history/CHANGELOG_20250729224411.md +30 -0
  10. package/.history/CHANGELOG_20250730124538.md +41 -0
  11. package/.history/CHANGELOG_20250730124603.md +38 -0
  12. package/.history/CHANGELOG_20250730124627.md +36 -0
  13. package/.history/CHANGELOG_20250730124638.md +36 -0
  14. package/.history/CHANGELOG_20250730124640.md +36 -0
  15. package/.history/bitbucket-pipelines_20250729111540.yml +46 -0
  16. package/.history/bitbucket-pipelines_20250729210338.yml +46 -0
  17. package/.history/bitbucket-pipelines_20250729210340.yml +46 -0
  18. package/.history/bitbucket-pipelines_20250729210342.yml +46 -0
  19. package/.history/bitbucket-pipelines_20250729222234.yml +47 -0
  20. package/.history/bitbucket-pipelines_20250729222554.yml +47 -0
  21. package/.history/bitbucket-pipelines_20250729222555.yml +47 -0
  22. package/.history/bitbucket-pipelines_20250729223022.yml +46 -0
  23. package/.history/bitbucket-pipelines_20250729223024.yml +46 -0
  24. package/.history/{package_20241125103106.json → package_20250729182417.json} +22 -16
  25. package/.history/{package_20241125013249.json → package_20250729182419.json} +23 -18
  26. package/.history/{package_20241125014402.json → package_20250729182618.json} +21 -16
  27. package/.history/{package_20241125013228.json → package_20250729182834.json} +25 -21
  28. package/.history/{package_20241107125521.json → package_20250729183032.json} +38 -34
  29. package/.history/package_20250729183033.json +110 -0
  30. package/.history/package_20250729185750.json +110 -0
  31. package/.history/package_20250729185815.json +110 -0
  32. package/.history/package_20250729185846.json +110 -0
  33. package/.history/package_20250729185854.json +110 -0
  34. package/.history/package_20250729185943.json +110 -0
  35. package/.history/package_20250729190645.json +110 -0
  36. package/.history/package_20250729195934.json +110 -0
  37. package/.history/package_20250729200013.json +110 -0
  38. package/.history/package_20250729200056.json +110 -0
  39. package/.history/package_20250729200434.json +110 -0
  40. package/.history/package_20250729200808.json +110 -0
  41. package/.history/package_20250729200944.json +110 -0
  42. package/.history/package_20250729214420.json +114 -0
  43. package/.history/{package_20241107124611.json → package_20250729223112.json} +49 -45
  44. package/.history/package_20250729223127.json +110 -0
  45. package/.history/package_20250729223134.json +110 -0
  46. package/.history/package_20250730124647.json +114 -0
  47. package/.history/vitest.config_20250729214539.ts +0 -0
  48. package/.history/vitest.config_20250729214659.ts +24 -0
  49. package/.history/vitest.config_20250729214748.ts +21 -0
  50. package/.history/vitest.config_20250729214825.ts +21 -0
  51. package/.history/vitest.config_20250729214902.ts +21 -0
  52. package/.history/vitest.config_20250729222125.ts +20 -0
  53. package/.history/vitest.config_20250729222213.ts +20 -0
  54. package/.nvmrc +1 -1
  55. package/bitbucket-pipelines.yml +6 -2
  56. package/dist/{chunk-KVWFHWZD.js → chunk-H4BMVFM6.js} +2 -2
  57. package/dist/cli.js +156 -59
  58. package/dist/webpack.config.js +1 -1
  59. package/package.json +51 -46
  60. package/vitest.config.ts +20 -0
  61. package/.history/.nvmrc_20241125012803 +0 -1
  62. package/.history/.nvmrc_20241125022800 +0 -1
  63. package/.history/.nvmrc_20241125022806 +0 -1
  64. package/.history/CHANGELOG_20250624052910.md +0 -20
  65. package/.history/CHANGELOG_20250624055058.md +0 -23
  66. package/.history/CHANGELOG_20250624055107.md +0 -23
  67. package/.history/CHANGELOG_20250624055138.md +0 -23
  68. package/.history/CHANGELOG_20250624055200.md +0 -23
  69. package/.history/CHANGELOG_20250624055203.md +0 -23
  70. package/.history/package_20241107122123.json +0 -106
  71. package/.history/package_20241107122219.json +0 -106
  72. package/.history/package_20241107125538.json +0 -106
@@ -0,0 +1,114 @@
1
+ {
2
+ "name": "@raisenow/tamaro-cli",
3
+ "version": "1.3.0",
4
+ "author": {
5
+ "name": "RaiseNow",
6
+ "email": "development@raisenow.com"
7
+ },
8
+ "type": "module",
9
+ "bin": "dist/cli.js",
10
+ "packageManager": "pnpm@10.13.1",
11
+ "engines": {
12
+ "node": ">=22",
13
+ "pnpm": ">= 10",
14
+ "npm": "please-use-pnpm",
15
+ "yarn": "please-use-pnpm"
16
+ },
17
+ "scripts": {
18
+ "prepare": "pnpm build",
19
+ "typecheck": "tsc --noEmit",
20
+ "build": "tsup src/cli.ts src/webpack.config.ts --clean --shims --format esm",
21
+ "build:watch": "pnpm build --watch --ignore-watch .history --ignore-watch .idea",
22
+ "readme": "pnpx http-server . --cors -o /readme.html",
23
+ "lint": "DEBUG=eslint:cli-engine eslint .",
24
+ "lint:fix": "DEBUG=eslint:cli-engine eslint --fix .",
25
+ "format": "prettier --write .",
26
+ "test": "vitest",
27
+ "test:watch": "vitest --watch",
28
+ "test:coverage": "vitest --coverage"
29
+ },
30
+ "dependencies": {
31
+ "@babel/cli": "^7.28.0",
32
+ "@babel/core": "^7.28.0",
33
+ "@babel/plugin-proposal-decorators": "^7.28.0",
34
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
35
+ "@babel/plugin-transform-runtime": "^7.28.0",
36
+ "@babel/preset-env": "^7.28.0",
37
+ "@babel/preset-react": "^7.27.1",
38
+ "@babel/preset-typescript": "^7.27.1",
39
+ "@babel/runtime-corejs3": "^7.28.2",
40
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.6.1",
41
+ "@statoscope/webpack-plugin": "^5.29.0",
42
+ "@types/columnify": "^1.5.4",
43
+ "@types/handlebars-helpers": "^0.5.6",
44
+ "@types/lodash": "^4.17.20",
45
+ "@types/node": "^22.17.0",
46
+ "@types/node-notifier": "^8.0.5",
47
+ "@types/prompts": "^2.4.9",
48
+ "@types/resolve-bin": "^0.4.3",
49
+ "@types/webpack-config-utils": "^2.3.4",
50
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
51
+ "@typescript-eslint/parser": "^7.18.0",
52
+ "autoprefixer": "^10.4.21",
53
+ "babel-loader": "^10.0.0",
54
+ "babel-plugin-istanbul": "^7.0.0",
55
+ "babel-plugin-lodash": "^3.3.4",
56
+ "chalk": "^5.4.1",
57
+ "clean-webpack-plugin": "^4.0.0",
58
+ "columnify": "^1.6.0",
59
+ "commander": "^14.0.0",
60
+ "copy-webpack-plugin": "^13.0.0",
61
+ "core-js": "^3.44.0",
62
+ "css-loader": "^7.1.2",
63
+ "css-minimizer-webpack-plugin": "^7.0.2",
64
+ "dotenv": "^17.2.1",
65
+ "escape-string-regexp": "^5.0.0",
66
+ "eslint": "^8.57.1",
67
+ "eslint-config-prettier": "^10.1.8",
68
+ "eslint-import-resolver-typescript": "^3.6.3",
69
+ "eslint-plugin-deprecation": "^3.0.0",
70
+ "eslint-plugin-import": "^2.32.0",
71
+ "eslint-plugin-markdownlint": "^0.9.0",
72
+ "eslint-plugin-promise": "^7.2.1",
73
+ "eslint-plugin-unused-imports": "^3.2.0",
74
+ "eslint-plugin-yml": "^1.18.0",
75
+ "eslint-webpack-plugin": "^4.2.0",
76
+ "execa": "^9.6.0",
77
+ "file-loader": "^6.2.0",
78
+ "fork-ts-checker-webpack-plugin": "^9.1.0",
79
+ "glob": "^11.0.3",
80
+ "handlebars": "^4.7.8",
81
+ "handlebars-helpers": "^0.10.0",
82
+ "html-loader": "^5.1.0",
83
+ "html-webpack-plugin": "^5.6.3",
84
+ "json-loader": "^0.5.7",
85
+ "lodash": "^4.17.21",
86
+ "mini-css-extract-plugin": "^2.9.2",
87
+ "node-notifier": "^10.0.1",
88
+ "portfinder": "^1.0.37",
89
+ "postcss": "^8.5.6",
90
+ "postcss-custom-properties": "^14.0.6",
91
+ "postcss-import": "^16.1.1",
92
+ "postcss-loader": "^8.1.1",
93
+ "postcss-nested": "^7.0.2",
94
+ "prettier": "^3.6.2",
95
+ "prompts": "^2.4.2",
96
+ "react-refresh": "^0.17.0",
97
+ "resolve-url-loader": "^5.0.0",
98
+ "sass": "^1.89.2",
99
+ "sass-loader": "^16.0.5",
100
+ "source-map-loader": "^5.0.0",
101
+ "strip-indent": "^4.0.0",
102
+ "style-loader": "^4.0.0",
103
+ "tsconfig-paths-webpack-plugin": "^4.2.0",
104
+ "tsup": "^8.5.0",
105
+ "typescript": "^5.8.3",
106
+ "url-loader": "^4.1.1",
107
+ "vitest": "^3.2.4",
108
+ "webpack": "^5.101.0",
109
+ "webpack-cli": "^6.0.1",
110
+ "webpack-config-utils": "^2.3.1",
111
+ "webpack-dev-server": "^5.2.2",
112
+ "yaml-loader": "^0.8.1"
113
+ }
114
+ }
File without changes
@@ -0,0 +1,24 @@
1
+ import {defineConfig} from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ watch: false,
6
+ globals: true,
7
+ environment: 'jsdom',
8
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
9
+ setupFiles: 'test-setup.ts',
10
+ reporters: ['default'],
11
+ coverage: {
12
+ provider: 'v8',
13
+ exclude: [
14
+ 'dist/**',
15
+ '.eslintrc.cjs',
16
+ '.prettierrc.cjs',
17
+ 'env.ts',
18
+ 'global.d.ts',
19
+ 'vite.config.ts',
20
+ 'src/index.tsx',
21
+ ],
22
+ },
23
+ },
24
+ })
@@ -0,0 +1,21 @@
1
+ import {defineConfig} from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ watch: false,
6
+ globals: true,
7
+ environment: 'jsdom',
8
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
9
+ setupFiles: 'test-setup.ts',
10
+ reporters: ['default'],
11
+ coverage: {
12
+ provider: 'v8',
13
+ exclude: [
14
+ 'dist/**',
15
+ '.eslintrc.cjs',
16
+ '.prettierrc.cjs',
17
+ 'vitest.config.ts',
18
+ ],
19
+ },
20
+ },
21
+ })
@@ -0,0 +1,21 @@
1
+ import {defineConfig} from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ watch: false,
6
+ globals: true,
7
+ environment: 'jsdom',
8
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
9
+ // setupFiles: 'test-setup.ts',
10
+ reporters: ['default'],
11
+ coverage: {
12
+ provider: 'v8',
13
+ exclude: [
14
+ 'dist/**',
15
+ '.eslintrc.cjs',
16
+ '.prettierrc.cjs',
17
+ 'vitest.config.ts',
18
+ ],
19
+ },
20
+ },
21
+ })
@@ -0,0 +1,21 @@
1
+ import {defineConfig} from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ watch: false,
6
+ globals: true,
7
+ environment: 'node',
8
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
9
+ // setupFiles: 'test-setup.ts',
10
+ reporters: ['default'],
11
+ coverage: {
12
+ provider: 'v8',
13
+ exclude: [
14
+ 'dist/**',
15
+ '.eslintrc.cjs',
16
+ '.prettierrc.cjs',
17
+ 'vitest.config.ts',
18
+ ],
19
+ },
20
+ },
21
+ })
@@ -0,0 +1,20 @@
1
+ import {defineConfig} from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ watch: false,
6
+ globals: true,
7
+ environment: 'node',
8
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
9
+ reporters: ['default'],
10
+ coverage: {
11
+ provider: 'v8',
12
+ exclude: [
13
+ 'dist/**',
14
+ '.eslintrc.cjs',
15
+ '.prettierrc.cjs',
16
+ 'vitest.config.ts',
17
+ ],
18
+ },
19
+ },
20
+ })
@@ -0,0 +1,20 @@
1
+ import {defineConfig} from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ watch: false,
6
+ globals: true,
7
+ environment: 'node',
8
+ include: ['{src,tests}/**/*.{test,spec}.{ts,tsx}'],
9
+ reporters: ['default'],
10
+ coverage: {
11
+ provider: 'v8',
12
+ exclude: [
13
+ 'dist/**',
14
+ '.eslintrc.cjs',
15
+ '.prettierrc.cjs',
16
+ 'vitest.config.ts',
17
+ ],
18
+ },
19
+ },
20
+ })
package/.nvmrc CHANGED
@@ -1 +1 @@
1
- v22.11.0
1
+ v22.17.1
@@ -1,4 +1,4 @@
1
- image: node:20.18
1
+ image: node:22
2
2
 
3
3
  definitions:
4
4
  caches:
@@ -35,7 +35,11 @@ definitions:
35
35
  script:
36
36
  - *initialize
37
37
  - pnpm lint
38
- - pnpm tscheck
38
+ - pnpm typecheck
39
+ - pnpm test
40
+ # Do not bother for dev deps
41
+ # @see https://raisenow.atlassian.net/wiki/spaces/PD/pages/5680037889/TP+RFC+014+-+Unsafe+Outdated+Libraries+Upgrades#Regular-upgrade-of-NPM-libraries-versions
42
+ - pnpm audit --audit-level=critical --prod
39
43
 
40
44
  pipelines:
41
45
  default:
@@ -1,6 +1,6 @@
1
- // node_modules/.pnpm/tsup@8.3.5_jiti@1.21.0_postcss@8.4.49_tsx@4.19.1_typescript@5.7.2/node_modules/tsup/assets/esm_shims.js
2
- import { fileURLToPath } from "url";
1
+ // node_modules/.pnpm/tsup@8.5.0_jiti@1.21.0_postcss@8.5.6_tsx@4.19.1_typescript@5.8.3/node_modules/tsup/assets/esm_shims.js
3
2
  import path from "path";
3
+ import { fileURLToPath } from "url";
4
4
  var getFilename = () => fileURLToPath(import.meta.url);
5
5
  var getDirname = () => path.dirname(getFilename());
6
6
  var __dirname = /* @__PURE__ */ getDirname();
package/dist/cli.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  resolveBin,
23
23
  resolveOwn,
24
24
  runCommandSync
25
- } from "./chunk-KVWFHWZD.js";
25
+ } from "./chunk-H4BMVFM6.js";
26
26
 
27
27
  // src/cli.ts
28
28
  import { createCommand } from "commander";
@@ -31,31 +31,121 @@ import { createCommand } from "commander";
31
31
  import { glob } from "glob";
32
32
 
33
33
  // src/lib/validators/validateEmailTemplates.ts
34
- import fs from "node:fs/promises";
35
- import handlebars from "handlebars";
36
- var { compile } = handlebars;
37
- var validateEmailTemplates = async (templateFiles) => {
34
+ import fs from "fs";
35
+ import Handlebars from "handlebars";
36
+ import helpers from "handlebars-helpers";
37
+ helpers.comparison({
38
+ handlebars: Handlebars
39
+ });
40
+ var validateEmailTemplates = (templatePaths) => {
38
41
  const errors = [];
39
- for (const templateFile of templateFiles) {
42
+ for (const templatePath of templatePaths) {
40
43
  try {
41
- const compiled = compile(await fs.readFile(templateFile, "utf-8"));
42
- compiled({});
43
- console.log(`${templateFile} is a valid email template`);
44
+ const template = fs.readFileSync(templatePath, "utf-8");
45
+ assureOnlySupportedHelpers(template);
46
+ compileEmailTemplate(template);
47
+ console.log(`${templatePath} is a valid email template`);
44
48
  } catch (e) {
45
- errors.push(`${templateFile} is invalid`);
49
+ errors.push(`${templatePath} is invalid`);
46
50
  errors.push(e);
47
51
  }
48
52
  }
49
53
  return errors;
50
54
  };
55
+ var assureOnlySupportedHelpers = (template) => {
56
+ const extractHelpers = (ast2) => {
57
+ const usedHelpers2 = /* @__PURE__ */ new Set();
58
+ const extractHelperName = (node) => {
59
+ if (node.path?.type === "PathExpression" && (node.params?.length > 0 || node.hash?.pairs?.length > 0)) {
60
+ return node.path?.original;
61
+ }
62
+ };
63
+ const visit = (node) => {
64
+ if (!node) {
65
+ return;
66
+ }
67
+ switch (node.type) {
68
+ case "MustacheStatement":
69
+ case "BlockStatement": {
70
+ const name = extractHelperName(node);
71
+ if (name) {
72
+ usedHelpers2.add(name);
73
+ }
74
+ break;
75
+ }
76
+ }
77
+ for (const key in node) {
78
+ const value = node[key];
79
+ if (Array.isArray(value)) {
80
+ value.forEach(visit);
81
+ } else if (value && typeof value === "object" && value.type) {
82
+ visit(value);
83
+ }
84
+ }
85
+ };
86
+ visit(ast2);
87
+ return usedHelpers2;
88
+ };
89
+ const ast = Handlebars.parse(template);
90
+ const usedHelpers = extractHelpers(ast);
91
+ const supportedHelpers = /* @__PURE__ */ new Set([
92
+ // Built-in Handlebars helpers
93
+ "if",
94
+ "unless",
95
+ "each",
96
+ "with",
97
+ "log",
98
+ "lookup",
99
+ // Comparison helpers, provided by "handlebars-helpers" lib
100
+ "and",
101
+ "compare",
102
+ "contains",
103
+ "default",
104
+ "eq",
105
+ "gt",
106
+ "gte",
107
+ "has",
108
+ "isFalsey",
109
+ "isTruthy",
110
+ "ifEven",
111
+ "ifNth",
112
+ "ifOdd",
113
+ "is",
114
+ "isnt",
115
+ "lt",
116
+ "lte",
117
+ "neither",
118
+ "not",
119
+ "or",
120
+ "unlessEq",
121
+ "unlessGt",
122
+ "unlessLt",
123
+ "unlessGteq",
124
+ "unlessLteq"
125
+ ]);
126
+ const unsupportedHelpers = Array.from(usedHelpers).filter(
127
+ (h) => !supportedHelpers.has(h)
128
+ );
129
+ if (unsupportedHelpers.length > 0) {
130
+ throw new Error(
131
+ `Email template uses unsupported Handlebars helpers: ${unsupportedHelpers.join(", ")}`
132
+ );
133
+ }
134
+ };
135
+ var compileEmailTemplate = (template) => {
136
+ const compiled = Handlebars.compile(template);
137
+ compiled({});
138
+ };
51
139
 
52
140
  // src/commands/validate.ts
53
141
  var validate = async () => {
54
- const errors = await validateEmailTemplates(await glob("email-config/templates/**/*.hbs"));
142
+ const errors = validateEmailTemplates(
143
+ (await glob("email-config/templates/**/*.hbs")).sort()
144
+ );
55
145
  if (errors.length) {
56
146
  halt(errors.map((el) => el.toString()).join("\n"));
57
147
  }
58
- logTitle("Valid. Bye.");
148
+ logTitle("Validated successfully");
59
149
  };
60
150
 
61
151
  // src/lib/aws.ts
@@ -611,79 +701,83 @@ var prepareFlags4 = async (options) => {
611
701
  // package.json
612
702
  var package_default = {
613
703
  name: "@raisenow/tamaro-cli",
614
- version: "1.2.0",
704
+ version: "1.3.0",
615
705
  author: {
616
706
  name: "RaiseNow",
617
707
  email: "development@raisenow.com"
618
708
  },
619
709
  type: "module",
620
710
  bin: "dist/cli.js",
621
- packageManager: "pnpm@9.14.2",
711
+ packageManager: "pnpm@10.13.1",
622
712
  engines: {
623
- node: ">=20",
624
- pnpm: ">= 9.12",
713
+ node: ">=22",
714
+ pnpm: ">= 10",
625
715
  npm: "please-use-pnpm",
626
716
  yarn: "please-use-pnpm"
627
717
  },
628
718
  scripts: {
629
719
  prepare: "pnpm build",
630
- tscheck: "tsc --noEmit",
720
+ typecheck: "tsc --noEmit",
631
721
  build: "tsup src/cli.ts src/webpack.config.ts --clean --shims --format esm",
632
722
  "build:watch": "pnpm build --watch --ignore-watch .history --ignore-watch .idea",
633
723
  readme: "pnpx http-server . --cors -o /readme.html",
634
724
  lint: "DEBUG=eslint:cli-engine eslint .",
635
725
  "lint:fix": "DEBUG=eslint:cli-engine eslint --fix .",
636
- format: "prettier --write ."
726
+ format: "prettier --write .",
727
+ test: "vitest",
728
+ "test:watch": "vitest --watch",
729
+ "test:coverage": "vitest --coverage"
637
730
  },
638
731
  dependencies: {
639
- "@babel/cli": "^7.25.9",
640
- "@babel/core": "^7.26.0",
641
- "@babel/plugin-proposal-decorators": "^7.25.9",
732
+ "@babel/cli": "^7.28.0",
733
+ "@babel/core": "^7.28.0",
734
+ "@babel/plugin-proposal-decorators": "^7.28.0",
642
735
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
643
- "@babel/plugin-transform-runtime": "^7.25.9",
644
- "@babel/preset-env": "^7.26.0",
645
- "@babel/preset-react": "^7.25.9",
646
- "@babel/preset-typescript": "^7.26.0",
647
- "@babel/runtime-corejs3": "^7.26.0",
648
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
649
- "@statoscope/webpack-plugin": "^5.28.3",
736
+ "@babel/plugin-transform-runtime": "^7.28.0",
737
+ "@babel/preset-env": "^7.28.0",
738
+ "@babel/preset-react": "^7.27.1",
739
+ "@babel/preset-typescript": "^7.27.1",
740
+ "@babel/runtime-corejs3": "^7.28.2",
741
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.6.1",
742
+ "@statoscope/webpack-plugin": "^5.29.0",
650
743
  "@types/columnify": "^1.5.4",
651
- "@types/lodash": "^4.17.13",
652
- "@types/node": "^22.9.3",
744
+ "@types/handlebars-helpers": "^0.5.6",
745
+ "@types/lodash": "^4.17.20",
746
+ "@types/node": "^22.17.0",
653
747
  "@types/node-notifier": "^8.0.5",
654
748
  "@types/prompts": "^2.4.9",
655
749
  "@types/resolve-bin": "^0.4.3",
656
750
  "@types/webpack-config-utils": "^2.3.4",
657
751
  "@typescript-eslint/eslint-plugin": "^7.18.0",
658
752
  "@typescript-eslint/parser": "^7.18.0",
659
- autoprefixer: "^10.4.20",
660
- "babel-loader": "^9.2.1",
753
+ autoprefixer: "^10.4.21",
754
+ "babel-loader": "^10.0.0",
661
755
  "babel-plugin-istanbul": "^7.0.0",
662
756
  "babel-plugin-lodash": "^3.3.4",
663
- chalk: "^5.3.0",
757
+ chalk: "^5.4.1",
664
758
  "clean-webpack-plugin": "^4.0.0",
665
759
  columnify: "^1.6.0",
666
- commander: "^12.1.0",
667
- "copy-webpack-plugin": "^12.0.2",
668
- "core-js": "^3.39.0",
760
+ commander: "^14.0.0",
761
+ "copy-webpack-plugin": "^13.0.0",
762
+ "core-js": "^3.44.0",
669
763
  "css-loader": "^7.1.2",
670
- "css-minimizer-webpack-plugin": "^7.0.0",
671
- dotenv: "^16.4.5",
764
+ "css-minimizer-webpack-plugin": "^7.0.2",
765
+ dotenv: "^17.2.1",
672
766
  "escape-string-regexp": "^5.0.0",
673
767
  eslint: "^8.57.1",
674
- "eslint-config-prettier": "^9.1.0",
768
+ "eslint-config-prettier": "^10.1.8",
675
769
  "eslint-import-resolver-typescript": "^3.6.3",
676
770
  "eslint-plugin-deprecation": "^3.0.0",
677
- "eslint-plugin-import": "^2.31.0",
678
- "eslint-plugin-markdownlint": "^0.6.0",
679
- "eslint-plugin-promise": "^7.1.0",
771
+ "eslint-plugin-import": "^2.32.0",
772
+ "eslint-plugin-markdownlint": "^0.9.0",
773
+ "eslint-plugin-promise": "^7.2.1",
680
774
  "eslint-plugin-unused-imports": "^3.2.0",
681
- "eslint-plugin-yml": "^1.15.0",
775
+ "eslint-plugin-yml": "^1.18.0",
682
776
  "eslint-webpack-plugin": "^4.2.0",
683
- execa: "^9.5.1",
777
+ execa: "^9.6.0",
684
778
  "file-loader": "^6.2.0",
685
- "fork-ts-checker-webpack-plugin": "^9.0.2",
686
- glob: "^11.0.0",
779
+ "fork-ts-checker-webpack-plugin": "^9.1.0",
780
+ glob: "^11.0.3",
687
781
  handlebars: "^4.7.8",
688
782
  "handlebars-helpers": "^0.10.0",
689
783
  "html-loader": "^5.1.0",
@@ -692,29 +786,30 @@ var package_default = {
692
786
  lodash: "^4.17.21",
693
787
  "mini-css-extract-plugin": "^2.9.2",
694
788
  "node-notifier": "^10.0.1",
695
- portfinder: "^1.0.32",
696
- postcss: "^8.4.49",
697
- "postcss-custom-properties": "^14.0.4",
789
+ portfinder: "^1.0.37",
790
+ postcss: "^8.5.6",
791
+ "postcss-custom-properties": "^14.0.6",
698
792
  "postcss-import": "^16.1.1",
699
793
  "postcss-loader": "^8.1.1",
700
794
  "postcss-nested": "^7.0.2",
701
- prettier: "^3.3.3",
795
+ prettier: "^3.6.2",
702
796
  prompts: "^2.4.2",
703
- "react-refresh": "^0.14.2",
797
+ "react-refresh": "^0.17.0",
704
798
  "resolve-url-loader": "^5.0.0",
705
- sass: "^1.81.0",
706
- "sass-loader": "^16.0.3",
799
+ sass: "^1.89.2",
800
+ "sass-loader": "^16.0.5",
707
801
  "source-map-loader": "^5.0.0",
708
802
  "strip-indent": "^4.0.0",
709
803
  "style-loader": "^4.0.0",
710
804
  "tsconfig-paths-webpack-plugin": "^4.2.0",
711
- tsup: "^8.3.5",
712
- typescript: "^5.7.2",
805
+ tsup: "^8.5.0",
806
+ typescript: "^5.8.3",
713
807
  "url-loader": "^4.1.1",
714
- webpack: "^5.96.1",
715
- "webpack-cli": "^5.1.4",
808
+ vitest: "^3.2.4",
809
+ webpack: "^5.101.0",
810
+ "webpack-cli": "^6.0.1",
716
811
  "webpack-config-utils": "^2.3.1",
717
- "webpack-dev-server": "^5.1.0",
812
+ "webpack-dev-server": "^5.2.2",
718
813
  "yaml-loader": "^0.8.1"
719
814
  }
720
815
  };
@@ -794,7 +889,9 @@ cli.command("list-deployed").description(
794
889
  cli.command("deploy-email-config").description("Deploy a widget's email configuration to AWS S3").option("--profile <profile>", "AWS profile").option("--ci", "CI environment", false).option("--bucket <bucket>", "AWS bucket for email configs").action(async (options) => {
795
890
  await deployEmailConfig(options);
796
891
  });
797
- cli.command("validate").description("Validate the current Tamaro configuration to avoid common errors").action(async () => {
892
+ cli.command("validate").description(
893
+ "Validate the current Tamaro configuration to avoid common errors"
894
+ ).action(async () => {
798
895
  await validate();
799
896
  });
800
897
  (async () => {
@@ -10,7 +10,7 @@ import {
10
10
  logTitle,
11
11
  moduleFileExtensions,
12
12
  resolveApp
13
- } from "./chunk-KVWFHWZD.js";
13
+ } from "./chunk-H4BMVFM6.js";
14
14
 
15
15
  // src/webpack.config.ts
16
16
  import { existsSync } from "fs";