@raisenow/tamaro-cli 1.8.0 → 1.9.0-dev.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.
@@ -6,8 +6,10 @@ import prompts from "prompts";
6
6
  import stripIndent from "strip-indent";
7
7
  import chalk from "chalk";
8
8
  import columnify from "columnify";
9
+ import envPaths from "env-paths";
9
10
  import { fileURLToPath } from "node:url";
10
11
  import { getIfUtils } from "webpack-config-utils";
12
+ import { z } from "zod";
11
13
  import { globSync } from "glob";
12
14
  import { config } from "dotenv";
13
15
  //#region src/lib/logging.ts
@@ -20,6 +22,9 @@ const logError = (message) => {
20
22
  const logSuccess = (message) => {
21
23
  if (message) console.log(chalk.green(message));
22
24
  };
25
+ const logInfo = (message) => {
26
+ if (message) console.log(chalk.blue(message));
27
+ };
23
28
  const logCommand = (cmd) => {
24
29
  console.log(`\n${chalk.dim(stripIndent(cmd).trim())}\n`);
25
30
  };
@@ -27,6 +32,9 @@ const logDataTable = (data) => {
27
32
  console.log(columnify(data, { showHeaders: false }));
28
33
  console.log("");
29
34
  };
35
+ const createTerminalLink = (text, url) => {
36
+ return `\u001B]8;;${url}\u001B\\${text}\u001B]8;;\u001B\\`;
37
+ };
30
38
  //#endregion
31
39
  //#region src/lib/command.ts
32
40
  const halt = (message) => {
@@ -50,7 +58,26 @@ const promptConfirmation = async (message, skipConfirmation) => {
50
58
  if (!confirmed) halt("Operation cancelled.");
51
59
  };
52
60
  //#endregion
53
- //#region node_modules/.pnpm/tsdown@0.21.8_synckit@0.11.11_typescript@6.0.2/node_modules/tsdown/esm-shims.js
61
+ //#region src/lib/constants.ts
62
+ const DEFAULT_TAG = "latest";
63
+ const DEFAULT_PORT = 1234;
64
+ const DEFAULT_HTTP_TIMEOUT = 1e4;
65
+ const AWS_S3_BUCKET_TAMARO = "tamaro.raisenow.com";
66
+ const AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_STAGE = "rnw-stage-email-service";
67
+ const AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_PROD = "rnw-email-service";
68
+ const EPMS_API_BASE_URL_STAGE = "https://api.stage.mesos.raisenow.net";
69
+ const EPMS_API_BASE_URL_PROD = "https://api.raisenow.io";
70
+ const EPMS_AUTH_BASE_URL_STAGE = "https://login.stage.mesos.raisenow.net";
71
+ const EPMS_AUTH_BASE_URL_PROD = "https://login.raisenow.com";
72
+ const EPMS_OAUTH_CLIENT_ID = "tamaro-cli";
73
+ const CORE_CONFIG_NAME = "tamaro-core";
74
+ const AUTH_PORT = 4571;
75
+ const AWS_CLOUDFRONT_DISTRIBUTION_ID = "EHJ1OM458YQ0I";
76
+ const HTTPS_CRT_FILE = "localhost.crt";
77
+ const HTTPS_KEY_FILE = "localhost.key";
78
+ const CACHE_DIR = envPaths("tamaro-cli", { suffix: "" }).cache;
79
+ //#endregion
80
+ //#region node_modules/.pnpm/tsdown@0.21.10_synckit@0.11.11_typescript@6.0.3/node_modules/tsdown/esm-shims.js
54
81
  const getFilename = () => fileURLToPath(import.meta.url);
55
82
  const getDirname = () => path.dirname(getFilename());
56
83
  const __dirname = /* @__PURE__ */ getDirname();
@@ -145,6 +172,7 @@ const getPaths = (ifCore) => {
145
172
  appTsConfig: resolveApp("tsconfig.json"),
146
173
  appHtml: resolveApp("*.html"),
147
174
  appEnv: resolveApp(".env*"),
175
+ configYml: resolveApp("config.yml"),
148
176
  appTailwindConfig: void 0
149
177
  });
150
178
  };
