@trackunit/iris-app-sdk-vite 0.6.8 → 0.6.10
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.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
## 0.6.10 (2026-05-27)
|
|
2
|
+
|
|
3
|
+
### 🧱 Updated Dependencies
|
|
4
|
+
|
|
5
|
+
- Updated iris-app-build-utilities to 1.18.9
|
|
6
|
+
- Updated iris-app-api to 1.20.9
|
|
7
|
+
- Updated iris-app to 1.21.10
|
|
8
|
+
|
|
9
|
+
## 0.6.9 (2026-05-26)
|
|
10
|
+
|
|
11
|
+
### 🩹 Fixes
|
|
12
|
+
|
|
13
|
+
- **iris-app-runtime-core-host:** address penpal v7 review feedback ([#23248](https://github.com/Trackunit/manager/issues/23248))
|
|
14
|
+
- **iris-vite:** resolve built asset URLs from import.meta.url ([86e4ef7d803](https://github.com/Trackunit/manager/commit/86e4ef7d803))
|
|
15
|
+
|
|
16
|
+
### 🧱 Updated Dependencies
|
|
17
|
+
|
|
18
|
+
- Updated iris-app-build-utilities to 1.18.8
|
|
19
|
+
- Updated iris-app-api to 1.20.8
|
|
20
|
+
- Updated iris-app to 1.21.9
|
|
21
|
+
|
|
22
|
+
### ❤️ Thank You
|
|
23
|
+
|
|
24
|
+
- Claude Opus 4.7 (1M context)
|
|
25
|
+
- Cursor Agent @cursoragent
|
|
26
|
+
- Mikkel Thorbjørn Andersen
|
|
27
|
+
- Nick Lediet @nle-trackunit
|
|
28
|
+
|
|
1
29
|
## 0.6.8 (2026-05-21)
|
|
2
30
|
|
|
3
31
|
### 🧱 Updated Dependencies
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/iris-app-sdk-vite",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.10",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
5
5
|
"repository": "https://github.com/Trackunit/manager",
|
|
6
6
|
"executors": "./executors.json",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"rxjs": "7.8.1",
|
|
12
12
|
"win-ca": "^3.5.1",
|
|
13
|
-
"@trackunit/iris-app-build-utilities": "1.18.
|
|
14
|
-
"@trackunit/iris-app-api": "1.20.
|
|
13
|
+
"@trackunit/iris-app-build-utilities": "1.18.9",
|
|
14
|
+
"@trackunit/iris-app-api": "1.20.9",
|
|
15
15
|
"tslib": "^2.6.2",
|
|
16
16
|
"vite": "7.3.1",
|
|
17
17
|
"@module-federation/vite": "1.11.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@tailwindcss/postcss": "^4.1.18",
|
|
23
23
|
"@vitejs/plugin-react-swc": "^4.2.3",
|
|
24
24
|
"@nx/devkit": "22.6.5",
|
|
25
|
-
"@trackunit/iris-app": "1.21.
|
|
25
|
+
"@trackunit/iris-app": "1.21.10",
|
|
26
26
|
"cross-keychain": "^1.1.0",
|
|
27
27
|
"jwt-decode": "^3.1.2"
|
|
28
28
|
},
|
|
@@ -13,6 +13,15 @@ const checkCustomFields = async (irisAppManifest, settings) => {
|
|
|
13
13
|
if (localFields.length === 0) {
|
|
14
14
|
return "in-sync";
|
|
15
15
|
}
|
|
16
|
+
if (process.env.IGNORE_CUSTOM_FIELDS_CHECK === "true") {
|
|
17
|
+
if (process.env.NODE_ENV === "production") {
|
|
18
|
+
throw new Error("IGNORE_CUSTOM_FIELDS_CHECK is a local development escape hatch and cannot be used when NODE_ENV=production.");
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line no-console
|
|
21
|
+
console.warn("[checkCustomFields] IGNORE_CUSTOM_FIELDS_CHECK=true — skipping custom-field approval check. " +
|
|
22
|
+
"Local development only: deploys against unapproved custom-field definitions will be rejected by the SDK submit path.");
|
|
23
|
+
return "in-sync";
|
|
24
|
+
}
|
|
16
25
|
// eslint-disable-next-line no-console
|
|
17
26
|
console.log("This app is using custom fields, fetching the latest approved manifest to validate that the local custom field definitions are in sync.");
|
|
18
27
|
const tokenData = await (0, accessTokenCache_1.getCachedAccessToken)(settings);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkCustomFields.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/vite/src/executors/utils/checkCustomFields.ts"],"names":[],"mappings":";;;AAEA,yDAA0D;AAC1D,2CAAwC;AAIxC;;;;GAIG;AACI,MAAM,iBAAiB,GAAG,KAAK,EACpC,eAAgC,EAChC,QAAkB,EACgB,EAAE;IACpC,MAAM,WAAW,GAAG,eAAe,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sCAAsC;IACtC,OAAO,CAAC,GAAG,CACT,yIAAyI,CAC1I,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,uCAAoB,EAAC,QAAQ,CAAC,CAAC;IAEvD,MAAM,2BAA2B,GAAG,MAAM,2BAA2B,CACnE,eAAe,CAAC,oBAAoB,EACpC,SAAS,CAAC,YAAY,EACtB,QAAQ,CACT,CAAC;IAEF,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,cAAc,GAAG,2BAA2B,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEhF,sCAAsC;IACtC,OAAO,CAAC,GAAG,CACT,gCAAgC,eAAe,CAAC,oBAAoB,QAAQ,cAAc,CAAC,MAAM,8BAA8B,CAChI,CAAC;IAEF,IAAI,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC;QACrD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"checkCustomFields.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/vite/src/executors/utils/checkCustomFields.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Settings } from \"@trackunit/iris-app\";\nimport { CustomFieldDefinition, IrisAppManifest, PublicIrisAppManifest } from \"@trackunit/iris-app-api\";\nimport { getCachedAccessToken } from \"./accessTokenCache\";\nimport { deepEqual } from \"./deepEqual\";\n\nexport type CheckCustomFieldsResult = \"in-sync\" | \"out-of-sync\" | \"not-submitted\";\n\n/**\n * Checks if the custom field definitions are in sync with the latest approved manifest.\n *\n * @param irisAppManifest - The iris app manifest.\n */\nexport const checkCustomFields = async (\n irisAppManifest: IrisAppManifest,\n settings: Settings\n): Promise<CheckCustomFieldsResult> => {\n const localFields = irisAppManifest.customFieldDefinitions ?? [];\n\n if (localFields.length === 0) {\n return \"in-sync\";\n }\n\n if (process.env.IGNORE_CUSTOM_FIELDS_CHECK === \"true\") {\n if (process.env.NODE_ENV === \"production\") {\n throw new Error(\n \"IGNORE_CUSTOM_FIELDS_CHECK is a local development escape hatch and cannot be used when NODE_ENV=production.\"\n );\n }\n // eslint-disable-next-line no-console\n console.warn(\n \"[checkCustomFields] IGNORE_CUSTOM_FIELDS_CHECK=true — skipping custom-field approval check. \" +\n \"Local development only: deploys against unapproved custom-field definitions will be rejected by the SDK submit path.\"\n );\n return \"in-sync\";\n }\n\n // eslint-disable-next-line no-console\n console.log(\n \"This app is using custom fields, fetching the latest approved manifest to validate that the local custom field definitions are in sync.\"\n );\n const tokenData = await getCachedAccessToken(settings);\n\n const latestApprovedManifestIfAny = await fetchLatestApprovedManifest(\n irisAppManifest.moduleFederationName,\n tokenData.access_token,\n settings\n );\n\n if (!latestApprovedManifestIfAny) {\n return \"not-submitted\";\n }\n\n const approvedFields = latestApprovedManifestIfAny.customFieldDefinitions ?? [];\n\n // eslint-disable-next-line no-console\n console.log(\n `Latest approved manifest for ${irisAppManifest.moduleFederationName} has ${approvedFields.length} custom field definition(s).`\n );\n\n if (hasCustomFieldDrift(localFields, approvedFields)) {\n return \"out-of-sync\";\n }\n\n return \"in-sync\";\n};\n\nconst stripTranslations = (field: CustomFieldDefinition): Omit<CustomFieldDefinition, \"translations\"> => {\n const { translations, ...rest } = field;\n return rest;\n};\n\n/**\n * Returns true when the local and approved custom field sets differ.\n * The comparison is symmetric: added, removed, and modified fields are all detected.\n * Translations are excluded from the comparison.\n */\nconst hasCustomFieldDrift = (\n localFields: Array<CustomFieldDefinition>,\n approvedFields: Array<CustomFieldDefinition>\n): boolean => {\n if (localFields.length !== approvedFields.length) {\n return true;\n }\n\n return localFields.some(local => {\n const approved = approvedFields.find(a => a.key === local.key);\n if (!approved) {\n return true;\n }\n return !deepEqual(stripTranslations(local), stripTranslations(approved));\n });\n};\n\nconst LATEST_APPROVED_MANIFEST_QUERY = `query LatestApprovedManifest($irisAppId: String!) {\n manifest(irisAppId: $irisAppId)\n}`;\n\n/**\n * Fetches the latest approved public manifest for the given iris app id from the\n * internal GraphQL endpoint. Returns null if the app is not subscribed on the\n * caller's account or does not have an approved version yet.\n *\n * @param {string} irisAppId The iris app id, typically the manifest's moduleFederationName.\n * @param {string} accessToken The Trackunit access token to authenticate the request.\n * @param {Settings} settings The Iris App SDK settings.\n * @returns {Promise<PublicIrisAppManifest | null>} The latest approved manifest or null.\n */\nasync function fetchLatestApprovedManifest(\n irisAppId: string,\n accessToken: string,\n settings: Settings\n): Promise<PublicIrisAppManifest | null> {\n const response = await fetch(settings.graphqlInternalUrl.toString(), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${accessToken}`,\n },\n body: JSON.stringify({\n operationName: \"LatestApprovedManifest\",\n query: LATEST_APPROVED_MANIFEST_QUERY,\n variables: { irisAppId },\n }),\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch latest approved manifest: ${response.status} ${response.statusText} ${await response.text()}`\n );\n }\n\n const body: { data?: { manifest: PublicIrisAppManifest | null }; errors?: Array<{ message: string }> } =\n await response.json();\n\n if (body.errors && body.errors.length > 0) {\n throw new Error(`GraphQL error fetching latest approved manifest: ${body.errors.map(e => e.message).join(\", \")}`);\n }\n\n return body.data?.manifest ?? null;\n}\n"]}
|