@trackunit/iris-app 1.3.27 → 1.3.28

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,12 @@
1
+ ## 1.3.28 (2025-03-10)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated iris-app-build-utilities to 1.3.28
6
+ - Updated iris-app-webpack-plugin to 1.3.28
7
+ - Updated iris-app-api to 1.3.28
8
+ - Updated shared-utils to 1.5.28
9
+
1
10
  ## 1.3.27 (2025-03-10)
2
11
 
3
12
  ### 🧱 Updated Dependencies
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app",
3
- "version": "1.3.27",
3
+ "version": "1.3.28",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "main": "src/index.js",
6
6
  "generators": "./generators.json",
@@ -33,10 +33,10 @@
33
33
  "@npmcli/arborist": "^7.3.1",
34
34
  "webpack-bundle-analyzer": "^4.8.0",
35
35
  "win-ca": "^3.5.1",
36
- "@trackunit/iris-app-build-utilities": "1.3.27",
37
- "@trackunit/shared-utils": "1.5.27",
38
- "@trackunit/iris-app-api": "1.3.27",
39
- "@trackunit/iris-app-webpack-plugin": "1.3.27",
36
+ "@trackunit/iris-app-build-utilities": "1.3.28",
37
+ "@trackunit/shared-utils": "1.5.28",
38
+ "@trackunit/iris-app-api": "1.3.28",
39
+ "@trackunit/iris-app-webpack-plugin": "1.3.28",
40
40
  "tslib": "^2.6.2"
41
41
  },
42
42
  "types": "./src/index.d.ts",