@@ -171,17 +199,31 @@ const getIfCoreFns = ({ allowArchived = false } = {}) => {
171
199
  `));
172
200
  process.exit(1);
173
201
  };
174
- //#endregion
175
- //#region src/lib/constants.ts
176
- const DEFAULT_TAG = "latest";
177
- const DEFAULT_PORT = 1234;
178
- const AWS_S3_BUCKET_TAMARO = "tamaro.raisenow.com";
179
- const AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_STAGE = "rnw-stage-email-service";
180
- const AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_PROD = "rnw-email-service";
181
- const CORE_CONFIG_NAME = "tamaro-core";
182
- const AWS_CLOUDFRONT_DISTRIBUTION_ID = "EHJ1OM458YQ0I";
183
- const HTTPS_CRT_FILE = "localhost.crt";
184
- const HTTPS_KEY_FILE = "localhost.key";
202
+ const resolveAccountUuidFromConfig = (rawConfig, field) => {
203
+ const epmsConfig = z.object({ [field]: z.record(z.string(), z.unknown()) }).safeParse(rawConfig);
204
+ if (!epmsConfig.success) return;
205
+ const configContent = epmsConfig.data[field];
206
+ const accountUuid = configContent.account_mapping ?? configContent.account_uuid;
207
+ const accountUuidValidation = z.uuid().safeParse(accountUuid);
208
+ if (!accountUuidValidation.success) halt(stripIndent(`Could not extract EPMS account UUID from config.yml. Please ensure that the "${field}" field is correctly formatted. Expected formats:
209
+ 1. ${field}:
210
+ account_uuid: <UUID>
211
+
212
+ Alternatively, if the account_uuid is conditional using "if" / "then" / "else" statements, it must be provided using the "account_mapping" format:
213
+ 2. ${field}:
214
+ account_mapping: <UUID>
215
+ `));
216
+ return accountUuidValidation.data;
217
+ };
218
+ const TAMARO_VERSION_IN_URL_REGEX = /tamaro-core\/(.*)\/index.js/;
219
+ const extractTamaroVersionFromUrl = (url) => {
220
+ const match = url.match(TAMARO_VERSION_IN_URL_REGEX);
221
+ if (match) return match[1].toString();
222
+ };
223
+ const resolveCoreVersion = () => {
224
+ if (process.env.CORE_VERSION) return process.env.CORE_VERSION;
225
+ if (process.env.CORE_URL) return extractTamaroVersionFromUrl(process.env.CORE_URL);
226
+ };
185
227
  //#endregion
186
228
  //#region src/lib/env.ts
187
229
  const require = createRequire(import.meta.url);
@@ -297,4 +339,4 @@ const applyEnv = (env) => {
297
339
  if (filePath) config({ path: filePath });
298
340
  };
299
341
  //#endregion
300
- export { promptConfirmation as C, logError as D, logDataTable as E, logSuccess as O, halt as S, logCommand as T, getWidgetUuid as _, AWS_S3_BUCKET_TAMARO as a, resolveEslintPluginConfig as b, CORE_CONFIG_NAME as c, HTTPS_CRT_FILE as d, HTTPS_KEY_FILE as f, getRelativePaths as g, getPaths as h, AWS_CLOUDFRONT_DISTRIBUTION_ID as i, logTitle as k, DEFAULT_PORT as l, getIfCoreFns as m, assertEnvValid as n, AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_PROD as o, extensions as p, getEnvVars as r, AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_STAGE as s, applyEnv as t, DEFAULT_TAG as u, resolveApp as v, runCommandSync as w, resolveOwn as x, resolveBin as y };
342
+ export { HTTPS_CRT_FILE as A, logSuccess as B, DEFAULT_PORT as C, EPMS_AUTH_BASE_URL_PROD as D, EPMS_API_BASE_URL_STAGE as E, createTerminalLink as F, logCommand as I, logDataTable as L, halt as M, promptConfirmation as N, EPMS_AUTH_BASE_URL_STAGE as O, runCommandSync as P, logError as R, DEFAULT_HTTP_TIMEOUT as S, EPMS_API_BASE_URL_PROD as T, logTitle as V, AWS_S3_BUCKET_TAMARO as _, getIfCoreFns as a, CACHE_DIR as b, getWidgetUuid as c, resolveBin as d, resolveCoreVersion as f, AWS_CLOUDFRONT_DISTRIBUTION_ID as g, AUTH_PORT as h, extensions as i, HTTPS_KEY_FILE as j, EPMS_OAUTH_CLIENT_ID as k, resolveAccountUuidFromConfig as l, resolveOwn as m, assertEnvValid as n, getPaths as o, resolveEslintPluginConfig as p, getEnvVars as r, getRelativePaths as s, applyEnv as t, resolveApp as u, AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_PROD as v, DEFAULT_TAG as w, CORE_CONFIG_NAME as x, AWS_S3_BUCKET_TAMARO_EMAIL_CONFIG_STAGE as y, logInfo as z };
@@ -1,4 +1,4 @@
1
- import { E as logDataTable, b as resolveEslintPluginConfig, d as HTTPS_CRT_FILE, f as HTTPS_KEY_FILE, g as getRelativePaths, h as getPaths, k as logTitle, m as getIfCoreFns, p as extensions, r as getEnvVars, v as resolveApp } from "./env-CSg7BrvF.js";
1
+ import { A as HTTPS_CRT_FILE, L as logDataTable, V as logTitle, a as getIfCoreFns, i as extensions, j as HTTPS_KEY_FILE, o as getPaths, p as resolveEslintPluginConfig, r as getEnvVars, s as getRelativePaths, u as resolveApp } from "./env-DBP70I1v.js";
2
2
  import { createRequire } from "node:module";
3
3
  import { existsSync } from "node:fs";
4
4
  import path from "node:path";
@@ -164,6 +164,22 @@ const getWebpackConfig = (env) => {
164
164
  debug: ifDebug(),
165
165
  modules: false,
166
166
  useBuiltIns: "usage",
167
+ /**
168
+ * Exclude plugins that interfere with MobX flow inference via makeAutoObservable.
169
+ *
170
+ * MobX detects generator methods on the prototype and wraps them as `flow` automatically.
171
+ * Several Babel transforms break this detection:
172
+ *
173
+ * - transform-parameters: rewrites generator methods with default params (e.g. `*update(data, skip = false)`)
174
+ * into plain functions returning an IIFE generator. makeAutoObservable then sees a regular function
175
+ * and wraps it as `action` instead of `flow`.
176
+ *
177
+ * - async-to-generator / regenerator / async-generator-functions: downcompile async/generator syntax
178
+ * to state-machine helpers, again making the methods invisible to MobX flow inference.
179
+ *
180
+ * All of these transforms are unnecessary — our browser targets support default parameters,
181
+ * generators, and async functions natively.
182
+ */
167
183
  exclude: [
168
184
  "@babel/plugin-transform-async-to-generator",
169
185
  "@babel/plugin-transform-regenerator",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raisenow/tamaro-cli",
3
- "version": "1.8.0",
3
+ "version": "1.9.0-dev.2",
4
4
  "author": {
5
5
  "name": "RaiseNow",
6
6
  "email": "development@raisenow.com"
@@ -9,15 +9,16 @@
9
9
  "bin": "dist/cli.js",
10
10
  "engines": {
11
11
  "node": ">=22.22.2",
12
- "pnpm": ">=10.33.0",
12
+ "pnpm": ">=10.33.2",
13
13
  "npm": "please-use-pnpm",
14
14
  "yarn": "please-use-pnpm"
15
15
  },
16
16
  "dependencies": {
17
+ "@aws-sdk/client-s3": "^3.1002.0",
17
18
  "@babel/cli": "^7.28.6",
18
19
  "@babel/core": "^7.29.0",
19
20
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
20
- "@babel/preset-env": "^7.29.2",
21
+ "@babel/preset-env": "^7.29.3",
21
22
  "@babel/preset-react": "^7.28.5",
22
23
  "@babel/preset-typescript": "^7.28.5",
23
24
  "@pmmmwh/react-refresh-webpack-plugin": "^0.6.2",
@@ -43,6 +44,7 @@
43
44
  "css-loader": "^7.1.4",
44
45
  "css-minimizer-webpack-plugin": "^8.0.0",
45
46
  "dotenv": "^17.4.2",
47
+ "env-paths": "^4.0.0",
46
48
  "escape-string-regexp": "^5.0.0",
47
49
  "eslint-webpack-plugin": "^6.0.0",
48
50
  "execa": "^9.6.1",
@@ -52,13 +54,16 @@
52
54
  "handlebars": "^4.7.9",
53
55
  "handlebars-helpers": "^0.10.0",
54
56
  "html-loader": "^5.1.0",
55
- "html-webpack-plugin": "^5.6.6",
57
+ "html-webpack-plugin": "^5.6.7",
58
+ "js-yaml": "^4.1.1",
56
59
  "json-loader": "^0.5.7",
60
+ "ky": "^1.14.3",
57
61
  "lodash": "^4.18.1",
58
62
  "mini-css-extract-plugin": "^2.10.2",
59
63
  "node-notifier": "^10.0.1",
64
+ "open": "^11.0.0",
60
65
  "portfinder": "^1.0.38",
61
- "postcss": "^8.5.9",
66
+ "postcss": "^8.5.13",
62
67
  "postcss-import": "^16.1.1",
63
68
  "postcss-loader": "^8.2.1",
64
69
  "postcss-nested": "^7.0.2",
@@ -69,25 +74,27 @@
69
74
  "sass-loader": "^16.0.7",
70
75
  "strip-indent": "^4.1.1",
71
76
  "style-loader": "^4.0.0",
72
- "terser-webpack-plugin": "^5.4.0",
77
+ "terser-webpack-plugin": "^5.5.0",
73
78
  "tsconfig-paths-webpack-plugin": "^4.2.0",
74
- "tsdown": "^0.21.8",
75
- "typescript": "^6.0.2",
79
+ "tsdown": "^0.21.10",
80
+ "typescript": "^6.0.3",
76
81
  "url-loader": "^4.1.1",
77
- "vitest": "^4.1.4",
78
- "webpack": "^5.106.1",
82
+ "vitest": "^4.1.5",
83
+ "webpack": "^5.106.2",
79
84
  "webpack-cli": "^7.0.2",
80
85
  "webpack-config-utils": "^2.3.1",
81
86
  "webpack-dev-server": "^5.2.3",
82
- "yaml-loader": "^0.9.0"
87
+ "yaml-loader": "^0.9.0",
88
+ "zod": "^4.3.6"
83
89
  },
84
90
  "devDependencies": {
85
91
  "@rnw-npm/eslint-config": "^2.0.0",
86
92
  "@rnw-npm/prettier-config": "^1.0.0",
87
- "eslint": "^10.2.0",
93
+ "eslint": "^10.3.0",
94
+ "@types/js-yaml": "^4.0.9",
88
95
  "husky": "^9.1.7",
89
96
  "lint-staged": "^16.4.0",
90
- "prettier": "^3.8.2"
97
+ "prettier": "^3.8.3"
91
98
  },
92
99
  "prettier": "@rnw-npm/prettier-config",
93
100
  "lint-staged": {
package/.husky/pre-commit DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env sh
2
-
3
- corepack enable pnpm
4
- corepack prepare --activate
5
-
6
- pnpm lint-staged
@@ -1,6 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0">
3
- <option name="myName" value="Project Default" />
4
- <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
- </profile>
6
- </component>
package/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/tamaro-cli.iml" filepath="$PROJECT_DIR$/.idea/tamaro-cli.iml" />
6
- </modules>
7
- </component>
8
- </project>
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="WEB_MODULE" version="4">
3
- <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$">
5
- <excludeFolder url="file://$MODULE_DIR$/temp" />
6
- <excludeFolder url="file://$MODULE_DIR$/.tmp" />
7
- <excludeFolder url="file://$MODULE_DIR$/tmp" />
8
- </content>
9
- <orderEntry type="inheritedJdk" />
10
- <orderEntry type="sourceFolder" forTests="false" />
11
- </component>
12
- </module>
package/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
@@ -1,55 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ChangeListManager">
4
- <list default="true" id="03cc3f97-55ca-4737-9fe2-779ac8457ab2" name="Changes" comment="">
5
- <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
6
- </list>
7
- <option name="SHOW_DIALOG" value="false" />
8
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
9
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
10
- <option name="LAST_RESOLUTION" value="IGNORE" />
11
- </component>
12
- <component name="Git.Settings">
13
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
14
- </component>
15
- <component name="MarkdownSettingsMigration">
16
- <option name="stateVersion" value="1" />
17
- </component>
18
- <component name="ProjectId" id="3BwvHZOW2N4A0f0JXo7q8qDzYwY" />
19
- <component name="ProjectViewState">
20
- <option name="autoscrollFromSource" value="true" />
21
- <option name="autoscrollToSource" value="true" />
22
- <option name="hideEmptyMiddlePackages" value="true" />
23
- <option name="showLibraryContents" value="true" />
24
- <option name="showMembers" value="true" />
25
- </component>
26
- <component name="PropertiesComponent">{
27
- &quot;keyToString&quot;: {
28
- &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
29
- &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
30
- &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
31
- &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
32
- &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
33
- &quot;nodejs_package_manager_path&quot;: &quot;pnpm&quot;,
34
- &quot;prettierjs.PrettierConfiguration.Package&quot;: &quot;/Users/sigerello/dev/_raisenow/tools/tamaro-cli/node_modules/prettier&quot;,
35
- &quot;ts.external.directory.path&quot;: &quot;/Users/sigerello/dev/_raisenow/tools/tamaro-cli/node_modules/typescript/lib&quot;,
36
- &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
37
- }
38
- }</component>
39
- <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
40
- <component name="TaskManager">
41
- <task active="true" id="Default" summary="Default task">
42
- <changelist id="03cc3f97-55ca-4737-9fe2-779ac8457ab2" name="Changes" comment="" />
43
- <created>1775412859839</created>
44
- <option name="number" value="Default" />
45
- <option name="presentableId" value="Default" />
46
- <updated>1775412859839</updated>
47
- <workItem from="1775412861312" duration="2060000" />
48
- <workItem from="1776174639969" duration="648000" />
49
- </task>
50
- <servers />
51
- </component>
52
- <component name="TypeScriptGeneratedFilesManager">
53
- <option name="version" value="3" />
54
- </component>
55
- </project>
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 22.22.2
package/.prettierignore DELETED
@@ -1,8 +0,0 @@
1
- .history/*
2
- .idea/*
3
- dist/*
4
- node_modules/*
5
- pnpm-lock.yaml
6
- tsconfig.eslint.json
7
- tsconfig.json
8
- *.md
@@ -1,40 +0,0 @@
1
- image: node:22.22.2
2
-
3
- definitions:
4
- caches:
5
- node:
6
- key:
7
- files:
8
- - pnpm-lock.yaml
9
- - package.json
10
- path: node_modules
11
- pnpm:
12
- key:
13
- files:
14
- - pnpm-lock.yaml
15
- - package.json
16
- path: $BITBUCKET_CLONE_DIR/.pnpm-store
17
- scripts:
18
- initialize: &initialize |-
19
- corepack enable pnpm
20
- corepack prepare --activate
21
- npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN_READ_ONLY
22
- pnpm install --prefer-offline
23
- steps:
24
- - step: &check
25
- name: Check
26
- caches:
27
- - node
28
- - pnpm
29
- script:
30
- - *initialize
31
- - pnpm lint
32
- - pnpm typecheck
33
- - pnpm test
34
- # Do not bother for dev deps
35
- # @see https://raisenow.atlassian.net/wiki/spaces/PD/pages/5680037889/TP+RFC+014+-+Unsafe+Outdated+Libraries+Upgrades#Regular-upgrade-of-NPM-libraries-versions
36
- # - pnpm audit --audit-level=critical --prod
37
-
38
- pipelines:
39
- default:
40
- - step: *check
package/eslint.config.ts DELETED
@@ -1,30 +0,0 @@
1
- import {
2
- baseConfig,
3
- defineConfig,
4
- GLOB_MARKDOWN,
5
- GLOB_SRC,
6
- OFF,
7
- } from '@rnw-npm/eslint-config'
8
-
9
- export default defineConfig([
10
- ...baseConfig,
11
-
12
- /**
13
- * "tamaro-cli" specific overrides.
14
- */
15
- {
16
- files: [GLOB_SRC],
17
- name: 'tamaro-cli/overrides/ts',
18
- rules: {
19
- 'jsdoc/convert-to-jsdoc-comments': OFF,
20
- 'no-useless-assignment': OFF,
21
- },
22
- },
23
- {
24
- files: [GLOB_MARKDOWN],
25
- name: 'tamaro-cli/overrides/md',
26
- rules: {
27
- 'markdown/no-multiple-h1': OFF,
28
- },
29
- },
30
- ])