@trackunit/iris-app 1.7.121 → 1.7.124

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,33 @@
1
+ ## 1.7.124 (2025-12-04)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated iris-app-build-utilities to 1.7.119
6
+ - Updated iris-app-webpack-plugin to 1.7.120
7
+ - Updated iris-app-api to 1.10.6
8
+ - Updated react-test-setup to 1.4.113
9
+ - Updated shared-utils to 1.9.113
10
+
11
+ ## 1.7.123 (2025-12-04)
12
+
13
+ ### 🧱 Updated Dependencies
14
+
15
+ - Updated iris-app-build-utilities to 1.7.118
16
+ - Updated iris-app-webpack-plugin to 1.7.119
17
+ - Updated iris-app-api to 1.10.5
18
+ - Updated react-test-setup to 1.4.112
19
+ - Updated shared-utils to 1.9.112
20
+
21
+ ## 1.7.122 (2025-12-04)
22
+
23
+ ### 🧱 Updated Dependencies
24
+
25
+ - Updated iris-app-build-utilities to 1.7.117
26
+ - Updated iris-app-webpack-plugin to 1.7.118
27
+ - Updated iris-app-api to 1.10.4
28
+ - Updated react-test-setup to 1.4.111
29
+ - Updated shared-utils to 1.9.111
30
+
1
31
  ## 1.7.121 (2025-12-03)
2
32
 
3
33
  ### 🧱 Updated Dependencies
package/README.md CHANGED
@@ -10,6 +10,22 @@ For more info and a full guide on Iris App SDK Development, please visit our [De
10
10
  ## Getting started
11
11
 
12
12
  Run through the easy getting started guide here: [Getting Started](https://developers.trackunit.com/docs/getting-started)
13
+
14
+ ## Testing Local Changes
15
+
16
+ To test changes to the SDK generators locally, you can verify them in a full, temporary workspace environment.
17
+
18
+ **Command:**
19
+ `yarn run integration-test:local`
20
+
21
+ **What it does:**
22
+ - Generates a temporary workspace containing a full Iris app setup.
23
+ - Allows you to open this temporary workspace in your IDE.
24
+ - Enables you to verify that your changes to generators or other SDK components work as expected in a real environment.
25
+
26
+ **How to open:**
27
+ Look for the phrase `Successfully created the workspace:` in the console output, then command-click the path to open the workspace.
28
+
13
29
  ## Trackunit
14
30
  This package was developed by Trackunit ApS.
15
31
  Trackunit is the leading SaaS-based IoT solution for the construction industry, offering an ecosystem of hardware, fleet management software & telematics.
package/generators.json CHANGED
@@ -18,6 +18,11 @@
18
18
  "schema": "./src/generators/preset/schema.json",
19
19
  "description": "preset generator",
20
20
  "x-use-standalone-layout": true
21
+ },
22
+ "ai-agent-sync": {
23
+ "factory": "./src/generators/ai-agent-sync/generator",
24
+ "schema": "./src/generators/ai-agent-sync/schema.json",
25
+ "description": "Syncs Cursor rules and AI agent configuration files (requires SDK to be at latest version)"
21
26
  }
22
27
  }
23
28
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app",
3
- "version": "1.7.121",
3
+ "version": "1.7.124",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "main": "src/index.js",
6
6
  "generators": "./generators.json",
@@ -32,9 +32,9 @@
32
32
  "@npmcli/arborist": "^7.3.1",
33
33
  "webpack-bundle-analyzer": "^4.8.0",
34
34
  "win-ca": "^3.5.1",
35
- "@trackunit/shared-utils": "1.9.110",
36
- "@trackunit/iris-app-api": "1.10.3",
37
- "@trackunit/iris-app-webpack-plugin": "1.7.117",
35
+ "@trackunit/shared-utils": "1.9.113",
36
+ "@trackunit/iris-app-api": "1.10.6",
37
+ "@trackunit/iris-app-webpack-plugin": "1.7.120",
38
38
  "tslib": "^2.6.2"
39
39
  },
40
40
  "types": "./src/index.d.ts",