@@ -164,7 +164,7 @@ const getDefaultConfig = async (mode, nxRootDir, appDir, irisAppManifest) => {
164
164
  new CopyWebpackPlugin({
165
165
  patterns: [
166
166
  ...irisAppManifest.extensions
167
- .filter(extension => extension.type === "LIFECYCLE_EXTENSION")
167
+ .filter(extension => iris_app_api_1.serverSideExtensionTypes.includes(extension.type))
168
168
  .map(extension => ({
169
169
  //globs must use / in path to be valid
170
170
  from: extension.sourceRoot.replace(/\\/g, "/"),
@@ -1 +1 @@
1
- {"version":3,"file":"defaultWebpackConfig.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/executors/utils/defaultWebpackConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import { IrisAppManifest, isIconByPath } from \"@trackunit/iris-app-api\";\nimport {\n getAliasesFromTsConfig,\n getExposedExtensions,\n getIrisAppWebpackDevServer,\n getSharedDependencies,\n} from \"@trackunit/iris-app-build-utilities\";\nimport { TrackunitIrisAppWebpackPlugin } from \"@trackunit/iris-app-webpack-plugin\";\nimport { truthy } from \"@trackunit/shared-utils\";\nimport * as path from \"path\";\nimport * as webpack from \"webpack\";\nimport \"webpack-dev-server\";\n\nlet BundleAnalyzerPlugin: webpack.WebpackPluginInstance | null = null;\nif (process.env.BUNDLE_ANALYSE === \"true\") {\n // doing require here to avoid dependency on webpack-bundle-analyzer directly\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const BundleAnalyzerPluginConstructor = require(\"webpack-bundle-analyzer\").BundleAnalyzerPlugin;\n BundleAnalyzerPlugin = new BundleAnalyzerPluginConstructor({ analyzerMode: \"static\" });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\nconst CopyWebpackPlugin = require(\"copy-webpack-plugin\");\n\n/**\n * Gets the default webpack config.\n *\n * @param mode mode either \"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\n * @returns { Promise<webpack.Configuration> } the default webpack config\n */\nexport const getDefaultConfig = async (\n mode: \"production\" | \"development\",\n nxRootDir: string,\n appDir: string,\n irisAppManifest: IrisAppManifest\n): Promise<webpack.Configuration> => {\n const relativeAppDir = appDir.split(nxRootDir)[1] || \"<unknown appdir>\";\n\n const iconPaths = irisAppManifest.extensions\n .map(extension => {\n if (extension.type === \"FLEET_EXTENSION\" && extension.menuItem.image && isIconByPath(extension.menuItem.image)) {\n return {\n extensionId: extension.id,\n path: extension.menuItem.image.path,\n sourceRoot: extension.sourceRoot,\n };\n }\n return null;\n })\n .filter(truthy);\n\n return {\n mode: mode,\n output: {\n publicPath: \"auto\",\n path: path.join(nxRootDir, \"dist\", relativeAppDir),\n },\n\n entry: {},\n devtool: false,\n devServer: await getIrisAppWebpackDevServer(),\n resolve: {\n extensions: [\".tsx\", \".ts\", \".jsx\", \".js\", \".json\"],\n alias: await getAliasesFromTsConfig({ nxRootDir }),\n },\n module: {\n rules: [\n {\n test: /\\.svg$/,\n issuer: /\\.[jt]sx?$/,\n oneOf: [\n {\n resourceQuery: /react/, // if import has ?react in the query so .svg?react\n use: [\n {\n loader: \"@svgr/webpack\",\n options: {\n typescript: true,\n svgo: false,\n titleProp: true,\n ref: true,\n exportType: \"named\",\n namedExport: \"ReactComponent\",\n },\n },\n ],\n },\n {\n type: \"asset/resource\",\n generator: {\n filename: mode === \"production\" ? \"static/media/[hash][ext]\" : \"static/media/[name][ext]\",\n },\n },\n ],\n },\n {\n test: /\\.m?js/,\n type: \"javascript/auto\",\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.(png|jpe?g|gif|eot|ttf|ico|woff|woff2)$/,\n exclude: /(node_modules)/,\n type: \"asset/resource\",\n },\n {\n test: /\\.(png|jpe?g|gif|svg|eot|ttf|ico|woff|woff2)$/i,\n include: /(node_modules\\/@okta)/,\n type: \"asset/resource\",\n },\n {\n test: /\\.(css|s[ac]ss)$/i,\n use: [\n \"style-loader\",\n \"css-loader\",\n {\n loader: \"postcss-loader\",\n options: {\n postcssOptions: {\n plugins: {\n \"postcss-import\": {},\n \"tailwindcss/nesting\": {},\n tailwindcss: {\n config: path.resolve(appDir, \"tailwind.config.js\"),\n },\n autoprefixer: {},\n },\n },\n },\n },\n ],\n },\n {\n test: /\\.json$/,\n loader: \"json-loader\",\n },\n {\n test: /\\.(j|t)sx?$/,\n exclude: /(vendor|node_modules|dist)/,\n use: {\n loader: \"esbuild-loader\",\n options: {\n jsx: \"automatic\",\n target: \"es6\",\n define: {\n \"process.env.IRIS_APP_SENTRY_DSN\": JSON.stringify(\"\"),\n \"process.env.IRIS_APP_VERSION\": JSON.stringify(\"\"),\n },\n },\n },\n },\n ],\n },\n\n plugins: [\n new webpack.container.ModuleFederationPlugin({\n name: irisAppManifest.moduleFederationName,\n filename: \"remoteEntry.js\",\n library: { type: \"global\", name: irisAppManifest.moduleFederationName },\n remotes: {},\n exposes: await getExposedExtensions({\n nxRootDir,\n manifest: irisAppManifest,\n }),\n shared: await getSharedDependencies({ manifest: irisAppManifest }),\n }),\n\n new TrackunitIrisAppWebpackPlugin({\n nxRootDir: nxRootDir,\n appDir,\n manifest: irisAppManifest,\n }),\n new CopyWebpackPlugin({\n patterns: [\n ...irisAppManifest.extensions\n .filter(extension => extension.type === \"LIFECYCLE_EXTENSION\")\n .map(extension => ({\n //globs must use / in path to be valid\n from: extension.sourceRoot.replace(/\\\\/g, \"/\"),\n to: path.join(nxRootDir, \"dist\", relativeAppDir, \"serverside\", extension.id),\n })),\n {\n //globs must use / in path to be valid\n from: path\n .join(path.resolve(relativeAppDir.substring(1), \"assets\"), \"**\", \"(*.png|*.svg|*.jpg|*.jpeg|*.webp|*.md)\")\n .replace(/\\\\/g, \"/\"),\n to: path.resolve(nxRootDir, \"dist\"),\n },\n ...iconPaths.map(iconPath => ({\n //globs must use / in path to be valid\n from: path.join(iconPath.sourceRoot, iconPath.path).replace(/\\\\/g, \"/\"),\n to: path.join(nxRootDir, \"dist\", relativeAppDir, iconPath.extensionId, iconPath.path),\n })),\n ],\n }),\n BundleAnalyzerPlugin,\n ].filter(Boolean),\n };\n};\n"]}
1
+ {"version":3,"file":"defaultWebpackConfig.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/executors/utils/defaultWebpackConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import { IrisAppManifest, isIconByPath, serverSideExtensionTypes } from \"@trackunit/iris-app-api\";\nimport {\n getAliasesFromTsConfig,\n getExposedExtensions,\n getIrisAppWebpackDevServer,\n getSharedDependencies,\n} from \"@trackunit/iris-app-build-utilities\";\nimport { TrackunitIrisAppWebpackPlugin } from \"@trackunit/iris-app-webpack-plugin\";\nimport { truthy } from \"@trackunit/shared-utils\";\nimport * as path from \"path\";\nimport * as webpack from \"webpack\";\nimport \"webpack-dev-server\";\n\nlet BundleAnalyzerPlugin: webpack.WebpackPluginInstance | null = null;\nif (process.env.BUNDLE_ANALYSE === \"true\") {\n // doing require here to avoid dependency on webpack-bundle-analyzer directly\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const BundleAnalyzerPluginConstructor = require(\"webpack-bundle-analyzer\").BundleAnalyzerPlugin;\n BundleAnalyzerPlugin = new BundleAnalyzerPluginConstructor({ analyzerMode: \"static\" });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\nconst CopyWebpackPlugin = require(\"copy-webpack-plugin\");\n\n/**\n * Gets the default webpack config.\n *\n * @param mode mode either \"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\n * @returns { Promise<webpack.Configuration> } the default webpack config\n */\nexport const getDefaultConfig = async (\n mode: \"production\" | \"development\",\n nxRootDir: string,\n appDir: string,\n irisAppManifest: IrisAppManifest\n): Promise<webpack.Configuration> => {\n const relativeAppDir = appDir.split(nxRootDir)[1] || \"<unknown appdir>\";\n\n const iconPaths = irisAppManifest.extensions\n .map(extension => {\n if (extension.type === \"FLEET_EXTENSION\" && extension.menuItem.image && isIconByPath(extension.menuItem.image)) {\n return {\n extensionId: extension.id,\n path: extension.menuItem.image.path,\n sourceRoot: extension.sourceRoot,\n };\n }\n return null;\n })\n .filter(truthy);\n\n return {\n mode: mode,\n output: {\n publicPath: \"auto\",\n path: path.join(nxRootDir, \"dist\", relativeAppDir),\n },\n\n entry: {},\n devtool: false,\n devServer: await getIrisAppWebpackDevServer(),\n resolve: {\n extensions: [\".tsx\", \".ts\", \".jsx\", \".js\", \".json\"],\n alias: await getAliasesFromTsConfig({ nxRootDir }),\n },\n module: {\n rules: [\n {\n test: /\\.svg$/,\n issuer: /\\.[jt]sx?$/,\n oneOf: [\n {\n resourceQuery: /react/, // if import has ?react in the query so .svg?react\n use: [\n {\n loader: \"@svgr/webpack\",\n options: {\n typescript: true,\n svgo: false,\n titleProp: true,\n ref: true,\n exportType: \"named\",\n namedExport: \"ReactComponent\",\n },\n },\n ],\n },\n {\n type: \"asset/resource\",\n generator: {\n filename: mode === \"production\" ? \"static/media/[hash][ext]\" : \"static/media/[name][ext]\",\n },\n },\n ],\n },\n {\n test: /\\.m?js/,\n type: \"javascript/auto\",\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.(png|jpe?g|gif|eot|ttf|ico|woff|woff2)$/,\n exclude: /(node_modules)/,\n type: \"asset/resource\",\n },\n {\n test: /\\.(png|jpe?g|gif|svg|eot|ttf|ico|woff|woff2)$/i,\n include: /(node_modules\\/@okta)/,\n type: \"asset/resource\",\n },\n {\n test: /\\.(css|s[ac]ss)$/i,\n use: [\n \"style-loader\",\n \"css-loader\",\n {\n loader: \"postcss-loader\",\n options: {\n postcssOptions: {\n plugins: {\n \"postcss-import\": {},\n \"tailwindcss/nesting\": {},\n tailwindcss: {\n config: path.resolve(appDir, \"tailwind.config.js\"),\n },\n autoprefixer: {},\n },\n },\n },\n },\n ],\n },\n {\n test: /\\.json$/,\n loader: \"json-loader\",\n },\n {\n test: /\\.(j|t)sx?$/,\n exclude: /(vendor|node_modules|dist)/,\n use: {\n loader: \"esbuild-loader\",\n options: {\n jsx: \"automatic\",\n target: \"es6\",\n define: {\n \"process.env.IRIS_APP_SENTRY_DSN\": JSON.stringify(\"\"),\n \"process.env.IRIS_APP_VERSION\": JSON.stringify(\"\"),\n },\n },\n },\n },\n ],\n },\n\n plugins: [\n new webpack.container.ModuleFederationPlugin({\n name: irisAppManifest.moduleFederationName,\n filename: \"remoteEntry.js\",\n library: { type: \"global\", name: irisAppManifest.moduleFederationName },\n remotes: {},\n exposes: await getExposedExtensions({\n nxRootDir,\n manifest: irisAppManifest,\n }),\n shared: await getSharedDependencies({ manifest: irisAppManifest }),\n }),\n\n new TrackunitIrisAppWebpackPlugin({\n nxRootDir: nxRootDir,\n appDir,\n manifest: irisAppManifest,\n }),\n new CopyWebpackPlugin({\n patterns: [\n ...irisAppManifest.extensions\n .filter(extension => serverSideExtensionTypes.includes(extension.type))\n .map(extension => ({\n //globs must use / in path to be valid\n from: extension.sourceRoot.replace(/\\\\/g, \"/\"),\n to: path.join(nxRootDir, \"dist\", relativeAppDir, \"serverside\", extension.id),\n })),\n {\n //globs must use / in path to be valid\n from: path\n .join(path.resolve(relativeAppDir.substring(1), \"assets\"), \"**\", \"(*.png|*.svg|*.jpg|*.jpeg|*.webp|*.md)\")\n .replace(/\\\\/g, \"/\"),\n to: path.resolve(nxRootDir, \"dist\"),\n },\n ...iconPaths.map(iconPath => ({\n //globs must use / in path to be valid\n from: path.join(iconPath.sourceRoot, iconPath.path).replace(/\\\\/g, \"/\"),\n to: path.join(nxRootDir, \"dist\", relativeAppDir, iconPath.extensionId, iconPath.path),\n })),\n ],\n }),\n BundleAnalyzerPlugin,\n ].filter(Boolean),\n };\n};\n"]}
@@ -0,0 +1,12 @@
1
+ import { ServerlessFunctionExtensionManifest } from '@trackunit/iris-app-api';
2
+
3
+ const serverlessFunctionExtensionManifest: ServerlessFunctionExtensionManifest = {
4
+ id: "<%= projectName %>",
5
+ type: "SERVERLESS_FUNCTION_EXTENSION",
6
+ sourceRoot: "<%= sourceRoot %>",
7
+ dependencyDefinitionFile: "<%= dependencyDefinitionFile %>",
8
+ name: "Deno Worker <%= projectName %>",
9
+ main: "index.ts",
10
+ };
11
+
12
+ export default serverlessFunctionExtensionManifest;
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "<%= importPath %>"",
3
+ "dependencies": {
4
+ }
5
+ }
@@ -7,6 +7,7 @@ const eslint_1 = require("@nx/eslint");
7
7
  const js_1 = require("@nx/js");
8
8
  const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
9
9
  const react_1 = require("@nx/react");
10
+ const iris_app_api_1 = require("@trackunit/iris-app-api");
10
11
  const enquirer_1 = require("enquirer");
11
12
  const fs = tslib_1.__importStar(require("fs"));
12
13
  const path = tslib_1.__importStar(require("path"));
@@ -23,6 +24,7 @@ function normalizeOptions(tree, options) {
23
24
  const wsLayout = (0, devkit_1.getWorkspaceLayout)(tree);
24
25
  const projectRoot = `${wsLayout.libsDir}/${projectDirectory}`;
25
26
  const sourceRoot = `${wsLayout.libsDir}/${projectDirectory}/src`;
27
+ const dependencyDefinitionFile = `${wsLayout.libsDir}/${projectDirectory}/package.json`;
26
28
  const npmScope = (0, get_npm_scope_1.getNpmScope)(tree);
27
29
  if (!npmScope) {
28
30
  throw new Error("Could not find npm scope in package.json");
@@ -36,6 +38,7 @@ function normalizeOptions(tree, options) {
36
38
  projectCamelcase,
37
39
  importPath,
38
40
  sourceRoot,
41
+ dependencyDefinitionFile,
39
42
  };
40
43
  }
41
44
  /**
@@ -82,7 +85,7 @@ const IrisAppExtensionGenerator = async function (tree, options) {
82
85
  skipPackageJson: true,
83
86
  };
84
87
  await (0, react_1.libraryGenerator)(tree, schema);
85
- if (irisAppExtensionType !== "REPORT_EXTENSION") {
88
+ if (!iris_app_api_1.nonUiExtensionTypes.includes(irisAppExtensionType)) {
86
89
  (0, devkit_1.generateFiles)(tree, path.join(__dirname, "files", "react-app"), normalizedOptions.projectRoot, templateOptions);
87
90
  }
88
91
  const rootTsConfigPath = (0, js_1.getRootTsConfigPathInTree)(tree);
@@ -90,6 +93,16 @@ const IrisAppExtensionGenerator = async function (tree, options) {
90
93
  throw new Error("Could not find root tsconfig.json");
91
94
  }
92
95
  (0, devkit_1.updateJson)(tree, rootTsConfigPath, tsConfigBase => {
96
+ // For server side extension types, we need to add deno types to the tsconfig and make Typescript accept Deno import syntax
97
+ if (iris_app_api_1.serverSideExtensionTypes.includes(irisAppExtensionType)) {
98
+ tsConfigBase.compilerOptions = {
99
+ ...tsConfigBase.compilerOptions,
100
+ types: ["deno"],
101
+ allowImportingTsExtensions: true,
102
+ emitDeclarationOnly: true,
103
+ declaration: true,
104
+ };
105
+ }
93
106
  tsConfigBase.compilerOptions.paths[normalizedOptions.importPath] = [
94
107
  path.join(normalizedOptions.projectRoot, "extension-manifest.ts"),
95
108
  ];
@@ -124,7 +137,9 @@ const IrisAppExtensionGenerator = async function (tree, options) {
124
137
  extensionsArray.addElement(`${normalizedOptions.projectCamelcase}`);
125
138
  }
126
139
  await manifest.save();
127
- tree.delete((0, devkit_1.joinPathFragments)(normalizedOptions.projectRoot, "src", "index.ts"));
140
+ if (!iris_app_api_1.serverSideExtensionTypes.includes(irisAppExtensionType)) {
141
+ tree.delete((0, devkit_1.joinPathFragments)(normalizedOptions.projectRoot, "src", "index.ts"));
142
+ }
128
143
  (0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(normalizedOptions.projectRoot, "tsconfig.spec.json"), tsConfigSpec => {
129
144
  // extension-manifest.ts is a build time file, so we only need to include it in the spec file for type/lint checking
130
145
  tsConfigSpec.include = [...tsConfigSpec.include, "extension-manifest.ts"];
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/generators/extend/generator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDependenciesToPackageJson,\n formatFiles,\n generateFiles,\n getWorkspaceLayout,\n installPackagesTask,\n joinPathFragments,\n names,\n offsetFromRoot,\n Tree,\n updateJson,\n} from \"@nx/devkit\";\nimport { Linter } from \"@nx/eslint\";\nimport { getRootTsConfigPathInTree } from \"@nx/js\";\nimport { getNpmScope } from \"@nx/js/src/utils/package-json/get-npm-scope\";\nimport { libraryGenerator } from \"@nx/react\";\nimport { Schema } from \"@nx/react/src/generators/library/schema\";\nimport { prompt } from \"enquirer\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { camelCase } from \"string-ts\";\nimport { Project, SyntaxKind, VariableDeclaration } from \"ts-morph\";\nimport { addPropertyWithName } from \"../../utils/ast/astUtils\";\nimport { updateFileInTree } from \"../../utils/fileUpdater\";\nimport { spaDependencies, testDependencies } from \"./dependencies\";\nimport { IrisAppExtensionGeneratorSchema } from \"./schema\";\n\ninterface NormalizedSchema extends IrisAppExtensionGeneratorSchema {\n projectName: string;\n projectRoot: string;\n projectDirectory: string;\n projectCamelcase: string;\n importPath: string;\n sourceRoot: string;\n}\n\nfunction normalizeOptions(tree: Tree, options: IrisAppExtensionGeneratorSchema): NormalizedSchema {\n const name = names(options.name).fileName;\n const projectDirectory = options.directory ? `${names(options.directory).fileName}/${name}` : name;\n const projectName = projectDirectory.replace(new RegExp(\"/\", \"g\"), \"-\");\n const projectCamelcase = camelCase(projectName);\n const wsLayout = getWorkspaceLayout(tree);\n const projectRoot = `${wsLayout.libsDir}/${projectDirectory}`;\n const sourceRoot = `${wsLayout.libsDir}/${projectDirectory}/src`;\n\n const npmScope = getNpmScope(tree);\n if (!npmScope) {\n throw new Error(\"Could not find npm scope in package.json\");\n }\n const importPath = `@${npmScope}/${projectName}`;\n\n return {\n ...options,\n projectName,\n projectRoot,\n projectDirectory,\n projectCamelcase,\n importPath,\n sourceRoot,\n };\n}\n\n/**\n * Iris App Extension Generator.\n *\n * @param tree the nx tree\n * @param options the generator options\n * @returns { Promise<void> } void\n */\nexport const IrisAppExtensionGenerator = async function (tree: Tree, options: IrisAppExtensionGeneratorSchema) {\n const adjustedOptions = await updateAppName(tree, options);\n\n const normalizedOptions = normalizeOptions(tree, adjustedOptions);\n\n const templateOptions = {\n ...normalizedOptions,\n ...names(normalizedOptions.name),\n offsetFromRoot: offsetFromRoot(normalizedOptions.projectRoot),\n template: \"\",\n };\n const irisAppExtensionType = normalizedOptions.type;\n\n if (!tree.exists(`${getWorkspaceLayout(tree).appsDir}/${normalizedOptions.app}`)) {\n throw new Error(\n `The app does not exist: ${getWorkspaceLayout(tree).appsDir}/${\n normalizedOptions.app\n } make sure you enter the right app name`\n );\n }\n\n const manifestPath = `${getWorkspaceLayout(tree).appsDir}/${normalizedOptions.app}/iris-app-manifest.ts`;\n if (!tree.exists(manifestPath)) {\n throw new Error(\n `The app does not have an iris-app-manifest.ts: ${manifestPath} make sure you enter the right app name, which has an iris-app-manifest.ts`\n );\n }\n generateFiles(\n tree,\n path.join(__dirname, \"files\", irisAppExtensionType),\n normalizedOptions.projectRoot,\n templateOptions\n );\n\n if (normalizedOptions.updatePackageJson) {\n addDependenciesToPackageJson(\n tree,\n {},\n {\n ...spaDependencies,\n ...testDependencies,\n }\n );\n }\n\n const schema: Schema = {\n name: normalizedOptions.projectName,\n style: \"none\",\n skipFormat: false,\n strict: true,\n unitTestRunner: \"jest\",\n linter: Linter.EsLint,\n routing: false,\n directory: normalizedOptions.projectRoot,\n skipTsConfig: false,\n skipPackageJson: true,\n };\n await libraryGenerator(tree, schema);\n\n if (irisAppExtensionType !== \"REPORT_EXTENSION\") {\n generateFiles(tree, path.join(__dirname, \"files\", \"react-app\"), normalizedOptions.projectRoot, templateOptions);\n }\n\n const rootTsConfigPath = getRootTsConfigPathInTree(tree);\n if (!rootTsConfigPath) {\n throw new Error(\"Could not find root tsconfig.json\");\n }\n updateJson(tree, rootTsConfigPath, tsConfigBase => {\n tsConfigBase.compilerOptions.paths[normalizedOptions.importPath] = [\n path.join(normalizedOptions.projectRoot, \"extension-manifest.ts\"),\n ];\n return tsConfigBase;\n });\n\n //TODO: Change the following to update the manifest in the virtual Tree - not on the file system.\n const project = new Project({\n tsConfigFilePath: `${getWorkspaceLayout(tree).appsDir}/${normalizedOptions.app}/tsconfig.app.json`,\n });\n\n const manifest = project.getSourceFileOrThrow(manifestPath);\n\n manifest.addImportDeclaration({\n moduleSpecifier: normalizedOptions.importPath,\n defaultImport: normalizedOptions.projectCamelcase,\n });\n\n // Get the default export symbol from the manifest\n const defaultExportSymbol = manifest.getDefaultExportSymbolOrThrow();\n\n // Get the aliased symbol if the default export is an alias\n const aliasedSymbol = defaultExportSymbol.getAliasedSymbol() || defaultExportSymbol;\n\n // Get the declaration of the aliased symbol\n const declaration = aliasedSymbol.getDeclarations()[0];\n\n if (!VariableDeclaration.isVariableDeclaration(declaration)) {\n throw new Error(\"Expected variable declaration\");\n }\n const irisAppManifestObject = declaration.getInitializer()?.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n if (!irisAppManifestObject) {\n throw new Error(`irisAppManifest not exported from the file: ${manifestPath}`);\n }\n // Find the extensions property within the irisAppManifest object\n const extensionsProperty = irisAppManifestObject.getPropertyOrThrow(\"extensions\");\n\n if (extensionsProperty.getKind() === SyntaxKind.PropertyAssignment) {\n const extensionsArray = extensionsProperty.getFirstChildByKindOrThrow(SyntaxKind.ArrayLiteralExpression);\n extensionsArray.addElement(`${normalizedOptions.projectCamelcase}`);\n }\n\n await manifest.save();\n\n tree.delete(joinPathFragments(normalizedOptions.projectRoot, \"src\", \"index.ts\"));\n\n updateJson(tree, joinPathFragments(normalizedOptions.projectRoot, \"tsconfig.spec.json\"), tsConfigSpec => {\n // extension-manifest.ts is a build time file, so we only need to include it in the spec file for type/lint checking\n tsConfigSpec.include = [...tsConfigSpec.include, \"extension-manifest.ts\"];\n return tsConfigSpec;\n });\n\n updateFileInTree(tree, joinPathFragments(normalizedOptions.projectRoot, \"jest.config.ts\"), fileContent =>\n addPropertyWithName(fileContent, \"moduleNameMapper\", {\n \"@trackunit/css-core\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-mini.svg\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-outline.svg\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-solid.svg\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-micro.svg\": \"jest-transform-stub\",\n })\n );\n\n await formatFiles(tree);\n installPackagesTask(tree, true);\n return () => {\n // eslint-disable-next-line no-console\n console.log(\"🥳 Successfully created an app extensions and it is already added to the Iris App!\");\n };\n};\nconst updateAppName = async (tree: Tree, options: IrisAppExtensionGeneratorSchema) => {\n if (!options.app) {\n const folders = fs\n .readdirSync(getWorkspaceLayout(tree).appsDir, { withFileTypes: true })\n .filter(item => item.isDirectory());\n\n const tileApps: string[] = [];\n\n folders.forEach(folder => {\n const irisAppManifest = fs\n .readdirSync(`${getWorkspaceLayout(tree).appsDir}/${folder.name}`, { withFileTypes: true })\n .find(item => item.name === \"iris-app-manifest.ts\");\n\n if (irisAppManifest) {\n tileApps.push(folder.name);\n } else {\n const subFolders = fs\n .readdirSync(path.join(getWorkspaceLayout(tree).appsDir, folder.name), { withFileTypes: true })\n .filter(item => item.isDirectory());\n subFolders.forEach(subFolder => {\n const subDirIrisAppManifest = fs\n .readdirSync(`${getWorkspaceLayout(tree).appsDir}/${folder.name}/${subFolder.name}`, {\n withFileTypes: true,\n })\n .find(item => item.name === \"iris-app-manifest.ts\");\n\n if (subDirIrisAppManifest) {\n tileApps.push(path.join(folder.name, subFolder.name));\n }\n });\n }\n });\n\n if (tileApps.length === 1) {\n options.app = tileApps[0] || \"<Missing iris app name>\";\n } else if (tileApps.length === 0) {\n throw new Error(\"Please add an iris-app using: nx g @trackunit/iris-app:create \");\n } else {\n const promptObject = {\n name: \"app\",\n message: \"Select the iris app that this extension should belong to:\",\n type: \"autocomplete\",\n choices: tileApps.map(item => item),\n };\n await prompt(promptObject).then((values: object) => {\n // @ts-ignore - suppressImplicitAnyIndexErrors\n // eslint-disable-next-line @typescript-eslint/dot-notation\n options.app = values[\"app\"];\n });\n }\n }\n return options;\n};\n\nexport default IrisAppExtensionGenerator;\n"]}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/generators/extend/generator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addDependenciesToPackageJson,\n formatFiles,\n generateFiles,\n getWorkspaceLayout,\n installPackagesTask,\n joinPathFragments,\n names,\n offsetFromRoot,\n Tree,\n updateJson,\n} from \"@nx/devkit\";\nimport { Linter } from \"@nx/eslint\";\nimport { getRootTsConfigPathInTree } from \"@nx/js\";\nimport { getNpmScope } from \"@nx/js/src/utils/package-json/get-npm-scope\";\nimport { libraryGenerator } from \"@nx/react\";\nimport { Schema } from \"@nx/react/src/generators/library/schema\";\nimport { nonUiExtensionTypes, serverSideExtensionTypes } from \"@trackunit/iris-app-api\";\nimport { prompt } from \"enquirer\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { camelCase } from \"string-ts\";\nimport { Project, SyntaxKind, VariableDeclaration } from \"ts-morph\";\nimport { addPropertyWithName } from \"../../utils/ast/astUtils\";\nimport { updateFileInTree } from \"../../utils/fileUpdater\";\nimport { spaDependencies, testDependencies } from \"./dependencies\";\nimport { IrisAppExtensionGeneratorSchema } from \"./schema\";\n\ninterface NormalizedSchema extends IrisAppExtensionGeneratorSchema {\n projectName: string;\n projectRoot: string;\n projectDirectory: string;\n projectCamelcase: string;\n importPath: string;\n sourceRoot: string;\n dependencyDefinitionFile: string;\n}\n\nfunction normalizeOptions(tree: Tree, options: IrisAppExtensionGeneratorSchema): NormalizedSchema {\n const name = names(options.name).fileName;\n const projectDirectory = options.directory ? `${names(options.directory).fileName}/${name}` : name;\n const projectName = projectDirectory.replace(new RegExp(\"/\", \"g\"), \"-\");\n const projectCamelcase = camelCase(projectName);\n const wsLayout = getWorkspaceLayout(tree);\n const projectRoot = `${wsLayout.libsDir}/${projectDirectory}`;\n const sourceRoot = `${wsLayout.libsDir}/${projectDirectory}/src`;\n const dependencyDefinitionFile = `${wsLayout.libsDir}/${projectDirectory}/package.json`;\n\n const npmScope = getNpmScope(tree);\n if (!npmScope) {\n throw new Error(\"Could not find npm scope in package.json\");\n }\n const importPath = `@${npmScope}/${projectName}`;\n\n return {\n ...options,\n projectName,\n projectRoot,\n projectDirectory,\n projectCamelcase,\n importPath,\n sourceRoot,\n dependencyDefinitionFile,\n };\n}\n\n/**\n * Iris App Extension Generator.\n *\n * @param tree the nx tree\n * @param options the generator options\n * @returns { Promise<void> } void\n */\nexport const IrisAppExtensionGenerator = async function (tree: Tree, options: IrisAppExtensionGeneratorSchema) {\n const adjustedOptions = await updateAppName(tree, options);\n\n const normalizedOptions = normalizeOptions(tree, adjustedOptions);\n\n const templateOptions = {\n ...normalizedOptions,\n ...names(normalizedOptions.name),\n offsetFromRoot: offsetFromRoot(normalizedOptions.projectRoot),\n template: \"\",\n };\n const irisAppExtensionType = normalizedOptions.type;\n\n if (!tree.exists(`${getWorkspaceLayout(tree).appsDir}/${normalizedOptions.app}`)) {\n throw new Error(\n `The app does not exist: ${getWorkspaceLayout(tree).appsDir}/${\n normalizedOptions.app\n } make sure you enter the right app name`\n );\n }\n\n const manifestPath = `${getWorkspaceLayout(tree).appsDir}/${normalizedOptions.app}/iris-app-manifest.ts`;\n if (!tree.exists(manifestPath)) {\n throw new Error(\n `The app does not have an iris-app-manifest.ts: ${manifestPath} make sure you enter the right app name, which has an iris-app-manifest.ts`\n );\n }\n generateFiles(\n tree,\n path.join(__dirname, \"files\", irisAppExtensionType),\n normalizedOptions.projectRoot,\n templateOptions\n );\n\n if (normalizedOptions.updatePackageJson) {\n addDependenciesToPackageJson(\n tree,\n {},\n {\n ...spaDependencies,\n ...testDependencies,\n }\n );\n }\n\n const schema: Schema = {\n name: normalizedOptions.projectName,\n style: \"none\",\n skipFormat: false,\n strict: true,\n unitTestRunner: \"jest\",\n linter: Linter.EsLint,\n routing: false,\n directory: normalizedOptions.projectRoot,\n skipTsConfig: false,\n skipPackageJson: true,\n };\n await libraryGenerator(tree, schema);\n\n if (!nonUiExtensionTypes.includes(irisAppExtensionType)) {\n generateFiles(tree, path.join(__dirname, \"files\", \"react-app\"), normalizedOptions.projectRoot, templateOptions);\n }\n\n const rootTsConfigPath = getRootTsConfigPathInTree(tree);\n if (!rootTsConfigPath) {\n throw new Error(\"Could not find root tsconfig.json\");\n }\n updateJson(tree, rootTsConfigPath, tsConfigBase => {\n // For server side extension types, we need to add deno types to the tsconfig and make Typescript accept Deno import syntax\n if (serverSideExtensionTypes.includes(irisAppExtensionType)) {\n tsConfigBase.compilerOptions = {\n ...tsConfigBase.compilerOptions,\n types: [\"deno\"],\n allowImportingTsExtensions: true,\n emitDeclarationOnly: true,\n declaration: true,\n };\n }\n\n tsConfigBase.compilerOptions.paths[normalizedOptions.importPath] = [\n path.join(normalizedOptions.projectRoot, \"extension-manifest.ts\"),\n ];\n return tsConfigBase;\n });\n\n //TODO: Change the following to update the manifest in the virtual Tree - not on the file system.\n const project = new Project({\n tsConfigFilePath: `${getWorkspaceLayout(tree).appsDir}/${normalizedOptions.app}/tsconfig.app.json`,\n });\n\n const manifest = project.getSourceFileOrThrow(manifestPath);\n\n manifest.addImportDeclaration({\n moduleSpecifier: normalizedOptions.importPath,\n defaultImport: normalizedOptions.projectCamelcase,\n });\n\n // Get the default export symbol from the manifest\n const defaultExportSymbol = manifest.getDefaultExportSymbolOrThrow();\n\n // Get the aliased symbol if the default export is an alias\n const aliasedSymbol = defaultExportSymbol.getAliasedSymbol() || defaultExportSymbol;\n\n // Get the declaration of the aliased symbol\n const declaration = aliasedSymbol.getDeclarations()[0];\n\n if (!VariableDeclaration.isVariableDeclaration(declaration)) {\n throw new Error(\"Expected variable declaration\");\n }\n const irisAppManifestObject = declaration.getInitializer()?.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n if (!irisAppManifestObject) {\n throw new Error(`irisAppManifest not exported from the file: ${manifestPath}`);\n }\n // Find the extensions property within the irisAppManifest object\n const extensionsProperty = irisAppManifestObject.getPropertyOrThrow(\"extensions\");\n\n if (extensionsProperty.getKind() === SyntaxKind.PropertyAssignment) {\n const extensionsArray = extensionsProperty.getFirstChildByKindOrThrow(SyntaxKind.ArrayLiteralExpression);\n extensionsArray.addElement(`${normalizedOptions.projectCamelcase}`);\n }\n\n await manifest.save();\n\n if (!serverSideExtensionTypes.includes(irisAppExtensionType)) {\n tree.delete(joinPathFragments(normalizedOptions.projectRoot, \"src\", \"index.ts\"));\n }\n\n updateJson(tree, joinPathFragments(normalizedOptions.projectRoot, \"tsconfig.spec.json\"), tsConfigSpec => {\n // extension-manifest.ts is a build time file, so we only need to include it in the spec file for type/lint checking\n tsConfigSpec.include = [...tsConfigSpec.include, \"extension-manifest.ts\"];\n return tsConfigSpec;\n });\n\n updateFileInTree(tree, joinPathFragments(normalizedOptions.projectRoot, \"jest.config.ts\"), fileContent =>\n addPropertyWithName(fileContent, \"moduleNameMapper\", {\n \"@trackunit/css-core\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-mini.svg\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-outline.svg\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-solid.svg\": \"jest-transform-stub\",\n \"@trackunit/ui-icons/icons-sprite-micro.svg\": \"jest-transform-stub\",\n })\n );\n\n await formatFiles(tree);\n installPackagesTask(tree, true);\n return () => {\n // eslint-disable-next-line no-console\n console.log(\"🥳 Successfully created an app extensions and it is already added to the Iris App!\");\n };\n};\nconst updateAppName = async (tree: Tree, options: IrisAppExtensionGeneratorSchema) => {\n if (!options.app) {\n const folders = fs\n .readdirSync(getWorkspaceLayout(tree).appsDir, { withFileTypes: true })\n .filter(item => item.isDirectory());\n\n const tileApps: string[] = [];\n\n folders.forEach(folder => {\n const irisAppManifest = fs\n .readdirSync(`${getWorkspaceLayout(tree).appsDir}/${folder.name}`, { withFileTypes: true })\n .find(item => item.name === \"iris-app-manifest.ts\");\n\n if (irisAppManifest) {\n tileApps.push(folder.name);\n } else {\n const subFolders = fs\n .readdirSync(path.join(getWorkspaceLayout(tree).appsDir, folder.name), { withFileTypes: true })\n .filter(item => item.isDirectory());\n subFolders.forEach(subFolder => {\n const subDirIrisAppManifest = fs\n .readdirSync(`${getWorkspaceLayout(tree).appsDir}/${folder.name}/${subFolder.name}`, {\n withFileTypes: true,\n })\n .find(item => item.name === \"iris-app-manifest.ts\");\n\n if (subDirIrisAppManifest) {\n tileApps.push(path.join(folder.name, subFolder.name));\n }\n });\n }\n });\n\n if (tileApps.length === 1) {\n options.app = tileApps[0] || \"<Missing iris app name>\";\n } else if (tileApps.length === 0) {\n throw new Error(\"Please add an iris-app using: nx g @trackunit/iris-app:create \");\n } else {\n const promptObject = {\n name: \"app\",\n message: \"Select the iris app that this extension should belong to:\",\n type: \"autocomplete\",\n choices: tileApps.map(item => item),\n };\n await prompt(promptObject).then((values: object) => {\n // @ts-ignore - suppressImplicitAnyIndexErrors\n // eslint-disable-next-line @typescript-eslint/dot-notation\n options.app = values[\"app\"];\n });\n }\n }\n return options;\n};\n\nexport default IrisAppExtensionGenerator;\n"]}
@@ -12,5 +12,7 @@ export interface IrisAppExtensionGeneratorSchema {
12
12
  | "SITE_HOME_EXTENSION"
13
13
  | "CUSTOMER_HOME_EXTENSION"
14
14
  | "ASSET_HOME_EXTENSION"
15
- | "ASSET_EVENTS_ACTIONS_EXTENSION";
15
+ | "ASSET_EVENTS_ACTIONS_EXTENSION"
16
+ | "LIFECYCLE_EXTENSION"
17
+ | "SERVERLESS_FUNCTION_EXTENSION";
16
18
  }
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "type": {
42
42
  "type": "string",
43
- "description": "The type of this extension: ['ASSET_HOME_EXTENSION', 'FLEET_EXTENSION', 'WIDGET_EXTENSION', 'REPORT_EXTENSION', 'ADMIN_EXTENSION', 'CUSTOMER_HOME_EXTENSION', 'SITE_HOME_EXTENSION', 'IRIS_APP_SETTINGS_EXTENSION']",
43
+ "description": "The type of this extension:",
44
44
  "x-prompt": {
45
45
  "message": "Which Iris App extension should be generated?",
46
46
  "type": "list",
@@ -55,7 +55,8 @@
55
55
  "SITE_HOME_EXTENSION",
56
56
  "CUSTOMER_HOME_EXTENSION",
57
57
  "IRIS_APP_SETTINGS_EXTENSION",
58
- "LIFECYCLE_EXTENSION"
58
+ "LIFECYCLE_EXTENSION",
59
+ "SERVERLESS_FUNCTION_EXTENSION"
59
60
  ]
60
61
  }
61
62
  }