@trackunit/iris-app-sdk-vite 0.1.0 → 0.1.1

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,9 @@
1
+ ## 0.1.1 (2026-03-17)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated iris-app-build-utilities to 1.13.1
6
+
1
7
  ## 0.1.0 (2026-03-16)
2
8
 
3
9
  ### 🧱 Updated Dependencies
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app-sdk-vite",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "repository": "https://github.com/Trackunit/manager",
6
6
  "executors": "./executors.json",
@@ -11,7 +11,7 @@
11
11
  "@nx/devkit": "22.4.4",
12
12
  "rxjs": "7.8.1",
13
13
  "win-ca": "^3.5.1",
14
- "@trackunit/iris-app-build-utilities": "1.13.0",
14
+ "@trackunit/iris-app-build-utilities": "1.13.1",
15
15
  "@trackunit/iris-app-api": "1.15.0",
16
16
  "tslib": "^2.6.2",
17
17
  "vite": "7.3.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/vite/src/executors/build/executor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExecutorContext } from \"@nx/devkit\";\nimport { eachValueFrom } from \"@nx/devkit/src/utils/rxjs-for-await\";\nimport { checkPackageVersion, enableTsConfigPath } from \"@trackunit/iris-app-build-utilities\";\nimport { existsSync, rmSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { Observable } from \"rxjs\";\nimport * as op from \"rxjs/operators\";\nimport \"win-ca\";\nimport { getDefaultViteConfig } from \"../utils/defaultViteConfig\";\nimport { BuildExecutorSchema } from \"./schema\";\n\nexport type NodeBuildEvent = {\n outfile: string;\n success: boolean;\n};\n\nconst deleteOutputDir = (root: string, outputPath: string) => {\n const resolvedOutputPath = resolve(root, outputPath);\n if (resolvedOutputPath === root) {\n throw new Error(\"Output path MUST not be project root directory!\");\n }\n rmSync(resolvedOutputPath, { recursive: true, force: true });\n};\n\n/**\n * Build executor for building Iris Apps with Vite.\n *\n * @param {BuildExecutorSchema} options build executor options for this nx executor\n * @param {ExecutorContext} context build executor context for this nx executor\n * @yields {NodeBuildEvent} the build event\n */\nexport default async function* buildExecutor(\n options: BuildExecutorSchema,\n context: ExecutorContext\n): AsyncGenerator<NodeBuildEvent> {\n await checkPackageVersion(false);\n\n // eslint-disable-next-line @trackunit/no-typescript-assertion, @typescript-eslint/no-non-null-assertion\n const projectRoot = context.projectsConfigurations.projects[context.projectName!]!.root;\n const projectRootDir = join(context.root, projectRoot);\n const manifestPath = join(context.root, projectRoot, \"iris-app-manifest.ts\");\n\n // āœ… CRITICAL: Register tsconfig paths BEFORE any @trackunit/* imports\n enableTsConfigPath({\n projectRootDir,\n });\n\n // Now we can safely import the manifest (it uses @trackunit/* imports)\n const IrisAppManifest = (await import(manifestPath)).default;\n\n const defaultConfig = await getDefaultViteConfig(\n \"production\",\n context.root,\n projectRootDir,\n IrisAppManifest,\n context,\n {\n skipTypeChecking: options.skipTypeChecking,\n }\n );\n\n // Load optional custom config\n let finalConfig = defaultConfig;\n if (options.viteConfig || existsSync(join(projectRootDir, \"vite.config.ts\"))) {\n const customConfigFile = await import(options.viteConfig ?? join(projectRootDir, \"vite.config.ts\"));\n let customConfig = customConfigFile.default(defaultConfig);\n const isPromise = customConfig instanceof Promise;\n if (isPromise) {\n customConfig = await customConfig;\n }\n finalConfig = customConfig;\n }\n\n // Set output path\n finalConfig.build = {\n ...finalConfig.build,\n outDir: resolve(context.root, options.outputPath),\n emptyOutDir: true,\n };\n\n // Delete existing output\n deleteOutputDir(context.root, options.outputPath);\n\n if (context.isVerbose) {\n // eslint-disable-next-line no-console\n console.log(\"Using Vite config\", JSON.stringify(finalConfig.plugins, null, 2));\n }\n\n const observable = new Observable<NodeBuildEvent>(subscriber => {\n void (async () => {\n try {\n const { build } = await import(\"vite\");\n\n const buildResult = await build({ ...finalConfig, configFile: false });\n\n // Log build stats if available\n if (context.isVerbose) {\n // eslint-disable-next-line no-console\n console.log(\"Build completed:\", buildResult);\n }\n\n subscriber.next({\n success: true,\n outfile: resolve(context.root, options.outputPath),\n });\n subscriber.complete();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Vite build error:\", error);\n subscriber.next({\n success: false,\n outfile: resolve(context.root, options.outputPath),\n });\n subscriber.complete();\n }\n })();\n }).pipe(\n op.tap(({ success, outfile }) => {\n if (success) {\n // eslint-disable-next-line no-console\n console.info(`\\n āœ… Iris App build completed: ${outfile}\\n`);\n } else {\n // eslint-disable-next-line no-console\n console.error(`\\n āŒ Iris App build failed\\n`);\n }\n })\n );\n\n return yield* eachValueFrom(observable);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/vite/src/executors/serve/executor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExecutorContext } from \"@nx/devkit\";\nimport { eachValueFrom } from \"@nx/devkit/src/utils/rxjs-for-await\";\nimport {\n checkPackageVersion,\n enableTsConfigPath,\n spawnServersideExtensions,\n} from \"@trackunit/iris-app-build-utilities\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { Observable } from \"rxjs\";\nimport * as op from \"rxjs/operators\";\nimport \"win-ca\";\nimport { getDefaultViteConfig } from \"../utils/defaultViteConfig\";\nimport { ServeExecutorSchema } from \"./schema\";\n\ntype ServeResult = { baseUrl: string; success: boolean };\n\n/**\n * Serve executor for serving Iris Apps with Vite.\n *\n * @param {ServeExecutorSchema} options serve executor options for this nx executor\n * @param {ExecutorContext} context serve executor context for this nx executor\n * @yields {ServeResult} the serve result\n */\nexport default async function* serveExecutor(\n options: ServeExecutorSchema,\n context: ExecutorContext\n): AsyncGenerator<ServeResult> {\n await checkPackageVersion(false);\n\n // eslint-disable-next-line @trackunit/no-typescript-assertion, @typescript-eslint/no-non-null-assertion\n const projectRoot = context.projectsConfigurations.projects[context.projectName!]!.root;\n const projectRootDir = join(context.root, projectRoot);\n const manifestPath = join(context.root, projectRoot, \"iris-app-manifest.ts\");\n\n // āœ… CRITICAL: Register tsconfig paths BEFORE any @trackunit/* imports\n enableTsConfigPath({\n projectRootDir,\n });\n\n // Now we can safely import the manifest (it uses @trackunit/* imports)\n const IrisAppManifest = (await import(manifestPath)).default;\n\n const serversideResult = await spawnServersideExtensions(IrisAppManifest, context.root);\n\n try {\n // Get default config (internally imports @trackunit/iris-app-vite-plugin)\n const defaultConfig = await getDefaultViteConfig(\n \"development\",\n context.root,\n projectRootDir,\n IrisAppManifest,\n context,\n {\n serversidePortMap: serversideResult.portMap,\n skipTypeChecking: options.skipTypeChecking,\n }\n );\n\n // Load optional custom config\n let finalConfig = defaultConfig;\n if (options.viteConfig || existsSync(join(projectRootDir, \"vite.config.ts\"))) {\n const customConfigFile = await import(options.viteConfig ?? join(projectRootDir, \"vite.config.ts\"));\n let customConfig = customConfigFile.default(defaultConfig);\n const isPromise = customConfig instanceof Promise;\n if (isPromise) {\n customConfig = await customConfig;\n }\n finalConfig = customConfig;\n }\n\n // Apply port override if specified\n if (options.port !== undefined) {\n finalConfig.server = { ...finalConfig.server, port: options.port };\n }\n if (options.host) {\n finalConfig.server = { ...finalConfig.server, host: options.host };\n }\n\n if (context.isVerbose) {\n // eslint-disable-next-line no-console\n console.log(\"Using Vite config\", JSON.stringify(finalConfig.plugins, null, 2));\n }\n\n // Create and start Vite dev server\n const observable = new Observable<{ baseUrl: string; success: boolean }>(subscriber => {\n void (async () => {\n try {\n // Dynamic import vite to avoid issues\n const { createServer } = await import(\"vite\");\n\n const server = await createServer({ ...finalConfig, configFile: false });\n await server.listen();\n\n const address = server.httpServer?.address();\n const port = typeof address === \"object\" && address !== null ? address.port : (options.port ?? 22220);\n const host = options.host ?? \"localhost\";\n const baseUrl = `http://${host}:${port}`;\n\n server.printUrls();\n\n subscriber.next({\n baseUrl,\n success: true,\n });\n\n // Keep alive - server continues running until interrupted\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Vite server error:\", error);\n subscriber.error(error);\n }\n })();\n\n return () => {\n // Cleanup on unsubscribe - handled by Vite's signal handling\n };\n }).pipe(\n op.tap(({ baseUrl }) => {\n // eslint-disable-next-line no-console\n console.info(`\\n šŸš€ Iris App dev server running at: ${baseUrl}\\n`);\n }),\n op.map(({ baseUrl, success }) => ({\n baseUrl,\n success,\n })),\n op.finalize(() => {\n serversideResult.cleanup();\n })\n );\n\n return yield* eachValueFrom(observable);\n } catch (error) {\n serversideResult.cleanup();\n throw error;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaultViteConfig.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/vite/src/executors/utils/defaultViteConfig.ts"],"names":[],"mappings":";;;AAIA,qFAAkF;AAElF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,yBAAyB,GAAG,KAAK,gBAAgB,EAAE,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,kBAAkB,GAAiB;IACvC,IAAI,EAAE,wBAAwB;IAC9B,SAAS,CAAC,EAAU;QAClB,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;YAC5B,OAAO,yBAAyB,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,EAAU;QACb,IAAI,EAAE,KAAK,yBAAyB,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAOF;;;;;;;;;GASG;AACI,MAAM,oBAAoB,GAAG,KAAK,EACvC,IAAkC,EAClC,SAAiB,EACjB,MAAc,EACd,gBAAiC,EACjC,OAAwB,EACxB,UAAuC,EAAE,EACpB,EAAE;IACvB,6DAA6D;IAE7D,MAAM,cAAc,GAAG,MAAM,IAAA,+DAA8B,EAAC;QAC1D,MAAM;QACN,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,EAAE,IAAI,EAAE;QAChB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI;QACJ,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,kBAAkB,CAAC;QAChD,mCAAmC;QACnC,YAAY,EAAE;YACZ,mEAAmE;YACnE,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC;YACpD,6CAA6C;YAC7C,cAAc,EAAE;gBACd,MAAM,EAAE,QAAQ;aACjB;SACF;QACD,KAAK,EAAE;YACL,MAAM,EAAE,aAAa,OAAO,CAAC,WAAW,EAAE;YAC1C,WAAW,EAAE,IAAI;YACjB,+DAA+D;YAC/D,MAAM,EAAE,QAAQ;YAChB,yDAAyD;YACzD,MAAM,EAAE,SAAS;YACjB,sDAAsD;YACtD,SAAS,EAAE,KAAK;YAChB,oCAAoC;YACpC,qBAAqB,EAAE,IAAI;YAC3B,8DAA8D;YAC9D,SAAS,EAAE,EAAE;YACb,2EAA2E;YAC3E,oEAAoE;YACpE,aAAa,EAAE;gBACb,KAAK,EAAE,gBAAgB;gBACvB,mEAAmE;gBACnE,MAAM,EAAE;oBACN,mCAAmC;oBACnC,MAAM,EAAE,KAAK;oBACb,6CAA6C;oBAC7C,cAAc,EAAE,WAAW;oBAC3B,mBAAmB;oBACnB,cAAc,EAAE,kBAAkB;oBAClC,gBAAgB;oBAChB,cAAc,EAAE,+BAA+B;iBAChD;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,oBAAoB,wBA8D/B","sourcesContent":["import { ExecutorContext } from \"@nx/devkit\";\nimport type { IrisAppManifest } from \"@trackunit/iris-app-api\";\nimport type { ServersidePortMap } from \"@trackunit/iris-app-build-utilities\";\nimport type { PluginOption, UserConfig } from \"vite\";\nimport { getTrackunitIrisAppVitePlugins } from \"./getTrackunitIrisAppVitePlugins\";\n\nconst VIRTUAL_ENTRY_ID = \"virtual:iris-app-entry\";\nconst RESOLVED_VIRTUAL_ENTRY_ID = `\\0${VIRTUAL_ENTRY_ID}`;\n\n/**\n * Rollup plugin providing a virtual empty entry module.\n * Iris apps use Module Federation which generates remoteEntry.js as the real entry,\n * so we just need a no-op input to satisfy Rollup's requirement for an entry point.\n * Using a virtual module avoids tsconfig path resolution issues that occur when\n * referencing physical files inside node_modules.\n */\nconst virtualEntryPlugin: PluginOption = {\n name: \"iris-app-virtual-entry\",\n resolveId(id: string) {\n if (id === VIRTUAL_ENTRY_ID) {\n return RESOLVED_VIRTUAL_ENTRY_ID;\n }\n return null;\n },\n load(id: string) {\n if (id === RESOLVED_VIRTUAL_ENTRY_ID) {\n return \"\";\n }\n return null;\n },\n};\n\ntype GetDefaultViteConfigOptions = {\n serversidePortMap?: ServersidePortMap;\n skipTypeChecking?: boolean;\n};\n\n/**\n * Gets the default Vite config for Iris Apps.\n *\n * @param mode - \"production\" or \"development\"\n * @param nxRootDir - the root of the nx workspace\n * @param appDir - the app directory\n * @param _irisAppManifest - the iris app manifest (used for logging/validation)\n * @param context - NX executor context\n * @returns {Promise<UserConfig>} the default Vite config\n */\nexport const getDefaultViteConfig = async (\n mode: \"production\" | \"development\",\n nxRootDir: string,\n appDir: string,\n _irisAppManifest: IrisAppManifest,\n context: ExecutorContext,\n options: GetDefaultViteConfigOptions = {}\n): Promise<UserConfig> => {\n // Dynamic import - safe after enableTsConfigPath() is called\n\n const irisAppPlugins = await getTrackunitIrisAppVitePlugins({\n appDir,\n workspaceRoot: nxRootDir,\n config: { mode },\n serversidePortMap: options.serversidePortMap,\n skipTypeChecking: options.skipTypeChecking,\n });\n\n return {\n root: appDir,\n mode,\n plugins: [...irisAppPlugins, virtualEntryPlugin],\n // Optimize dependency pre-bundling\n optimizeDeps: {\n // Force include common dependencies to speed up dev server startup\n include: [\"react\", \"react-dom\", \"react/jsx-runtime\"],\n // Use esbuild for faster dependency scanning\n esbuildOptions: {\n target: \"esnext\",\n },\n },\n build: {\n outDir: `dist/apps/${context.projectName}`,\n emptyOutDir: true,\n // Target modern browsers - faster builds, no legacy transforms\n target: \"esnext\",\n // Use esbuild for minification (MUCH faster than terser)\n minify: \"esbuild\",\n // Disable source maps in production for faster builds\n sourcemap: false,\n // Increase chunk size warning limit\n chunkSizeWarningLimit: 1000,\n // Put remoteEntry.js at root (not in assets/) to match rspack\n assetsDir: \"\",\n // Use JavaScript entry instead of index.html for Module Federation remotes\n // The MF plugin generates remoteEntry.js as the actual bundle entry\n rollupOptions: {\n input: VIRTUAL_ENTRY_ID,\n // Preserve the entry file name for Module Federation compatibility\n output: {\n // ESM format for Module Federation\n format: \"esm\",\n // Entry files at root level (same as rspack)\n entryFileNames: \"[name].js\",\n // Chunks with hash\n chunkFileNames: \"[name]-[hash].js\",\n // Static assets\n assetFileNames: \"static/[name]-[hash][extname]\",\n },\n },\n },\n };\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTrackunitIrisAppVitePlugins.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/vite/src/executors/utils/getTrackunitIrisAppVitePlugins.ts"],"names":[],"mappings":"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","sourcesContent":["import { federation } from \"@module-federation/vite\";\nimport { nxViteTsPaths } from \"@nx/vite/plugins/nx-tsconfig-paths.plugin\";\nimport type { Exposes, IrisAppManifest, Shared } from \"@trackunit/iris-app-api\";\nimport {\n CopyPattern,\n createInvokeProxyMiddleware,\n enableTsConfigPath,\n getAvailablePort,\n getCopyPatterns,\n getExposedExtensions,\n getSharedDependencies,\n logInfo,\n ServersidePortMap,\n updateCustomFields,\n updateExtensions,\n updateIndexHtml,\n} from \"@trackunit/iris-app-build-utilities\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport * as fs from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport * as path from \"node:path\";\nimport { mergeConfig, type PluginOption, type ResolvedConfig, type UserConfig, type ViteDevServer } from \"vite\";\nimport checker from \"vite-plugin-checker\";\nimport cssInjectedByJsPlugin from \"vite-plugin-css-injected-by-js\";\n\n// Only import enableTsConfigPath statically - other utilities are dynamically imported\n// AFTER tsconfig paths are registered to avoid oxc analysis warnings\n\n// MIME types for serving extension assets during development\nconst MIME_TYPES: Record<string, string> = {\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".ico\": \"image/x-icon\",\n};\n\nconst getMimeType = (filePath: string): string =>\n MIME_TYPES[path.extname(filePath).toLowerCase()] || \"application/octet-stream\";\n\n/**\n * Resolves a URL path like \"/{extensionId}/assets/icon.svg\" to the actual file path on disk.\n * Returns null if no matching extension is found or the file doesn't exist.\n */\nconst resolveExtensionAsset = (url: string, manifest: IrisAppManifest, workspaceRoot: string): string | null => {\n for (const ext of manifest.extensions) {\n if (url.startsWith(`/${ext.id}/`)) {\n const assetPath = url.substring(ext.id.length + 2);\n const filePath = path.join(workspaceRoot, ext.sourceRoot, assetPath);\n\n if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {\n return filePath;\n }\n }\n }\n return null;\n};\n\ninterface TrackunitIrisAppVitePluginOptions {\n appDir: string;\n /** Path to the workspace root (where tsconfig.base.json is located) */\n workspaceRoot?: string;\n serversidePortMap?: ServersidePortMap;\n config: UserConfig;\n skipTypeChecking?: boolean;\n}\n\ninterface ViteSharedConfig {\n [key: string]: {\n singleton?: boolean;\n eager?: boolean;\n requiredVersion?: string;\n /** When false, the shared dependency is NOT bundled - it's loaded from the host at runtime */\n import?: false;\n };\n}\n\ninterface ViteExposesConfig {\n [key: string]: string;\n}\n\n// Flag to track if tsconfig paths have been registered\nlet tsconfigPathsRegistered = false;\n\n/**\n * Registers tsconfig paths for resolving @trackunit/* imports at runtime.\n * This is needed because the manifest file imports from @trackunit/* packages.\n */\nconst registerTsConfigPaths = (workspaceRoot: string, appDir: string): void => {\n if (tsconfigPathsRegistered) {\n return;\n }\n\n enableTsConfigPath({ projectRootDir: appDir, workspaceRoot });\n tsconfigPathsRegistered = true;\n};\n\n/**\n * Loads the Iris app manifest from the app directory.\n * Uses require() with cache clearing since Node.js doesn't support query strings in import paths.\n */\nconst loadManifest = (workspaceRoot: string, appDir: string): IrisAppManifest => {\n // Register tsconfig paths before loading the manifest\n registerTsConfigPaths(workspaceRoot, appDir);\n\n const manifestPath = path.join(appDir, \"iris-app-manifest.ts\");\n // Clear require cache to ensure fresh manifest on HMR\n try {\n delete require.cache[require.resolve(manifestPath)];\n } catch {\n // Ignore if not in cache\n }\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const manifestModule = require(manifestPath);\n manifestModule.default.moduleFormat = \"esm\";\n return manifestModule.default;\n};\n\n/**\n * Converts the shared dependencies from webpack format to Vite module federation format.\n * Handles both array and object variants of the Shared type.\n *\n * NOTE: We do NOT set `import: false` here because iris apps run in an iframe (separate\n * JavaScript context). The host's shared dependencies are NOT accessible across the iframe\n * boundary, so the iris app must bundle its own copies as a fallback. The `singleton: true`\n * config ensures that within the iframe context, only one instance is used.\n */\nconst convertSharedToViteFormat = (shared: Shared): ViteSharedConfig => {\n const result: ViteSharedConfig = {};\n\n const processItem = (item: unknown): void => {\n if (typeof item === \"string\") {\n // Bundle this dependency - iris apps need their own copy since they run in an iframe\n result[item] = {};\n } else if (item !== null && typeof item === \"object\") {\n for (const [key, value] of Object.entries(item)) {\n const baseConfig = typeof value === \"string\" ? {} : (value ?? {});\n // Remove import: false if it was set - we need to bundle shared deps for iframe isolation\n const { import: _import, ...restConfig } = baseConfig;\n result[key] = restConfig;\n }\n }\n };\n\n // Handle both array and object variants of Shared type\n if (Array.isArray(shared)) {\n for (const item of shared) {\n processItem(item);\n }\n } else {\n processItem(shared);\n }\n // For now we do not use any shared for vite build - as it create random crashes, it seemed like react was not garanteed to be loaded\n return {};\n // return result;\n};\n\n/**\n * Converts the webpack Exposes type to Vite's expected format.\n * getExposedExtensions returns an object with string values, but the Exposes type\n * is a union that includes arrays. This extracts just the object entries.\n *\n */\nconst convertExposesToViteFormat = (exposes: Exposes): ViteExposesConfig => {\n const result: ViteExposesConfig = {};\n\n if (typeof exposes === \"object\" && !Array.isArray(exposes)) {\n for (const [key, value] of Object.entries(exposes)) {\n if (typeof value === \"string\") {\n result[key] = value;\n }\n }\n }\n\n return result;\n};\n\nconst generateIndexHtml = ({\n manifest,\n packageJson,\n options,\n}: {\n manifest: IrisAppManifest;\n packageJson: string;\n options: TrackunitIrisAppVitePluginOptions;\n}): string => {\n // Register tsconfig paths to load the utility\n registerTsConfigPaths(options.workspaceRoot ?? options.appDir, options.appDir);\n\n // Only include dev scripts and React DevTools connection in development\n const devtools =\n options.config.mode === \"development\"\n ? `<script nonce=\"{{nonce}}\" src=\"http://localhost:8097\"></script>\n <script nonce=\"{{nonce}}\">\n // Polyfill for Node.js globals that some libraries expect\n if (typeof global === 'undefined') { window.global = window; }\n if (typeof process === 'undefined') { window.process = { env: {} }; }\n </script>\n`\n : `\n<script nonce=\"{{nonce}}\">\n // Polyfill for Node.js globals that some libraries expect\n if (typeof global === 'undefined') { window.global = window; }\n if (typeof process === 'undefined') { window.process = { env: {} }; }\n </script>`;\n\n return updateIndexHtml({ manifest, packageJson, devtools });\n};\n\n/**\n * Vite plugin that generates manifest.json, package.json, and index.html for Iris Apps.\n * This is the Vite equivalent of TrackunitIrisAppWebpackPlugin.\n *\n * Returns an array of plugins including Module Federation configuration.\n */\nexport async function getTrackunitIrisAppVitePlugins(\n options: TrackunitIrisAppVitePluginOptions\n): Promise<Array<PluginOption>> {\n const resolvedAppDir = path.resolve(options.appDir);\n const workspaceRoot = options.workspaceRoot ?? path.resolve(options.appDir, \"../..\");\n\n // Load manifest upfront for federation config\n const initialManifest = loadManifest(workspaceRoot, resolvedAppDir);\n\n // Get build utilities (tsconfig paths now registered via loadManifest)\n\n // Get an available port in the Iris app port range\n const port = await getAvailablePort(22220, 22229);\n\n // Get module federation configuration from manifest\n const webpackExposes = await getExposedExtensions({\n nxRootDir: workspaceRoot,\n manifest: initialManifest,\n });\n const shared = getSharedDependencies({ manifest: initialManifest });\n const viteExposes = convertExposesToViteFormat(webpackExposes);\n const viteShared = convertSharedToViteFormat(shared);\n const hasExposes = Object.keys(viteExposes).length > 0;\n\n // Only create the federation plugin when there are modules to expose.\n // @module-federation/vite deadlocks during build when exposes is empty because\n // its proxyRemoteEntry plugin waits for a module-parse promise that never resolves.\n let federationPlugin: PluginOption | null = null;\n if (hasExposes) {\n federationPlugin = federation({\n name: initialManifest.moduleFederationName,\n filename: \"remoteEntry.js\",\n library: { type: \"global\", name: initialManifest.moduleFederationName },\n exposes: viteExposes,\n shared: viteShared,\n remotes: {},\n manifest: false,\n dts: false,\n shareStrategy: \"loaded-first\",\n getPublicPath: `return (function() {\n var base;\n if (typeof import.meta !== 'undefined' && import.meta.url) {\n base = new URL('./', import.meta.url).href;\n } else if (typeof document !== 'undefined' && document.currentScript) {\n base = new URL('./', document.currentScript.src).href;\n } else {\n base = document.baseURI;\n }\n return base;\n })()`,\n });\n }\n\n // Conditionally create bundle analyzer plugin (same pattern as webpack/rspack)\n // Created here so we have access to the output directory path\n let bundleAnalyzerPlugin: PluginOption | null = null;\n if (process.env.BUNDLE_ANALYSE === \"true\") {\n // Compute output directory: dist/apps/{app-name}\n const appName = path.basename(resolvedAppDir);\n const statsPath = path.join(workspaceRoot, \"dist\", \"apps\", appName, \"stats.html\");\n\n // Dynamic ESM import for optional dependency\n const { visualizer } = await import(\"rollup-plugin-visualizer\");\n bundleAnalyzerPlugin = visualizer({\n filename: statsPath,\n template: \"treemap\",\n gzipSize: true,\n brotliSize: true,\n });\n\n // eslint-disable-next-line no-console\n console.log(`\\nšŸ“Š Bundle analyzer enabled - stats.html will be created at:\\n ${statsPath}\\n`);\n }\n\n // Plugin to disable hostAutoInit for pure remotes\n // The @module-federation/vite plugin always injects a hostAutoInit module\n // that auto-initializes the federation runtime. For pure remotes (Iris Apps),\n // we don't need this - the host handles initialization. This plugin intercepts\n // the virtual module and returns an empty module to prevent the build error.\n const disableHostAutoInitPlugin: PluginOption = {\n name: \"disable-host-auto-init\",\n enforce: \"pre\",\n resolveId(id) {\n // Match the hostAutoInit virtual module pattern: __H_A_I__hostAutoInit__H_A_I__\n if (id.includes(\"__H_A_I__hostAutoInit__H_A_I__\")) {\n return \"\\0virtual:empty-host-auto-init\";\n }\n return null;\n },\n load(id) {\n if (id === \"\\0virtual:empty-host-auto-init\") {\n // Return empty module - no auto-initialization needed for pure remotes\n return \"export default {}\";\n }\n return null;\n },\n };\n\n // Create the iris app plugin\n let config: ResolvedConfig;\n let manifest: IrisAppManifest | undefined = initialManifest;\n\n const reloadManifest = (): IrisAppManifest => {\n return loadManifest(workspaceRoot, resolvedAppDir);\n };\n\n const generateManifestJson = (manifestData: IrisAppManifest): IrisAppManifest => {\n // Register tsconfig paths to load utilities\n registerTsConfigPaths(workspaceRoot, resolvedAppDir);\n\n const manifestCopy = { ...manifestData };\n const appSrc = path.join(resolvedAppDir, \"src\");\n\n manifestCopy.customFieldDefinitions = updateCustomFields(manifestData.customFieldDefinitions, appSrc);\n manifestCopy.extensions = updateExtensions([...manifestData.extensions]);\n return manifestCopy;\n };\n\n // No explicit type annotation to avoid excessive stack depth error with federation plugin's complex types\n const irisAppPlugin = {\n name: \"trackunit-iris-app-vite-configuration\",\n\n config(conf: UserConfig) {\n // Base config for both serve and build\n const baseConfig: UserConfig = {\n // Use empty base for runtime URL resolution - assets will use relative paths\n base: \"\",\n // Runtime URL resolution - equivalent to rspack's publicPath: \"auto\"\n // Uses document.currentScript to determine base URL at runtime\n experimental: {\n renderBuiltUrl(filename, { hostType }) {\n // CSS files cannot execute JavaScript runtime expressions - use relative paths instead\n // This applies to fonts, images, and other assets referenced via url() in CSS\n if (hostType === \"css\") {\n return { relative: true };\n }\n // For JS/HTML, use runtime resolution using document.currentScript (like webpack/rspack's publicPath: \"auto\")\n return {\n runtime: `((function() {\n return document.baseURI + ${JSON.stringify(filename)};\n })())`,\n };\n },\n },\n // PostCSS configuration for Tailwind CSS v4\n // Using @tailwindcss/postcss instead of @tailwindcss/vite for better monorepo support\n css: {\n postcss: {\n plugins: [require(\"@tailwindcss/postcss\")({})],\n },\n },\n server: {\n port,\n host: \"localhost\",\n // Enable CORS for cross-origin requests from new.manager.trackunit.com\n cors: {\n origin: true, // Reflect request origin (supports all origins)\n credentials: true,\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"],\n allowedHeaders: [\n \"X-Requested-With\",\n \"baggage\",\n \"content-type\",\n \"Authorization\",\n \"sentry-trace\",\n \"session-id\",\n \"commit-number\",\n \"x-trackunitappversion\",\n ],\n maxAge: 3600,\n },\n },\n // Production build optimization\n build: {\n // Use esbuild for fast minification (Vite's default)\n minify: \"esbuild\",\n // CSS code splitting is required for relativeCSSInjection to work\n // (cssInjectedByJsPlugin enforces cssCodeSplit: true when relativeCSSInjection is enabled)\n // Each chunk's CSS is injected when that chunk loads - ideal for Module Federation\n // NOTE: We don't set cssCodeSplit here because the plugin controls it\n cssCodeSplit: true,\n rollupOptions: {\n output: {\n // Chunk splitting strategy - bundle small modules together to reduce HTTP requests\n manualChunks(id: string) {\n // Skip Module Federation virtual modules and runtime - let MF handle these\n if (\n id.includes(\"__mf__virtual\") ||\n id.includes(\"@mf-types\") ||\n id.includes(\"virtualExposes\") ||\n id.includes(\"virtual_mf-exposes\") ||\n id.includes(\"remoteEntry\") ||\n id.includes(\"_mf_\")\n ) {\n return undefined;\n }\n\n // Skip node_modules - let Rollup handle vendor chunking\n if (id.includes(\"node_modules\")) {\n return undefined;\n }\n\n // 1. Split translations per language (like Rspack's splitChunks cacheGroups)\n const translationMatch = id.match(/[\\\\/]locales[\\\\/]([^/\\\\]+)[\\\\/]translation\\.json$/);\n if (translationMatch) {\n return `translations-${translationMatch[1]}`;\n }\n\n // Let Rollup handle everything else - default chunking is fine\n // Vite/Rollup will merge small chunks automatically\n return undefined;\n },\n },\n },\n },\n };\n\n return mergeConfig(conf, baseConfig, false); // false = don't concatenate root-level arrays\n },\n\n configResolved(resolvedConfig: ResolvedConfig) {\n config = resolvedConfig;\n },\n buildStart() {\n manifest = reloadManifest();\n },\n\n configureServer(server: ViteDevServer) {\n // Route /invoke requests to local serverside extensions when available.\n server.middlewares.use(\"/invoke\", createInvokeProxyMiddleware(options.serversidePortMap));\n\n // Serve extension assets from source during development (/{extensionId}/... → {sourceRoot}/...)\n server.middlewares.use((req: IncomingMessage, res: ServerResponse, next: () => void) => {\n const url = req.url?.split(\"?\")[0] ?? \"/\";\n const filePath = resolveExtensionAsset(url, manifest ?? reloadManifest(), workspaceRoot);\n\n if (filePath) {\n res.setHeader(\"Content-Type\", getMimeType(filePath));\n res.end(fs.readFileSync(filePath));\n return;\n }\n next();\n });\n\n // Global CORS headers middleware - must be first to set headers on all responses\n server.middlewares.use((req: IncomingMessage, res: ServerResponse, next: () => void) => {\n // Set Access-Control-Allow-Origin based on request origin (needed for CORS preflight)\n const origin = req.headers.origin || \"https://dev.manager.trackunit.com\";\n res.setHeader(\"Access-Control-Allow-Origin\", origin);\n res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n res.setHeader(\"Access-Control-Max-Age\", \"3600\");\n res.setHeader(\"Access-Control-Allow-Methods\", \"GET, POST, PUT, DELETE, OPTIONS\");\n res.setHeader(\n \"Access-Control-Allow-Headers\",\n \"X-Requested-With, baggage, content-type, Authorization, sentry-trace, session-id, commit-number, x-trackunitappversion\"\n );\n next();\n });\n\n // IMPORTANT: This middleware must be synchronous for requests we want to pass through to Vite.\n // Async middlewares break Connect's middleware chain when calling next().\n // We use a sync wrapper and only do async work for routes we handle ourselves.\n server.middlewares.use((req: IncomingMessage, res: ServerResponse, next: () => void) => {\n const url = req.url?.split(\"?\")[0] ?? \"/\";\n\n // Let Vite handle its internal routes (@fs, @vite, @react-refresh, node_modules, etc.)\n // MUST call next() synchronously for these to work properly\n const isViteInternal =\n url.startsWith(\"/@\") ||\n url.startsWith(\"/node_modules/\") ||\n url.startsWith(\"/__mf__virtual/\") ||\n url.startsWith(\"/__vite\");\n if (isViteInternal) {\n next();\n return;\n }\n\n // CORS preflight handler - respond to OPTIONS requests\n if (req.method === \"OPTIONS\") {\n res.statusCode = 204;\n res.end();\n return;\n }\n\n // For non-GET/HEAD/OPTIONS on root path, return allowed methods\n if (req.url?.endsWith(\"/\") && req.method !== \"GET\" && req.method !== \"HEAD\") {\n res.end(\"GET, HEAD\");\n return;\n }\n\n // Serve manifest.json during development (async route - handle response ourselves)\n if (req.url === \"/manifest.json\") {\n void (async () => {\n try {\n manifest = reloadManifest();\n const manifestJson = generateManifestJson(manifest);\n\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify(manifestJson, null, 2));\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error generating manifest.json:\", error);\n res.statusCode = 500;\n res.end(String(error));\n }\n })();\n return; // Don't call next() - we're handling this route\n }\n\n // Serve package.json during development\n if (req.url === \"/package.json\") {\n try {\n const packageJsonPath = path.join(resolvedAppDir, \"package.json\");\n const packageJson = fs.readFileSync(packageJsonPath, \"utf8\");\n\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(packageJson);\n return;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error serving package.json:\", error);\n }\n }\n\n // Serve manifestAndToken during development (async route - handle response ourselves)\n if (req.url?.startsWith(\"/manifestAndToken\")) {\n void (async () => {\n try {\n const host = req.headers.host || \"localhost\";\n const resp = await fetch(`http://${host}/manifest.json`);\n const body = await resp.json();\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ manifest: body }));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"ERROR: \", e);\n res.statusCode = 500;\n res.end(String(e));\n }\n })();\n return; // Don't call next() - we're handling this route\n }\n\n // Serve extensionloader.js during development (async route - handle response ourselves)\n if (req.url?.startsWith(\"/extensionloader.js\")) {\n void (async () => {\n try {\n // To test extensionloader locally set LOCAL=true in front of the serve command\n let loaderUrl = \"https://iris.trackunit.app/extensionloader.js\";\n if (process.env.LOCAL === \"true\") {\n loaderUrl = \"http://localhost:3000/extensionloader.js\";\n }\n const resp = await fetch(loaderUrl);\n const body = await resp.text();\n res.setHeader(\"Content-Type\", \"application/javascript\");\n res.end(body);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"ERROR: \", e);\n res.statusCode = 500;\n res.end(String(e));\n }\n })();\n return; // Don't call next() - we're handling this route\n }\n\n // Serve generated index.html for root path and SPA fallback routes\n // This handles the case where no physical index.html exists (async route - handle response ourselves)\n if (req.method === \"GET\") {\n const acceptsHtml = req.headers.accept?.includes(\"text/html\");\n const hasExtension = /\\.\\w+$/.test(url);\n const isRootOrSpaRoute = url === \"/\" || url === \"/index.html\" || (!hasExtension && acceptsHtml);\n\n if (isRootOrSpaRoute) {\n void (async () => {\n try {\n manifest = reloadManifest();\n const packageJsonPath = path.join(resolvedAppDir, \"package.json\");\n const packageJson = fs.readFileSync(packageJsonPath, \"utf8\");\n const html = generateIndexHtml({ manifest, packageJson, options });\n\n const transformedHtml = await server.transformIndexHtml(req.url ?? \"/\", html);\n res.setHeader(\"Content-Type\", \"text/html\");\n res.end(transformedHtml);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error generating index.html:\", error);\n res.statusCode = 500;\n res.end(String(error));\n }\n })();\n return; // Don't call next() - we're handling this route\n }\n }\n next();\n });\n\n // Log success message when server starts\n server.httpServer?.once(\"listening\", () => {\n setTimeout(() => {\n logInfo(\n `\\n✨ Iris App is now started, check it out ✨\\nhttps://new.manager.trackunit.com/goto/iris-app-dev\\n`\n );\n }, 100);\n });\n },\n\n generateBundle() {\n if (!manifest) {\n manifest = reloadManifest();\n }\n\n const packageJsonPath = path.join(resolvedAppDir, \"package.json\");\n const packageJson = fs.readFileSync(packageJsonPath, \"utf8\");\n\n // Generate and emit manifest.json\n const manifestJson = generateManifestJson(manifest);\n this.emitFile({\n type: \"asset\",\n fileName: \"manifest.json\",\n source: JSON.stringify(manifestJson, null, 2),\n });\n\n // Emit package.json\n this.emitFile({\n type: \"asset\",\n fileName: \"package.json\",\n source: packageJson,\n });\n\n const html = generateIndexHtml({ manifest, packageJson, options });\n this.emitFile({\n type: \"asset\",\n fileName: \"index.html\",\n source: html,\n });\n },\n\n closeBundle() {\n if (config.command === \"build\") {\n const manifestForCopy = manifest ?? reloadManifest();\n const copyPatterns = getCopyPatterns({\n nxRootDir: workspaceRoot,\n appDir: resolvedAppDir,\n manifest: manifestForCopy,\n mode: \"production\",\n });\n\n const nonExistingPatterns: Array<CopyPattern> = [];\n for (const pattern of copyPatterns) {\n const exists = fs.existsSync(pattern.from);\n if (!exists) {\n nonExistingPatterns.push(pattern);\n }\n }\n if (nonExistingPatterns.length > 0) {\n throw new Error(`Copy patterns do not exist: ${nonExistingPatterns.map(p => p.from).join(\", \")}`);\n }\n\n for (const pattern of copyPatterns) {\n try {\n if (fs.existsSync(pattern.from)) {\n const stat = fs.statSync(pattern.from);\n if (stat.isDirectory()) {\n // Copy directory recursively\n fs.cpSync(pattern.from, pattern.to, { recursive: true });\n } else {\n // Copy single file\n const targetDir = path.dirname(pattern.to);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(pattern.from, pattern.to);\n }\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Error: Could not copy ${pattern.from} to ${pattern.to}:`, error);\n throw error;\n }\n }\n }\n },\n };\n\n // Return array of plugins:\n // 1. nxViteTsPaths - handles tsconfig path resolution\n // 2. disableHostAutoInitPlugin - intercepts hostAutoInit virtual module (must be before federation)\n // 3. federationPlugin - Module Federation for micro-frontends\n // 4. irisAppPlugin - Iris App specific handling\n // 5. cssInjectedByJsPlugin - Vite equivalent of rspack's \"style-loader\"\n // Injects CSS via JS as inline <style> tags instead of external CSS files\n // 6. bundleAnalyzerPlugin - optional bundle analysis\n //\n // NOTE: Tailwind CSS is configured via PostCSS (in baseConfig.css.postcss above)\n // NOT using @tailwindcss/vite because it doesn't respect tailwind.config.js content paths\n // PostCSS approach matches Rspack and properly uses getTailwindContentForApp() from config files\n const plugins: Array<PluginOption> = [\n nxViteTsPaths(),\n // React Fast Refresh — enables HMR for React components so file changes\n // are hot-swapped without a full page reload. Safe with Module Federation\n // because Iris apps bundle their own React (iframe isolation).\n react({}),\n hasExposes && disableHostAutoInitPlugin,\n federationPlugin,\n !options.skipTypeChecking &&\n checker({ typescript: { tsconfigPath: path.join(resolvedAppDir, \"tsconfig.app.json\") } }),\n irisAppPlugin,\n // Equivalent to rspack's style-loader - injects CSS as inline <style> tags\n // topExecutionPriority ensures CSS is injected before other code runs,\n // relativeCSSInjection: true ensures CSS is injected per chunk (requires cssCodeSplit: true)\n // This is ideal for Module Federation - CSS loads with each remote chunk\n cssInjectedByJsPlugin({\n topExecutionPriority: true,\n relativeCSSInjection: true,\n }),\n bundleAnalyzerPlugin,\n ];\n return plugins.filter(Boolean);\n}\n"]}
package/src/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/iris-app-sdk/vite/src/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}