@@ -0,0 +1,37 @@
1
+ # AI Agent Sync Generator
2
+
3
+ Syncs Cursor rules and AI agent configuration files to the latest version. Ensures the SDK is at the latest version before applying updates.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ nx g @trackunit/iris-app:ai-agent-sync
9
+ ```
10
+
11
+ ## What it syncs
12
+
13
+ - `.cursor/rules/` - Cursor AI rules for the IrisX App SDK
14
+
15
+ ## Flow
16
+
17
+ ```mermaid
18
+ flowchart TD
19
+ A[Run ai-agent-sync generator] --> B[Ensure update:trackunit script exists]
20
+ B --> C{Skip version check?}
21
+ C -->|Yes| G[Sync AI agent files]
22
+ C -->|No| D[Get installed SDK version]
23
+ D --> E[Fetch latest SDK version from npm]
24
+ E --> F{SDK up to date?}
25
+ F -->|Yes| G
26
+ F -->|No| H[❌ Error: SDK outdated]
27
+ H --> I[Show commands to update]
28
+ I --> J["1. {pm} run update:trackunit<br>2. {pm} install<br>3. Run generator again"]
29
+ G --> K[✅ Done]
30
+ ```
31
+
32
+ ## Options
33
+
34
+ | Option | Type | Default | Description |
35
+ |--------|------|---------|-------------|
36
+ | `skipVersionCheck` | boolean | false | Skip SDK version check (not recommended) |
37
+
@@ -0,0 +1,8 @@
1
+ import { Tree } from "@nx/devkit";
2
+ import { AiAgentSyncGeneratorSchema } from "./schema";
3
+ /**
4
+ * Syncs Cursor rules and AI agent configuration files.
5
+ * Requires the SDK to be at the latest version before running.
6
+ */
7
+ export declare function aiAgentSyncGenerator(tree: Tree, options: AiAgentSyncGeneratorSchema): Promise<void>;
8
+ export default aiAgentSyncGenerator;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.aiAgentSyncGenerator = aiAgentSyncGenerator;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const devkit_exports_1 = require("nx/src/devkit-exports");
7
+ const pacote = tslib_1.__importStar(require("pacote"));
8
+ const path = tslib_1.__importStar(require("path"));
9
+ const semver = tslib_1.__importStar(require("semver"));
10
+ const IRIS_APP_PACKAGE = "@trackunit/iris-app";
11
+ const UPDATE_SCRIPT_NAME = "update:trackunit";
12
+ const UPDATE_SCRIPT_CMD = 'npx npm-check-updates "/@trackunit/" -u';
13
+ function getStringValue(obj, key) {
14
+ if (typeof obj === "object" && obj !== null && key in obj) {
15
+ const value = obj[key];
16
+ return typeof value === "string" ? value : undefined;
17
+ }
18
+ return undefined;
19
+ }
20
+ /**
21
+ * Gets the installed version of @trackunit/iris-app from workspace package.json
22
+ */
23
+ function getInstalledSdkVersion(tree) {
24
+ const pkgJson = JSON.parse(tree.read("package.json", "utf-8") ?? "{}");
25
+ if (typeof pkgJson !== "object" || pkgJson === null) {
26
+ return undefined;
27
+ }
28
+ const pkg = pkgJson;
29
+ return getStringValue(pkg.dependencies, IRIS_APP_PACKAGE) ?? getStringValue(pkg.devDependencies, IRIS_APP_PACKAGE);
30
+ }
31
+ /**
32
+ * Fetches the latest version of @trackunit/iris-app from npm
33
+ */
34
+ async function getLatestSdkVersion() {
35
+ const manifest = await pacote.manifest(IRIS_APP_PACKAGE);
36
+ return manifest.version;
37
+ }
38
+ /**
39
+ * Ensures the update:trackunit script exists in package.json
40
+ */
41
+ function ensureUpdateScript(tree) {
42
+ (0, devkit_1.updateJson)(tree, "package.json", pkgJson => {
43
+ if (!pkgJson.scripts) {
44
+ pkgJson.scripts = {};
45
+ }
46
+ if (!pkgJson.scripts[UPDATE_SCRIPT_NAME]) {
47
+ pkgJson.scripts[UPDATE_SCRIPT_NAME] = UPDATE_SCRIPT_CMD;
48
+ }
49
+ return pkgJson;
50
+ });
51
+ }
52
+ /**
53
+ * Syncs Cursor rules and AI agent configuration files.
54
+ * Requires the SDK to be at the latest version before running.
55
+ */
56
+ async function aiAgentSyncGenerator(tree, options) {
57
+ // Always ensure the update script exists
58
+ ensureUpdateScript(tree);
59
+ // Check SDK version unless skipped
60
+ if (!options.skipVersionCheck) {
61
+ const installedVersion = getInstalledSdkVersion(tree);
62
+ const latestVersion = await getLatestSdkVersion();
63
+ if (!installedVersion) {
64
+ throw new Error(`${IRIS_APP_PACKAGE} not found in package.json. Is this an Iris App SDK workspace?`);
65
+ }
66
+ const installed = semver.minVersion(installedVersion);
67
+ if (!installed || semver.lt(installed, latestVersion)) {
68
+ const pm = (0, devkit_exports_1.detectPackageManager)();
69
+ const pmCmd = (0, devkit_exports_1.getPackageManagerCommand)(pm);
70
+ throw new Error(`${IRIS_APP_PACKAGE} is outdated (installed: ${installedVersion}, latest: ${latestVersion}).\n\n` +
71
+ `Run the following commands first:\n` +
72
+ ` ${pmCmd.run(UPDATE_SCRIPT_NAME)}\n` +
73
+ ` ${pmCmd.install}\n\n` +
74
+ `Then run this generator again.`);
75
+ }
76
+ }
77
+ // Copy Cursor rules and AI agent configuration
78
+ const templatePath = path.join(__dirname, "../preset/files/.cursor");
79
+ (0, devkit_1.generateFiles)(tree, templatePath, ".cursor", {});
80
+ await (0, devkit_1.formatFiles)(tree);
81
+ }
82
+ exports.default = aiAgentSyncGenerator;
83
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/generators/ai-agent-sync/generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tree, formatFiles, generateFiles, updateJson } from \"@nx/devkit\";\nimport { detectPackageManager, getPackageManagerCommand } from \"nx/src/devkit-exports\";\nimport * as pacote from \"pacote\";\nimport * as path from \"path\";\nimport * as semver from \"semver\";\nimport { AiAgentSyncGeneratorSchema } from \"./schema\";\n\nconst IRIS_APP_PACKAGE = \"@trackunit/iris-app\";\nconst UPDATE_SCRIPT_NAME = \"update:trackunit\";\nconst UPDATE_SCRIPT_CMD = 'npx npm-check-updates \"/@trackunit/\" -u';\n\ntype PackageJson = {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n};\n\nfunction getStringValue(obj: unknown, key: string): string | undefined {\n if (typeof obj === \"object\" && obj !== null && key in obj) {\n const value = (obj as Record<string, unknown>)[key];\n return typeof value === \"string\" ? value : undefined;\n }\n return undefined;\n}\n\n/**\n * Gets the installed version of @trackunit/iris-app from workspace package.json\n */\nfunction getInstalledSdkVersion(tree: Tree): string | undefined {\n const pkgJson: unknown = JSON.parse(tree.read(\"package.json\", \"utf-8\") ?? \"{}\");\n if (typeof pkgJson !== \"object\" || pkgJson === null) {\n return undefined;\n }\n const pkg = pkgJson as Record<string, unknown>;\n return getStringValue(pkg.dependencies, IRIS_APP_PACKAGE) ?? getStringValue(pkg.devDependencies, IRIS_APP_PACKAGE);\n}\n\n/**\n * Fetches the latest version of @trackunit/iris-app from npm\n */\nasync function getLatestSdkVersion(): Promise<string> {\n const manifest = await pacote.manifest(IRIS_APP_PACKAGE);\n return manifest.version;\n}\n\n/**\n * Ensures the update:trackunit script exists in package.json\n */\nfunction ensureUpdateScript(tree: Tree): void {\n updateJson<PackageJson, PackageJson>(tree, \"package.json\", pkgJson => {\n if (!pkgJson.scripts) {\n pkgJson.scripts = {};\n }\n if (!pkgJson.scripts[UPDATE_SCRIPT_NAME]) {\n pkgJson.scripts[UPDATE_SCRIPT_NAME] = UPDATE_SCRIPT_CMD;\n }\n return pkgJson;\n });\n}\n\n/**\n * Syncs Cursor rules and AI agent configuration files.\n * Requires the SDK to be at the latest version before running.\n */\nexport async function aiAgentSyncGenerator(tree: Tree, options: AiAgentSyncGeneratorSchema): Promise<void> {\n // Always ensure the update script exists\n ensureUpdateScript(tree);\n\n // Check SDK version unless skipped\n if (!options.skipVersionCheck) {\n const installedVersion = getInstalledSdkVersion(tree);\n const latestVersion = await getLatestSdkVersion();\n\n if (!installedVersion) {\n throw new Error(`${IRIS_APP_PACKAGE} not found in package.json. Is this an Iris App SDK workspace?`);\n }\n\n const installed = semver.minVersion(installedVersion);\n if (!installed || semver.lt(installed, latestVersion)) {\n const pm = detectPackageManager();\n const pmCmd = getPackageManagerCommand(pm);\n\n throw new Error(\n `${IRIS_APP_PACKAGE} is outdated (installed: ${installedVersion}, latest: ${latestVersion}).\\n\\n` +\n `Run the following commands first:\\n` +\n ` ${pmCmd.run(UPDATE_SCRIPT_NAME)}\\n` +\n ` ${pmCmd.install}\\n\\n` +\n `Then run this generator again.`\n );\n }\n }\n\n // Copy Cursor rules and AI agent configuration\n const templatePath = path.join(__dirname, \"../preset/files/.cursor\");\n generateFiles(tree, templatePath, \".cursor\", {});\n\n await formatFiles(tree);\n}\n\nexport default aiAgentSyncGenerator;\n\n"]}
@@ -0,0 +1,4 @@
1
+ export interface AiAgentSyncGeneratorSchema {
2
+ skipVersionCheck?: boolean;
3
+ }
4
+
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "cli": "nx",
4
+ "$id": "AiAgentSync",
5
+ "title": "Sync AI Agent Configuration",
6
+ "description": "Syncs Cursor rules and AI agent configuration files (requires SDK to be at latest version)",
7
+ "type": "object",
8
+ "properties": {
9
+ "skipVersionCheck": {
10
+ "type": "boolean",
11
+ "description": "Skip checking if SDK is at latest version (not recommended)",
12
+ "default": false
13
+ }
14
+ },
15
+ "required": []
16
+ }
17
+
@@ -37,6 +37,14 @@ async function presetGenerator(tree, options) {
37
37
  react: "19.0.0",
38
38
  "react-dom": "19.0.0",
39
39
  }, {});
40
+ // Add update script for @trackunit packages
41
+ (0, devkit_1.updateJson)(tree, "package.json", (pkgJson) => {
42
+ if (!pkgJson.scripts) {
43
+ pkgJson.scripts = {};
44
+ }
45
+ pkgJson.scripts["update:trackunit"] = 'npx npm-check-updates "/@trackunit/" -u';
46
+ return pkgJson;
47
+ });
40
48
  // This react generator adds react 19 and react-dom 19 to the package.json if we don't add react 18 above.
41
49
  const initReact = await (0, react_1.reactInitGenerator)(tree, {});
42
50
  return (0, devkit_1.runTasksInSerial)(jsInitTask, initReact);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/generators/preset/generator.ts"],"names":[],"mappings":";;AAmBA,0CAoDC;;AAvED,uCAQoB;AACpB,+BAA0D;AAC1D,qCAA+C;AAC/C,wDAAwB;AAGxB;;;;GAIG;AACI,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,OAA8B;IAC9E,kBAAkB;IAClB,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,CACR,gBAAgB,EAChB,4LAA4L,CAC7L,CAAC;IACF,IAAI,CAAC,KAAK,CACR,gBAAgB,EAChB,oIAAoI,CACrI,CAAC;IAEF,MAAM,cAAc,GAAG,yBAAyB,CAAC;IAEjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAA,sBAAa,EAAC,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAE5D,IAAA,mBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC3B,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,IAAI,CACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,CAC/B,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,IAAA,kBAAe,EAAC,IAAI,EAAE;QAC7C,GAAG,OAAO;QACV,YAAY,EAAE,oBAAoB;QAClC,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,IAAA,qCAA4B,EAC1B,IAAI,EACJ;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,QAAQ;KACtB,EACD,EAAE,CACH,CAAC;IAEF,0GAA0G;IAC1G,MAAM,SAAS,GAAG,MAAM,IAAA,0BAAkB,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAErD,OAAO,IAAA,yBAAgB,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,kBAAe,eAAe,CAAC;AAE/B,SAAS,qBAAqB,CAAC,IAAU;IACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,eAAe,GAAG;QACvB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;KAChB,CAAC;IACF,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["import {\n Tree,\n addDependenciesToPackageJson,\n generateFiles,\n readNxJson,\n runTasksInSerial,\n updateJson,\n updateNxJson,\n} from \"@nx/devkit\";\nimport { initGenerator as jsInitGenerator } from \"@nx/js\";\nimport { reactInitGenerator } from \"@nx/react\";\nimport path from \"path\";\nimport { PresetGeneratorSchema } from \"./schema\";\n\n/**\n * Preset generator for Iris apps workspace.\n * Use with create-nx-workspace to create a new workspace for developing Iris apps.\n * ```npx create-nx-workspace --preset=iris-app```\n */\nexport async function presetGenerator(tree: Tree, options: PresetGeneratorSchema) {\n // setup workspace\n updateWorkspaceLayout(tree);\n tree.write(\n \"apps/readme.md\",\n `# Apps\\n\\nThis folder contains all apps in the workspace.\\n\\nApps are the main entry point for the Iris App SDK.\\nCreate an app by running \\`nx g @trackunit/iris-app:create <app-name>\\`.`\n );\n tree.write(\n \"libs/readme.md\",\n `# Libs\\n\\nThis folder contains all libs in the workspace.\\nCreate a lib by running \\`nx g @trackunit/iris-app:extend <lib-name>\\`.`\n );\n\n const extensionsPath = \".vscode/extensions.json\";\n\n if (!tree.exists(extensionsPath)) {\n tree.write(extensionsPath, \"{}\");\n }\n\n generateFiles(tree, path.join(__dirname, \"files\"), \".\", {});\n\n updateJson(tree, extensionsPath, value => {\n if (!value.recommendations) {\n value.recommendations = [];\n }\n value.recommendations.push(\n \"graphql.vscode-graphql\",\n \"graphql.vscode-graphql-syntax\",\n \"bradlc.vscode-tailwindcss\",\n \"firsttris.vscode-jest-runner\"\n );\n return value;\n });\n\n const jsInitTask = await jsInitGenerator(tree, {\n ...options,\n tsConfigName: \"tsconfig.base.json\",\n skipFormat: true,\n });\n\n addDependenciesToPackageJson(\n tree,\n {\n react: \"19.0.0\",\n \"react-dom\": \"19.0.0\",\n },\n {}\n );\n\n // This react generator adds react 19 and react-dom 19 to the package.json if we don't add react 18 above.\n const initReact = await reactInitGenerator(tree, {});\n\n return runTasksInSerial(jsInitTask, initReact);\n}\n\nexport default presetGenerator;\n\nfunction updateWorkspaceLayout(tree: Tree) {\n const nxJson = readNxJson(tree) ?? {};\n nxJson.workspaceLayout = {\n libsDir: \"libs\",\n appsDir: \"apps\",\n };\n updateNxJson(tree, nxJson);\n}\n"]}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app/src/generators/preset/generator.ts"],"names":[],"mappings":";;AAmBA,0CA6DC;;AAhFD,uCAQoB;AACpB,+BAA0D;AAC1D,qCAA+C;AAC/C,wDAAwB;AAGxB;;;;GAIG;AACI,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,OAA8B;IAC9E,kBAAkB;IAClB,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,CACR,gBAAgB,EAChB,4LAA4L,CAC7L,CAAC;IACF,IAAI,CAAC,KAAK,CACR,gBAAgB,EAChB,oIAAoI,CACrI,CAAC;IAEF,MAAM,cAAc,GAAG,yBAAyB,CAAC;IAEjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAA,sBAAa,EAAC,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAE5D,IAAA,mBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC3B,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,IAAI,CACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,CAC/B,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,IAAA,kBAAe,EAAC,IAAI,EAAE;QAC7C,GAAG,OAAO;QACV,YAAY,EAAE,oBAAoB;QAClC,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,IAAA,qCAA4B,EAC1B,IAAI,EACJ;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,QAAQ;KACtB,EACD,EAAE,CACH,CAAC;IAEF,4CAA4C;IAC5C,IAAA,mBAAU,EAAC,IAAI,EAAE,cAAc,EAAE,CAAC,OAA6C,EAAE,EAAE;QACjF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,yCAAyC,CAAC;QAChF,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,0GAA0G;IAC1G,MAAM,SAAS,GAAG,MAAM,IAAA,0BAAkB,EAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAErD,OAAO,IAAA,yBAAgB,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,kBAAe,eAAe,CAAC;AAE/B,SAAS,qBAAqB,CAAC,IAAU;IACvC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,CAAC,eAAe,GAAG;QACvB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;KAChB,CAAC;IACF,IAAA,qBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["import {\n Tree,\n addDependenciesToPackageJson,\n generateFiles,\n readNxJson,\n runTasksInSerial,\n updateJson,\n updateNxJson,\n} from \"@nx/devkit\";\nimport { initGenerator as jsInitGenerator } from \"@nx/js\";\nimport { reactInitGenerator } from \"@nx/react\";\nimport path from \"path\";\nimport { PresetGeneratorSchema } from \"./schema\";\n\n/**\n * Preset generator for Iris apps workspace.\n * Use with create-nx-workspace to create a new workspace for developing Iris apps.\n * ```npx create-nx-workspace --preset=iris-app```\n */\nexport async function presetGenerator(tree: Tree, options: PresetGeneratorSchema) {\n // setup workspace\n updateWorkspaceLayout(tree);\n tree.write(\n \"apps/readme.md\",\n `# Apps\\n\\nThis folder contains all apps in the workspace.\\n\\nApps are the main entry point for the Iris App SDK.\\nCreate an app by running \\`nx g @trackunit/iris-app:create <app-name>\\`.`\n );\n tree.write(\n \"libs/readme.md\",\n `# Libs\\n\\nThis folder contains all libs in the workspace.\\nCreate a lib by running \\`nx g @trackunit/iris-app:extend <lib-name>\\`.`\n );\n\n const extensionsPath = \".vscode/extensions.json\";\n\n if (!tree.exists(extensionsPath)) {\n tree.write(extensionsPath, \"{}\");\n }\n\n generateFiles(tree, path.join(__dirname, \"files\"), \".\", {});\n\n updateJson(tree, extensionsPath, value => {\n if (!value.recommendations) {\n value.recommendations = [];\n }\n value.recommendations.push(\n \"graphql.vscode-graphql\",\n \"graphql.vscode-graphql-syntax\",\n \"bradlc.vscode-tailwindcss\",\n \"firsttris.vscode-jest-runner\"\n );\n return value;\n });\n\n const jsInitTask = await jsInitGenerator(tree, {\n ...options,\n tsConfigName: \"tsconfig.base.json\",\n skipFormat: true,\n });\n\n addDependenciesToPackageJson(\n tree,\n {\n react: \"19.0.0\",\n \"react-dom\": \"19.0.0\",\n },\n {}\n );\n\n // Add update script for @trackunit packages\n updateJson(tree, \"package.json\", (pkgJson: { scripts?: Record<string, string> }) => {\n if (!pkgJson.scripts) {\n pkgJson.scripts = {};\n }\n pkgJson.scripts[\"update:trackunit\"] = 'npx npm-check-updates \"/@trackunit/\" -u';\n return pkgJson;\n });\n\n // This react generator adds react 19 and react-dom 19 to the package.json if we don't add react 18 above.\n const initReact = await reactInitGenerator(tree, {});\n\n return runTasksInSerial(jsInitTask, initReact);\n}\n\nexport default presetGenerator;\n\nfunction updateWorkspaceLayout(tree: Tree) {\n const nxJson = readNxJson(tree) ?? {};\n nxJson.workspaceLayout = {\n libsDir: \"libs\",\n appsDir: \"apps\",\n };\n updateNxJson(tree, nxJson);\n}\n"]}