@interopio/iocd-cli 0.0.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/README.md +40 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +96 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/apps.command.d.ts +3 -0
- package/dist/commands/apps.command.d.ts.map +1 -0
- package/dist/commands/apps.command.js +110 -0
- package/dist/commands/apps.command.js.map +1 -0
- package/dist/commands/components.command.d.ts +3 -0
- package/dist/commands/components.command.d.ts.map +1 -0
- package/dist/commands/components.command.js +116 -0
- package/dist/commands/components.command.js.map +1 -0
- package/dist/commands/create.command.d.ts +3 -0
- package/dist/commands/create.command.d.ts.map +1 -0
- package/dist/commands/create.command.js +19 -0
- package/dist/commands/create.command.js.map +1 -0
- package/dist/commands/dev.command.d.ts +4 -0
- package/dist/commands/dev.command.d.ts.map +1 -0
- package/dist/commands/dev.command.js +25 -0
- package/dist/commands/dev.command.js.map +1 -0
- package/dist/commands/installer.command.d.ts +3 -0
- package/dist/commands/installer.command.d.ts.map +1 -0
- package/dist/commands/installer.command.js +19 -0
- package/dist/commands/installer.command.js.map +1 -0
- package/dist/commands/license.command.d.ts +3 -0
- package/dist/commands/license.command.d.ts.map +1 -0
- package/dist/commands/license.command.js +23 -0
- package/dist/commands/license.command.js.map +1 -0
- package/dist/commands/modifications.command.d.ts +3 -0
- package/dist/commands/modifications.command.d.ts.map +1 -0
- package/dist/commands/modifications.command.js +28 -0
- package/dist/commands/modifications.command.js.map +1 -0
- package/dist/commands/setup.command.d.ts +4 -0
- package/dist/commands/setup.command.d.ts.map +1 -0
- package/dist/commands/setup.command.js +34 -0
- package/dist/commands/setup.command.js.map +1 -0
- package/dist/services/app-builder.service.d.ts +2 -0
- package/dist/services/app-builder.service.d.ts.map +1 -0
- package/dist/services/app-builder.service.js +3 -0
- package/dist/services/app-builder.service.js.map +1 -0
- package/dist/services/app.service.d.ts +74 -0
- package/dist/services/app.service.d.ts.map +1 -0
- package/dist/services/app.service.js +328 -0
- package/dist/services/app.service.js.map +1 -0
- package/dist/services/components/component.config.d.ts +11 -0
- package/dist/services/components/component.config.d.ts.map +1 -0
- package/dist/services/components/component.config.js +101 -0
- package/dist/services/components/component.config.js.map +1 -0
- package/dist/services/components/component.d.ts +12 -0
- package/dist/services/components/component.d.ts.map +1 -0
- package/dist/services/components/component.js +3 -0
- package/dist/services/components/component.js.map +1 -0
- package/dist/services/components/components.registry.d.ts +40 -0
- package/dist/services/components/components.registry.d.ts.map +1 -0
- package/dist/services/components/components.registry.js +72 -0
- package/dist/services/components/components.registry.js.map +1 -0
- package/dist/services/components/components.service.d.ts +20 -0
- package/dist/services/components/components.service.d.ts.map +1 -0
- package/dist/services/components/components.service.js +171 -0
- package/dist/services/components/components.service.js.map +1 -0
- package/dist/services/components/file.helper.d.ts +12 -0
- package/dist/services/components/file.helper.d.ts.map +1 -0
- package/dist/services/components/file.helper.js +124 -0
- package/dist/services/components/file.helper.js.map +1 -0
- package/dist/services/components/platform.utils.d.ts +72 -0
- package/dist/services/components/platform.utils.d.ts.map +1 -0
- package/dist/services/components/platform.utils.js +156 -0
- package/dist/services/components/platform.utils.js.map +1 -0
- package/dist/services/components/stores/github.store.d.ts +35 -0
- package/dist/services/components/stores/github.store.d.ts.map +1 -0
- package/dist/services/components/stores/github.store.js +157 -0
- package/dist/services/components/stores/github.store.js.map +1 -0
- package/dist/services/components/stores/local.store.d.ts +69 -0
- package/dist/services/components/stores/local.store.d.ts.map +1 -0
- package/dist/services/components/stores/local.store.js +300 -0
- package/dist/services/components/stores/local.store.js.map +1 -0
- package/dist/services/components/stores/s3.store.d.ts +98 -0
- package/dist/services/components/stores/s3.store.d.ts.map +1 -0
- package/dist/services/components/stores/s3.store.js +368 -0
- package/dist/services/components/stores/s3.store.js.map +1 -0
- package/dist/services/components/stores/store.d.ts +11 -0
- package/dist/services/components/stores/store.d.ts.map +1 -0
- package/dist/services/components/stores/store.js +3 -0
- package/dist/services/components/stores/store.js.map +1 -0
- package/dist/services/config/cli.config.d.ts +57 -0
- package/dist/services/config/cli.config.d.ts.map +1 -0
- package/dist/services/config/cli.config.js +3 -0
- package/dist/services/config/cli.config.js.map +1 -0
- package/dist/services/config/config.service.d.ts +14 -0
- package/dist/services/config/config.service.d.ts.map +1 -0
- package/dist/services/config/config.service.js +170 -0
- package/dist/services/config/config.service.js.map +1 -0
- package/dist/services/create.service.d.ts +58 -0
- package/dist/services/create.service.d.ts.map +1 -0
- package/dist/services/create.service.js +318 -0
- package/dist/services/create.service.js.map +1 -0
- package/dist/services/dev.service.d.ts +2 -0
- package/dist/services/dev.service.d.ts.map +1 -0
- package/dist/services/dev.service.js +78 -0
- package/dist/services/dev.service.js.map +1 -0
- package/dist/services/installer/electronBuilder.d.ts +2 -0
- package/dist/services/installer/electronBuilder.d.ts.map +1 -0
- package/dist/services/installer/electronBuilder.js +3 -0
- package/dist/services/installer/electronBuilder.js.map +1 -0
- package/dist/services/installer/electronForge.d.ts +2 -0
- package/dist/services/installer/electronForge.d.ts.map +1 -0
- package/dist/services/installer/electronForge.js +248 -0
- package/dist/services/installer/electronForge.js.map +1 -0
- package/dist/services/installer/installer.service.d.ts +5 -0
- package/dist/services/installer/installer.service.d.ts.map +1 -0
- package/dist/services/installer/installer.service.js +101 -0
- package/dist/services/installer/installer.service.js.map +1 -0
- package/dist/services/installer/macOS.helper.d.ts +3 -0
- package/dist/services/installer/macOS.helper.d.ts.map +1 -0
- package/dist/services/installer/macOS.helper.js +244 -0
- package/dist/services/installer/macOS.helper.js.map +1 -0
- package/dist/services/installer/prerequisites.d.ts +2 -0
- package/dist/services/installer/prerequisites.d.ts.map +1 -0
- package/dist/services/installer/prerequisites.js +73 -0
- package/dist/services/installer/prerequisites.js.map +1 -0
- package/dist/services/installer/windows.helper.d.ts +10 -0
- package/dist/services/installer/windows.helper.d.ts.map +1 -0
- package/dist/services/installer/windows.helper.js +394 -0
- package/dist/services/installer/windows.helper.js.map +1 -0
- package/dist/services/license.service.d.ts +7 -0
- package/dist/services/license.service.d.ts.map +1 -0
- package/dist/services/license.service.js +14 -0
- package/dist/services/license.service.js.map +1 -0
- package/dist/services/modifications/macOS.helper.d.ts +13 -0
- package/dist/services/modifications/macOS.helper.d.ts.map +1 -0
- package/dist/services/modifications/macOS.helper.js +274 -0
- package/dist/services/modifications/macOS.helper.js.map +1 -0
- package/dist/services/modifications/modifications.service.d.ts +2 -0
- package/dist/services/modifications/modifications.service.d.ts.map +1 -0
- package/dist/services/modifications/modifications.service.js +376 -0
- package/dist/services/modifications/modifications.service.js.map +1 -0
- package/dist/services/modifications/windows.helper.d.ts +2 -0
- package/dist/services/modifications/windows.helper.d.ts.map +1 -0
- package/dist/services/modifications/windows.helper.js +83 -0
- package/dist/services/modifications/windows.helper.js.map +1 -0
- package/dist/services/template.service.d.ts +116 -0
- package/dist/services/template.service.d.ts.map +1 -0
- package/dist/services/template.service.js +354 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/templates/auto-tests/README.md +31 -0
- package/dist/templates/auto-tests/playwright.config.js +19 -0
- package/dist/templates/auto-tests/template.json +12 -0
- package/dist/templates/auto-tests/tests/basic.test.js +15 -0
- package/dist/templates/ioconnect-desktop/.env.example +29 -0
- package/dist/templates/ioconnect-desktop/.github/workflows/build-installers.yml +170 -0
- package/dist/templates/ioconnect-desktop/LICENSE +0 -0
- package/dist/templates/ioconnect-desktop/README.md +0 -0
- package/dist/templates/ioconnect-desktop/config/mac-build/entitlements.mac.plist +44 -0
- package/dist/templates/ioconnect-desktop/config/win-build/template.nuspectemplate +33 -0
- package/dist/templates/ioconnect-desktop/forge.config.js +47 -0
- package/dist/templates/ioconnect-desktop/iocd.cli.config.json +45 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.icns +0 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.ico +0 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/assets/images/logo.png +0 -0
- package/dist/templates/ioconnect-desktop/modifications/iocd/config/system.json.merge +3 -0
- package/dist/templates/ioconnect-desktop/package.json +43 -0
- package/dist/templates/ioconnect-desktop/template.json +7 -0
- package/dist/templates/launchpad/apps/launchpad/.eslintrc.json +3 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +57 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.prod.json +2 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.system.dev.json +3 -0
- package/dist/templates/launchpad/apps/launchpad/config/iocd.system.prod.json +3 -0
- package/dist/templates/launchpad/apps/launchpad/index.html +16 -0
- package/dist/templates/launchpad/apps/launchpad/iocd.app.json +32 -0
- package/dist/templates/launchpad/apps/launchpad/package-lock.json +2778 -0
- package/dist/templates/launchpad/apps/launchpad/package.json +21 -0
- package/dist/templates/launchpad/apps/launchpad/public/favicon.ico +0 -0
- package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +39 -0
- package/dist/templates/launchpad/apps/launchpad/src/app/constants.ts +27 -0
- package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +11 -0
- package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +162 -0
- package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +44 -0
- package/dist/templates/launchpad/apps/launchpad/src/main.tsx +6 -0
- package/dist/templates/launchpad/apps/launchpad/src/styles.css +17 -0
- package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -0
- package/dist/templates/launchpad/apps/launchpad/vite.config.ts +13 -0
- package/dist/templates/launchpad/template.json +12 -0
- package/dist/templates/splash-screen/apps/splash-screen/README.md +119 -0
- package/dist/templates/splash-screen/apps/splash-screen/config/system-dev.json +9 -0
- package/dist/templates/splash-screen/apps/splash-screen/config/system-prod.json +8 -0
- package/dist/templates/splash-screen/apps/splash-screen/index.html +55 -0
- package/dist/templates/splash-screen/apps/splash-screen/iocd.app.json +20 -0
- package/dist/templates/splash-screen/apps/splash-screen/package-lock.json +1059 -0
- package/dist/templates/splash-screen/apps/splash-screen/package.json +17 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/fonts/PTSans-Regular.ttf +0 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/images/logo-light.svg +85 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/images/splash-bg.png +0 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.css +149 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.css.map +1 -0
- package/dist/templates/splash-screen/apps/splash-screen/public/assets/styles/style.scss +90 -0
- package/dist/templates/splash-screen/apps/splash-screen/src/main.ts +93 -0
- package/dist/templates/splash-screen/apps/splash-screen/src/types.ts +28 -0
- package/dist/templates/splash-screen/apps/splash-screen/tsconfig.json +25 -0
- package/dist/templates/splash-screen/apps/splash-screen/vite.config.ts +27 -0
- package/dist/templates/splash-screen/template.json +12 -0
- package/dist/templates/web-groups/apps/web-groups/README.md +15 -0
- package/dist/templates/web-groups/apps/web-groups/config/web-group-dev.json +13 -0
- package/dist/templates/web-groups/apps/web-groups/config/web-group-prod.json +12 -0
- package/dist/templates/web-groups/apps/web-groups/index.html +18 -0
- package/dist/templates/web-groups/apps/web-groups/iocd.app.json +24 -0
- package/dist/templates/web-groups/apps/web-groups/package.json +28 -0
- package/dist/templates/web-groups/apps/web-groups/public/favicon.ico +0 -0
- package/dist/templates/web-groups/apps/web-groups/public/logo192.png +0 -0
- package/dist/templates/web-groups/apps/web-groups/public/logo512.png +0 -0
- package/dist/templates/web-groups/apps/web-groups/public/manifest.json +25 -0
- package/dist/templates/web-groups/apps/web-groups/public/robots.txt +3 -0
- package/dist/templates/web-groups/apps/web-groups/src/App.css +38 -0
- package/dist/templates/web-groups/apps/web-groups/src/App.tsx +11 -0
- package/dist/templates/web-groups/apps/web-groups/src/index.css +13 -0
- package/dist/templates/web-groups/apps/web-groups/src/index.tsx +25 -0
- package/dist/templates/web-groups/apps/web-groups/src/logo.svg +1 -0
- package/dist/templates/web-groups/apps/web-groups/src/reportWebVitals.ts +15 -0
- package/dist/templates/web-groups/apps/web-groups/tsconfig.json +26 -0
- package/dist/templates/web-groups/apps/web-groups/vite.config.ts +8 -0
- package/dist/templates/web-groups/template.json +12 -0
- package/dist/templates/workspaces/apps/workspaces/README.md +15 -0
- package/dist/templates/workspaces/apps/workspaces/config/workspaces-dev.json +21 -0
- package/dist/templates/workspaces/apps/workspaces/config/workspaces-prod.json +20 -0
- package/dist/templates/workspaces/apps/workspaces/index.html +17 -0
- package/dist/templates/workspaces/apps/workspaces/iocd.app.json +24 -0
- package/dist/templates/workspaces/apps/workspaces/package.json +29 -0
- package/dist/templates/workspaces/apps/workspaces/public/favicon.ico +0 -0
- package/dist/templates/workspaces/apps/workspaces/public/logo192.png +0 -0
- package/dist/templates/workspaces/apps/workspaces/public/logo512.png +0 -0
- package/dist/templates/workspaces/apps/workspaces/public/manifest.json +25 -0
- package/dist/templates/workspaces/apps/workspaces/public/robots.txt +3 -0
- package/dist/templates/workspaces/apps/workspaces/src/AddWindowButton.tsx +33 -0
- package/dist/templates/workspaces/apps/workspaces/src/AfterTabs.tsx +27 -0
- package/dist/templates/workspaces/apps/workspaces/src/App.css +38 -0
- package/dist/templates/workspaces/apps/workspaces/src/App.tsx +103 -0
- package/dist/templates/workspaces/apps/workspaces/src/GroupHeaderButtons.tsx +9 -0
- package/dist/templates/workspaces/apps/workspaces/src/index.css +4 -0
- package/dist/templates/workspaces/apps/workspaces/src/index.tsx +28 -0
- package/dist/templates/workspaces/apps/workspaces/src/logo.svg +7 -0
- package/dist/templates/workspaces/apps/workspaces/src/reportWebVitals.ts +15 -0
- package/dist/templates/workspaces/apps/workspaces/src/setupTests.ts +5 -0
- package/dist/templates/workspaces/apps/workspaces/src/useAddWindowButtonVisible.tsx +30 -0
- package/dist/templates/workspaces/apps/workspaces/tsconfig.json +26 -0
- package/dist/templates/workspaces/apps/workspaces/vite.config.ts +8 -0
- package/dist/templates/workspaces/template.json +12 -0
- package/dist/tools/rcedit-x64.exe +0 -0
- package/dist/utils/colors.d.ts +57 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +151 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/deep.merge.d.ts +5 -0
- package/dist/utils/deep.merge.d.ts.map +1 -0
- package/dist/utils/deep.merge.js +27 -0
- package/dist/utils/deep.merge.js.map +1 -0
- package/dist/utils/electron.builder.config.helper.d.ts +6 -0
- package/dist/utils/electron.builder.config.helper.d.ts.map +1 -0
- package/dist/utils/electron.builder.config.helper.js +25 -0
- package/dist/utils/electron.builder.config.helper.js.map +1 -0
- package/dist/utils/ensure.iocd.exists.d.ts +2 -0
- package/dist/utils/ensure.iocd.exists.d.ts.map +1 -0
- package/dist/utils/ensure.iocd.exists.js +27 -0
- package/dist/utils/ensure.iocd.exists.js.map +1 -0
- package/dist/utils/error.handler.d.ts +30 -0
- package/dist/utils/error.handler.d.ts.map +1 -0
- package/dist/utils/error.handler.js +104 -0
- package/dist/utils/error.handler.js.map +1 -0
- package/dist/utils/file.d.ts +10 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +40 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/find.package.dir.d.ts +2 -0
- package/dist/utils/find.package.dir.d.ts.map +1 -0
- package/dist/utils/find.package.dir.js +23 -0
- package/dist/utils/find.package.dir.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +184 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/nextSteps.d.ts +2 -0
- package/dist/utils/nextSteps.d.ts.map +1 -0
- package/dist/utils/nextSteps.js +44 -0
- package/dist/utils/nextSteps.js.map +1 -0
- package/dist/utils/pacakge.json.helper.d.ts +9 -0
- package/dist/utils/pacakge.json.helper.d.ts.map +1 -0
- package/dist/utils/pacakge.json.helper.js +71 -0
- package/dist/utils/pacakge.json.helper.js.map +1 -0
- package/dist/utils/path.d.ts +19 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +81 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +16 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +69 -0
- package/tools/rcedit-x64.exe +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.command.js","sourceRoot":"","sources":["../../src/commands/setup.command.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,4CAAyC;AACzC,0DAAsD;AACtD,kFAA8E;AAC9E,yDAAqD;AACrD,kDAAoD;AAGpD,MAAM,MAAM,GAAG,eAAM,CAAC,WAAW,EAAE,CAAC;AAEvB,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEQ,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,oGAAoG,CAAC;KACjH,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACrD,MAAM,IAAI,sCAAiB,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAClD,MAAM,IAAI,wBAAU,EAAE,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,IAAA,0BAAc,EACZ;YACE,0DAA0D;YAC1D,+DAA+D;SAChE,CACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4BAAY,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-builder.service.d.ts","sourceRoot":"","sources":["../../src/services/app-builder.service.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-builder.service.js","sourceRoot":"","sources":["../../src/services/app-builder.service.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
interface AppConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
config: {
|
|
5
|
+
dev?: {
|
|
6
|
+
script: string;
|
|
7
|
+
modifications: Array<{
|
|
8
|
+
source: string;
|
|
9
|
+
destination: string;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
prod?: {
|
|
13
|
+
script: string;
|
|
14
|
+
modifications: Array<{
|
|
15
|
+
source: string;
|
|
16
|
+
destination: string;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Service for managing template applications.
|
|
23
|
+
*
|
|
24
|
+
* This service:
|
|
25
|
+
* 1. Discovers all apps in the apps/ folder of generated projects
|
|
26
|
+
* 2. Installs dependencies for all apps (npm install)
|
|
27
|
+
* 3. Builds apps and copies them to modifications folder (npm run build)
|
|
28
|
+
* 4. Provides progress feedback during operations
|
|
29
|
+
*/
|
|
30
|
+
export declare class AppService {
|
|
31
|
+
private logger;
|
|
32
|
+
/**
|
|
33
|
+
* Install dependencies for all applications found in the apps/ directory
|
|
34
|
+
*/
|
|
35
|
+
installAllApps(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Build all applications found in the apps/ directory
|
|
38
|
+
*/
|
|
39
|
+
buildAllApps(): Promise<void>;
|
|
40
|
+
startAllAppsInDevMode(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Build a specific application
|
|
43
|
+
*/
|
|
44
|
+
buildApp(appConfig: AppConfig): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Start a specific application in development mode
|
|
47
|
+
*/
|
|
48
|
+
startAppInDevMode(appName: string): Promise<void>;
|
|
49
|
+
getAllApps(): Promise<AppConfig[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Discover all app directories in the apps/ folder and return detailed app information
|
|
52
|
+
*/
|
|
53
|
+
private discoverApps;
|
|
54
|
+
/**
|
|
55
|
+
* Install dependencies for a specific application
|
|
56
|
+
*/
|
|
57
|
+
private installApp;
|
|
58
|
+
private startAppsInParallel;
|
|
59
|
+
private copyModifications;
|
|
60
|
+
/**
|
|
61
|
+
* Copy a single file, creating destination directory if needed
|
|
62
|
+
*/
|
|
63
|
+
private copyFile;
|
|
64
|
+
/**
|
|
65
|
+
* Copy a directory recursively, wiping out target first if it exists
|
|
66
|
+
*/
|
|
67
|
+
private copyDirectory;
|
|
68
|
+
/**
|
|
69
|
+
* Recursively copy directory contents
|
|
70
|
+
*/
|
|
71
|
+
private copyDirectoryContents;
|
|
72
|
+
}
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=app.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.service.d.ts","sourceRoot":"","sources":["../../src/services/app.service.ts"],"names":[],"mappings":"AAOA,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,GAAG,CAAC,EAAE;YACJ,MAAM,EAAE,MAAM,CAAC;YACf,aAAa,EAAE,KAAK,CAAC;gBACnB,MAAM,EAAE,MAAM,CAAC;gBACf,WAAW,EAAE,MAAM,CAAC;aACrB,CAAC,CAAC;SACJ,CAAC;QACF,IAAI,CAAC,EAAE;YACL,MAAM,EAAE,MAAM,CAAC;YACf,aAAa,EAAE,KAAK,CAAC;gBACnB,MAAM,EAAE,MAAM,CAAC;gBACf,WAAW,EAAE,MAAM,CAAC;aACrB,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB5C;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBnD;;KAEC;IACY,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC1D;;OAEG;IACU,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCjD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAkB/C;;OAEG;IACH,OAAO,CAAC,YAAY;IAmDpB;;OAEG;YACW,UAAU;YAiCV,mBAAmB;IAsBjC,OAAO,CAAC,iBAAiB;IAkDzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAahB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAiB9B"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AppService = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const error_handler_1 = require("../utils/error.handler");
|
|
12
|
+
const concurrently_1 = __importDefault(require("concurrently"));
|
|
13
|
+
/**
|
|
14
|
+
* Service for managing template applications.
|
|
15
|
+
*
|
|
16
|
+
* This service:
|
|
17
|
+
* 1. Discovers all apps in the apps/ folder of generated projects
|
|
18
|
+
* 2. Installs dependencies for all apps (npm install)
|
|
19
|
+
* 3. Builds apps and copies them to modifications folder (npm run build)
|
|
20
|
+
* 4. Provides progress feedback during operations
|
|
21
|
+
*/
|
|
22
|
+
class AppService {
|
|
23
|
+
logger = logger_1.Logger.getInstance();
|
|
24
|
+
/**
|
|
25
|
+
* Install dependencies for all applications found in the apps/ directory
|
|
26
|
+
*/
|
|
27
|
+
async installAllApps() {
|
|
28
|
+
const appsDir = (0, path_1.join)(process.cwd(), 'apps');
|
|
29
|
+
if (!(0, fs_1.existsSync)(appsDir)) {
|
|
30
|
+
this.logger.debug('No apps/ directory found - skipping app installs');
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const apps = this.discoverApps(appsDir);
|
|
34
|
+
if (apps.length === 0) {
|
|
35
|
+
this.logger.info('No applications found in apps/ directory');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.logger.info(`Found ${apps.length} applications to install dependencies for:`);
|
|
39
|
+
apps.forEach(app => this.logger.info(` - ${app.name}`));
|
|
40
|
+
for (const app of apps) {
|
|
41
|
+
await this.installApp(app);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build all applications found in the apps/ directory
|
|
46
|
+
*/
|
|
47
|
+
async buildAllApps() {
|
|
48
|
+
const appsDir = (0, path_1.join)(process.cwd(), 'apps');
|
|
49
|
+
if (!(0, fs_1.existsSync)(appsDir)) {
|
|
50
|
+
this.logger.debug('No apps/ directory found - skipping app builds');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const apps = this.discoverApps(appsDir);
|
|
54
|
+
if (apps.length === 0) {
|
|
55
|
+
this.logger.debug('No applications found in apps/ directory');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.logger.info(`Found ${apps.length} template applications to build: ${apps.map(a => a.name).join(", ")}`);
|
|
59
|
+
for (const app of apps) {
|
|
60
|
+
await this.buildApp(app);
|
|
61
|
+
await this.copyModifications(app, "prod");
|
|
62
|
+
}
|
|
63
|
+
this.logger.info('All template applications built and moved successfully!');
|
|
64
|
+
}
|
|
65
|
+
async startAllAppsInDevMode() {
|
|
66
|
+
const appsDir = (0, path_1.join)(process.cwd(), 'apps');
|
|
67
|
+
if (!(0, fs_1.existsSync)(appsDir)) {
|
|
68
|
+
this.logger.info('No apps/ directory found - skipping app starts');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const apps = this.discoverApps(appsDir);
|
|
72
|
+
if (apps.length === 0) {
|
|
73
|
+
this.logger.info('No applications found in apps/ directory');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.logger.info(`Found ${apps.length} template applications to start in dev mode: ${apps.map(a => a.name).join(", ")}`);
|
|
77
|
+
// read the iocd.app.json and copy modifications
|
|
78
|
+
apps.forEach(app => this.copyModifications(app, "dev"));
|
|
79
|
+
this.startAppsInParallel(apps);
|
|
80
|
+
this.logger.info('All template applications started in dev mode successfully!');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build a specific application
|
|
84
|
+
*/
|
|
85
|
+
async buildApp(appConfig) {
|
|
86
|
+
const appPath = (0, path_1.join)(process.cwd(), 'apps', appConfig.name);
|
|
87
|
+
this.logger.info(`Building application ${appConfig.name}...`);
|
|
88
|
+
try {
|
|
89
|
+
// Check if build script exists
|
|
90
|
+
const packageJsonPath = (0, path_1.join)(appPath, 'package.json');
|
|
91
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
92
|
+
if (!packageJson.scripts?.build) {
|
|
93
|
+
this.logger.warn(`No build script found for ${appConfig.name} - skipping`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Execute npm run build in the app directory
|
|
97
|
+
this.logger.debug(`Executing: npm run build in ${appPath}`);
|
|
98
|
+
(0, child_process_1.execSync)('npm run build', {
|
|
99
|
+
cwd: appPath,
|
|
100
|
+
stdio: 'pipe',
|
|
101
|
+
encoding: 'utf-8'
|
|
102
|
+
});
|
|
103
|
+
this.logger.info(`Application ${appConfig.name} built successfully!`);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
this.logger.error(`Failed to build application ${appConfig.name}: ${error}`);
|
|
107
|
+
throw new error_handler_1.CLIError(`Failed to build application: ${appConfig.name}. ${error}`, { code: error_handler_1.ErrorCode.BUILD_ERROR });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Start a specific application in development mode
|
|
112
|
+
*/
|
|
113
|
+
async startAppInDevMode(appName) {
|
|
114
|
+
const appPath = (0, path_1.join)(process.cwd(), 'apps', appName);
|
|
115
|
+
this.logger.info(`Starting ${appName} in dev mode...`);
|
|
116
|
+
try {
|
|
117
|
+
// Check if build script exists
|
|
118
|
+
const packageJsonPath = (0, path_1.join)(appPath, 'package.json');
|
|
119
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
120
|
+
if (!packageJson.scripts?.build) {
|
|
121
|
+
this.logger.warn(`No build script found for ${appName} - skipping`);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Execute npm run dev in the app directory
|
|
125
|
+
this.logger.debug(`Executing: npm run dev in ${appPath}`);
|
|
126
|
+
(0, child_process_1.exec)('npm run dev', {
|
|
127
|
+
cwd: appPath,
|
|
128
|
+
encoding: 'utf-8'
|
|
129
|
+
});
|
|
130
|
+
this.logger.info(`${appName} started successfully!`);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
this.logger.error(`Failed to start ${appName}: ${error}`);
|
|
134
|
+
throw new error_handler_1.CLIError(`Failed to start application: ${appName}. ${error}`, { code: error_handler_1.ErrorCode.BUILD_ERROR });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async getAllApps() {
|
|
138
|
+
const appsDir = (0, path_1.join)(process.cwd(), 'apps');
|
|
139
|
+
if (!(0, fs_1.existsSync)(appsDir)) {
|
|
140
|
+
this.logger.debug('No apps/ directory found - skipping app listing');
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
const apps = this.discoverApps(appsDir);
|
|
144
|
+
if (apps.length === 0) {
|
|
145
|
+
this.logger.debug('No applications found in apps/ directory');
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
return apps;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Discover all app directories in the apps/ folder and return detailed app information
|
|
152
|
+
*/
|
|
153
|
+
discoverApps(appsDir) {
|
|
154
|
+
try {
|
|
155
|
+
return (0, fs_1.readdirSync)(appsDir)
|
|
156
|
+
.map(item => {
|
|
157
|
+
const appPath = (0, path_1.join)(appsDir, item);
|
|
158
|
+
const isDirectory = (0, fs_1.statSync)(appPath).isDirectory();
|
|
159
|
+
if (!isDirectory) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
const hasPackageJson = (0, fs_1.existsSync)((0, path_1.join)(appPath, 'package.json'));
|
|
163
|
+
const iocdAppJsonPath = (0, path_1.join)(appPath, 'iocd.app.json');
|
|
164
|
+
const hasAppJson = (0, fs_1.existsSync)(iocdAppJsonPath);
|
|
165
|
+
if (!hasPackageJson) {
|
|
166
|
+
this.logger.debug(`Skipping ${item}: no package.json found`);
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
if (!hasAppJson) {
|
|
170
|
+
this.logger.debug(`Skipping ${item}: no iocd.app.json found`);
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
// Parse the iocd.app.json configuration
|
|
175
|
+
const configContent = (0, fs_1.readFileSync)(iocdAppJsonPath, 'utf-8');
|
|
176
|
+
const config = JSON.parse(configContent);
|
|
177
|
+
this.logger.debug(`Discovered app: ${item} with config: ${JSON.stringify(config)}`);
|
|
178
|
+
return {
|
|
179
|
+
name: item,
|
|
180
|
+
path: appPath,
|
|
181
|
+
config: config
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
this.logger.error(`Failed to parse iocd.app.json for ${item}: ${error}`);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
.filter((app) => app !== null);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
this.logger.error(`Error discovering apps: ${error}`);
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Install dependencies for a specific application
|
|
198
|
+
*/
|
|
199
|
+
async installApp(appConfig) {
|
|
200
|
+
const appPath = appConfig.path;
|
|
201
|
+
this.logger.info(`Installing dependencies for ${appConfig.name}...`);
|
|
202
|
+
try {
|
|
203
|
+
// Check if package.json exists
|
|
204
|
+
const packageJsonPath = (0, path_1.join)(appPath, 'package.json');
|
|
205
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
206
|
+
this.logger.warn(` No package.json found for ${appConfig.name} - skipping`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Execute npm install in the app directory
|
|
210
|
+
this.logger.debug(`Executing: npm install in ${appPath}`);
|
|
211
|
+
(0, child_process_1.execSync)('npm install', {
|
|
212
|
+
cwd: appPath,
|
|
213
|
+
stdio: 'pipe',
|
|
214
|
+
encoding: 'utf-8'
|
|
215
|
+
});
|
|
216
|
+
this.logger.info(`Dependencies for ${appConfig.name} installed successfully!`);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
this.logger.error(`Failed to install dependencies for ${appConfig.name}: ${error}`);
|
|
220
|
+
throw new error_handler_1.CLIError(`Failed to install dependencies for application: ${appConfig.name}. ${error}`, { code: error_handler_1.ErrorCode.BUILD_ERROR });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
async startAppsInParallel(apps) {
|
|
224
|
+
const tasks = apps.map(app => ({
|
|
225
|
+
command: 'npm run start',
|
|
226
|
+
name: app.name,
|
|
227
|
+
cwd: app.path
|
|
228
|
+
}));
|
|
229
|
+
this.logger.debug(JSON.stringify(tasks));
|
|
230
|
+
// Start all apps
|
|
231
|
+
(0, concurrently_1.default)(tasks, {
|
|
232
|
+
prefix: 'name', // add app name before each log line
|
|
233
|
+
killOthersOn: ['failure', 'success'], // stop all if one fails
|
|
234
|
+
restartTries: 0,
|
|
235
|
+
}).result.then(() => console.log('All processes exited successfully!'), () => console.error('One of the processes failed'));
|
|
236
|
+
}
|
|
237
|
+
copyModifications(appConfig, mode) {
|
|
238
|
+
const modificationsConfigs = appConfig.config[mode]?.modifications;
|
|
239
|
+
if (!modificationsConfigs) {
|
|
240
|
+
this.logger.warn(`No modifications found for ${appConfig.name} in ${mode} mode - skipping`);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
this.logger.info(`Copying ${modificationsConfigs.length} modification(s) for ${appConfig.name} in ${mode} mode`);
|
|
244
|
+
// Copy each modification
|
|
245
|
+
for (const config of modificationsConfigs) {
|
|
246
|
+
const srcPath = (0, path_1.join)(appConfig.path, config.source);
|
|
247
|
+
const destPath = (0, path_1.join)(process.cwd(), config.destination);
|
|
248
|
+
this.logger.debug(`Copying modification from ${srcPath} to ${destPath}`);
|
|
249
|
+
try {
|
|
250
|
+
// Check if source exists
|
|
251
|
+
if (!(0, fs_1.existsSync)(srcPath)) {
|
|
252
|
+
this.logger.warn(`Source path does not exist: ${srcPath} - skipping`);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
// Get source stats to determine if it's a file or directory
|
|
256
|
+
const srcStats = (0, fs_1.statSync)(srcPath);
|
|
257
|
+
if (srcStats.isFile()) {
|
|
258
|
+
// Handle file copying
|
|
259
|
+
this.copyFile(srcPath, destPath);
|
|
260
|
+
}
|
|
261
|
+
else if (srcStats.isDirectory()) {
|
|
262
|
+
// Handle directory copying
|
|
263
|
+
this.copyDirectory(srcPath, destPath);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
this.logger.warn(`Source is neither file nor directory: ${srcPath} - skipping`);
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
this.logger.debug(`Successfully copied ${config.source} to ${config.destination}`);
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
this.logger.error(`Failed to copy ${config.source} to ${config.destination}: ${error}`);
|
|
273
|
+
throw new error_handler_1.CLIError(`Failed to copy modification for ${appConfig.name}: ${error}`, { code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR });
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
this.logger.info(`Modifications copied successfully!`);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Copy a single file, creating destination directory if needed
|
|
280
|
+
*/
|
|
281
|
+
copyFile(srcPath, destPath) {
|
|
282
|
+
// Ensure destination directory exists
|
|
283
|
+
const destDir = (0, path_1.dirname)(destPath);
|
|
284
|
+
if (!(0, fs_1.existsSync)(destDir)) {
|
|
285
|
+
(0, fs_1.mkdirSync)(destDir, { recursive: true });
|
|
286
|
+
this.logger.debug(`Created destination directory: ${destDir}`);
|
|
287
|
+
}
|
|
288
|
+
// Copy the file
|
|
289
|
+
(0, fs_1.copyFileSync)(srcPath, destPath);
|
|
290
|
+
this.logger.debug(`Copied file: ${srcPath} → ${destPath}`);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Copy a directory recursively, wiping out target first if it exists
|
|
294
|
+
*/
|
|
295
|
+
copyDirectory(srcPath, destPath) {
|
|
296
|
+
// If destination exists, remove it completely
|
|
297
|
+
if ((0, fs_1.existsSync)(destPath)) {
|
|
298
|
+
this.logger.debug(`Removing existing destination directory: ${destPath}`);
|
|
299
|
+
(0, fs_1.rmSync)(destPath, { recursive: true, force: true });
|
|
300
|
+
}
|
|
301
|
+
// Create destination directory
|
|
302
|
+
(0, fs_1.mkdirSync)(destPath, { recursive: true });
|
|
303
|
+
this.logger.debug(`Created destination directory: ${destPath}`);
|
|
304
|
+
// Copy all contents recursively
|
|
305
|
+
this.copyDirectoryContents(srcPath, destPath);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Recursively copy directory contents
|
|
309
|
+
*/
|
|
310
|
+
copyDirectoryContents(srcDir, destDir) {
|
|
311
|
+
const items = (0, fs_1.readdirSync)(srcDir);
|
|
312
|
+
for (const item of items) {
|
|
313
|
+
const srcItemPath = (0, path_1.join)(srcDir, item);
|
|
314
|
+
const destItemPath = (0, path_1.join)(destDir, item);
|
|
315
|
+
const itemStats = (0, fs_1.statSync)(srcItemPath);
|
|
316
|
+
if (itemStats.isFile()) {
|
|
317
|
+
(0, fs_1.copyFileSync)(srcItemPath, destItemPath);
|
|
318
|
+
this.logger.debug(`Copied file: ${srcItemPath} → ${destItemPath}`);
|
|
319
|
+
}
|
|
320
|
+
else if (itemStats.isDirectory()) {
|
|
321
|
+
(0, fs_1.mkdirSync)(destItemPath, { recursive: true });
|
|
322
|
+
this.copyDirectoryContents(srcItemPath, destItemPath);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
exports.AppService = AppService;
|
|
328
|
+
//# sourceMappingURL=app.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.service.js","sourceRoot":"","sources":["../../src/services/app.service.ts"],"names":[],"mappings":";;;;;;AAAA,iDAA+C;AAC/C,2BAAsG;AACtG,+BAAqC;AACrC,4CAAyC;AACzC,0DAA6D;AAC7D,gEAAwC;AAuBxC;;;;;;;;GAQG;AACH,MAAa,UAAU;IACb,MAAM,GAAW,eAAM,CAAC,WAAW,EAAE,CAAC;IAE9C;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,4CAA4C,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAEzD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY;QACvB,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,oCAAoC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7G,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAC9E,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAChC,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,gDAAgD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzH,gDAAgD;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAClF,CAAC;IAED;;KAEC;IACM,KAAK,CAAC,QAAQ,CAAC,SAAoB;QACxC,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAEvE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,SAAS,CAAC,IAAI,aAAa,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YAED,6CAA6C;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;YAE5D,IAAA,wBAAQ,EAAC,eAAe,EAAE;gBACxB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAExE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YAC7E,MAAM,IAAI,wBAAQ,CAChB,gCAAgC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,EAC1D,EAAE,IAAI,EAAE,yBAAS,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,iBAAiB,CAAC,OAAe;QAC5C,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,iBAAiB,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAEvE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,aAAa,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YAE1D,IAAA,oBAAI,EAAC,aAAa,EAAE;gBAClB,GAAG,EAAE,OAAO;gBACZ,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,wBAAwB,CAAC,CAAC;QAEvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;YAC1D,MAAM,IAAI,wBAAQ,CAChB,gCAAgC,OAAO,KAAK,KAAK,EAAE,EACnD,EAAE,IAAI,EAAE,yBAAS,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAe;QAClC,IAAI,CAAC;YACH,OAAO,IAAA,gBAAW,EAAC,OAAO,CAAC;iBACxB,GAAG,CAAC,IAAI,CAAC,EAAE;gBACV,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM,WAAW,GAAG,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;gBAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,cAAc,GAAG,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;gBACjE,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,IAAA,eAAU,EAAC,eAAe,CAAC,CAAC;gBAE/C,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,yBAAyB,CAAC,CAAC;oBAC7D,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,0BAA0B,CAAC,CAAC;oBAC9D,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,CAAC;oBACH,wCAAwC;oBACxC,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAEpF,OAAO;wBACL,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,MAAM;qBACF,CAAC;gBAEjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;oBACzE,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,GAAG,EAAoB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAErD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,SAAoB;QAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACtD,IAAI,CAAC,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,SAAS,CAAC,IAAI,aAAa,CAAC,CAAC;gBAC5E,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YAE1D,IAAA,wBAAQ,EAAC,aAAa,EAAE;gBACtB,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,IAAI,0BAA0B,CAAC,CAAC;QAEjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YACpF,MAAM,IAAI,wBAAQ,CAChB,mDAAmD,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,EAC7E,EAAE,IAAI,EAAE,yBAAS,CAAC,WAAW,EAAE,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,IAAiB;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzC,iBAAiB;QACjB,IAAA,sBAAY,EACV,KAAK,EACL;YACE,MAAM,EAAE,MAAM,EAAQ,oCAAoC;YAC1D,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,wBAAwB;YAC9D,YAAY,EAAE,CAAC;SAChB,CACF,CAAC,MAAM,CAAC,IAAI,CACX,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,EACvD,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CACnD,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,SAAoB,EAAE,IAAoB;QAClE,MAAM,oBAAoB,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAEnE,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,SAAS,CAAC,IAAI,OAAO,IAAI,kBAAkB,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,oBAAoB,CAAC,MAAM,wBAAwB,SAAS,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC;QAEjH,yBAAyB;QACzB,KAAK,MAAM,MAAM,IAAI,oBAAoB,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAEzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,OAAO,QAAQ,EAAE,CAAC,CAAC;YAEzE,IAAI,CAAC;gBACH,yBAAyB;gBACzB,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,OAAO,aAAa,CAAC,CAAC;oBACtE,SAAS;gBACX,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC;gBAEnC,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;oBACtB,sBAAsB;oBACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACnC,CAAC;qBAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;oBAClC,2BAA2B;oBAC3B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,OAAO,aAAa,CAAC,CAAC;oBAChF,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACrF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC,CAAC;gBACxF,MAAM,IAAI,wBAAQ,CAChB,mCAAmC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,EAC7D,EAAE,IAAI,EAAE,yBAAS,CAAC,iBAAiB,EAAE,CACtC,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,OAAe,EAAE,QAAgB;QAChD,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAA,cAAS,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,gBAAgB;QAChB,IAAA,iBAAY,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,MAAM,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAe,EAAE,QAAgB;QACrD,8CAA8C;QAC9C,IAAI,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;YAC1E,IAAA,WAAM,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,+BAA+B;QAC/B,IAAA,cAAS,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;QAEhE,gCAAgC;QAChC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,MAAc,EAAE,OAAe;QAC3D,MAAM,KAAK,GAAG,IAAA,gBAAW,EAAC,MAAM,CAAC,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,IAAA,aAAQ,EAAC,WAAW,CAAC,CAAC;YAExC,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,IAAA,iBAAY,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,WAAW,MAAM,YAAY,EAAE,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnC,IAAA,cAAS,EAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAtYD,gCAsYC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ComponentsConfig {
|
|
2
|
+
postInstall: {
|
|
3
|
+
modifications: Modification[];
|
|
4
|
+
};
|
|
5
|
+
}
|
|
6
|
+
export interface Modification {
|
|
7
|
+
source: string;
|
|
8
|
+
destination: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function copyModifications(baseDir: string, componentJsonPath: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=component.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.config.d.ts","sourceRoot":"","sources":["../../../src/services/components/component.config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE;QACT,aAAa,EAAE,YAAY,EAAE,CAAC;KACjC,CAAA;CACJ;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDjG"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyModifications = copyModifications;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const logger_1 = require("../../utils/logger");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const error_handler_1 = require("../../utils/error.handler");
|
|
8
|
+
const logger = logger_1.Logger.getInstance();
|
|
9
|
+
async function copyModifications(baseDir, componentJsonPath) {
|
|
10
|
+
const configJSON = JSON.parse((0, fs_1.readFileSync)(componentJsonPath, 'utf-8'));
|
|
11
|
+
logger.debug(`Component configuration is ${JSON.stringify(configJSON, null, 2)}`);
|
|
12
|
+
const modifications = configJSON.postInstall?.modifications ?? [];
|
|
13
|
+
if (!modifications || modifications.length === 0) {
|
|
14
|
+
logger.debug(`No modifications provided - skipping`);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const dirName = (0, path_1.dirname)(baseDir);
|
|
18
|
+
logger.debug(`Copying ${modifications.length} modification(s) for component ${dirName} ...`);
|
|
19
|
+
// Copy each modification
|
|
20
|
+
for (const config of modifications) {
|
|
21
|
+
const srcPath = (0, path_1.join)(baseDir, config.source);
|
|
22
|
+
const destPath = (0, path_1.join)(process.cwd(), config.destination);
|
|
23
|
+
logger.debug(`Copying modification from ${srcPath} to ${destPath}`);
|
|
24
|
+
try {
|
|
25
|
+
// Check if source exists
|
|
26
|
+
if (!(0, fs_1.existsSync)(srcPath)) {
|
|
27
|
+
logger.warn(`Source path does not exist: ${srcPath} - skipping`);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
// Get source stats to determine if it's a file or directory
|
|
31
|
+
const srcStats = (0, fs_1.statSync)(srcPath);
|
|
32
|
+
if (srcStats.isFile()) {
|
|
33
|
+
// Handle file copying
|
|
34
|
+
copyFile(srcPath, destPath);
|
|
35
|
+
}
|
|
36
|
+
else if (srcStats.isDirectory()) {
|
|
37
|
+
// Handle directory copying
|
|
38
|
+
copyDirectory(srcPath, destPath);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
logger.warn(`Source is neither file nor directory: ${srcPath} - skipping`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
logger.debug(`Successfully copied ${config.source} to ${config.destination}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
logger.error(`Failed to copy ${config.source} to ${config.destination}: ${error}`);
|
|
48
|
+
throw new error_handler_1.CLIError(`Failed to copy modification for ${dirName}: ${error}`, { code: error_handler_1.ErrorCode.FILE_SYSTEM_ERROR });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
logger.debug(`Copied ${modifications.length} post install modifications for component ${baseDir} successfully!`);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Copy a single file, creating destination directory if needed
|
|
55
|
+
*/
|
|
56
|
+
function copyFile(srcPath, destPath) {
|
|
57
|
+
// Ensure destination directory exists
|
|
58
|
+
const destDir = (0, path_1.dirname)(destPath);
|
|
59
|
+
if (!(0, fs_1.existsSync)(destDir)) {
|
|
60
|
+
(0, fs_1.mkdirSync)(destDir, { recursive: true });
|
|
61
|
+
logger.debug(`Created destination directory: ${destDir}`);
|
|
62
|
+
}
|
|
63
|
+
// Copy the file
|
|
64
|
+
(0, fs_1.copyFileSync)(srcPath, destPath);
|
|
65
|
+
logger.debug(`Copied file: ${srcPath} → ${destPath}`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Copy a directory recursively, wiping out target first if it exists
|
|
69
|
+
*/
|
|
70
|
+
function copyDirectory(srcPath, destPath) {
|
|
71
|
+
// If destination exists, remove it completely
|
|
72
|
+
if ((0, fs_1.existsSync)(destPath)) {
|
|
73
|
+
logger.debug(`Removing existing destination directory: ${destPath}`);
|
|
74
|
+
(0, fs_1.rmSync)(destPath, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
// Create destination directory
|
|
77
|
+
(0, fs_1.mkdirSync)(destPath, { recursive: true });
|
|
78
|
+
logger.debug(`Created destination directory: ${destPath}`);
|
|
79
|
+
// Copy all contents recursively
|
|
80
|
+
copyDirectoryContents(srcPath, destPath);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Recursively copy directory contents
|
|
84
|
+
*/
|
|
85
|
+
function copyDirectoryContents(srcDir, destDir) {
|
|
86
|
+
const items = (0, fs_1.readdirSync)(srcDir);
|
|
87
|
+
for (const item of items) {
|
|
88
|
+
const srcItemPath = (0, path_1.join)(srcDir, item);
|
|
89
|
+
const destItemPath = (0, path_1.join)(destDir, item);
|
|
90
|
+
const itemStats = (0, fs_1.statSync)(srcItemPath);
|
|
91
|
+
if (itemStats.isFile()) {
|
|
92
|
+
(0, fs_1.copyFileSync)(srcItemPath, destItemPath);
|
|
93
|
+
logger.debug(`Copied file: ${srcItemPath} → ${destItemPath}`);
|
|
94
|
+
}
|
|
95
|
+
else if (itemStats.isDirectory()) {
|
|
96
|
+
(0, fs_1.mkdirSync)(destItemPath, { recursive: true });
|
|
97
|
+
copyDirectoryContents(srcItemPath, destItemPath);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=component.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.config.js","sourceRoot":"","sources":["../../../src/services/components/component.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ComponentReference {
|
|
2
|
+
name: string;
|
|
3
|
+
version: string;
|
|
4
|
+
}
|
|
5
|
+
export interface Component {
|
|
6
|
+
name: string;
|
|
7
|
+
version: string;
|
|
8
|
+
platform: SupportedPlatforms;
|
|
9
|
+
downloadUrl: string;
|
|
10
|
+
}
|
|
11
|
+
export type SupportedPlatforms = 'win32' | 'darwin' | 'darwin-arm64';
|
|
12
|
+
//# sourceMappingURL=component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/services/components/component.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/services/components/component.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { SupportedPlatforms } from "./component";
|
|
2
|
+
export interface ComponentDefinition {
|
|
3
|
+
/** Display name for the component */
|
|
4
|
+
displayName: string;
|
|
5
|
+
/** Base filename for downloads (without extension) */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Whether license validation is required */
|
|
8
|
+
licenseRequired: boolean;
|
|
9
|
+
/** Supported platforms */
|
|
10
|
+
platforms: Array<SupportedPlatforms>;
|
|
11
|
+
/** Description of the component */
|
|
12
|
+
description: string;
|
|
13
|
+
/** Is the component required for the application to run */
|
|
14
|
+
required?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Central registry of all known components with their static metadata
|
|
18
|
+
* It is best if this goes to cli configuration
|
|
19
|
+
*/
|
|
20
|
+
export declare class ComponentsRegistry {
|
|
21
|
+
private static COMPONENT_REGISTRY;
|
|
22
|
+
static getComponents(): ComponentDefinition[];
|
|
23
|
+
/**
|
|
24
|
+
* Get component definition by name
|
|
25
|
+
*/
|
|
26
|
+
static getComponentDefinition(componentName: string): ComponentDefinition | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Get all known component names
|
|
29
|
+
*/
|
|
30
|
+
static getAllComponentNames(): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Get components that support a specific platform
|
|
33
|
+
*/
|
|
34
|
+
static getComponentsForPlatform(platform: SupportedPlatforms): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Check if a component exists and supports a platform
|
|
37
|
+
*/
|
|
38
|
+
static isComponentSupported(componentName: string, platform: SupportedPlatforms): boolean;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=components.registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.registry.d.ts","sourceRoot":"","sources":["../../../src/services/components/components.registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAChC,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,eAAe,EAAE,OAAO,CAAC;IACzB,0BAA0B;IAC1B,SAAS,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrC,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAG3B,OAAO,CAAC,MAAM,CAAC,kBAAkB,CA8B/B;WAEY,aAAa,IAAI,mBAAmB,EAAE;IAIpD;;OAEG;WACW,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAI5F;;OAEG;WACW,oBAAoB,IAAI,MAAM,EAAE;IAI9C;;OAEG;WACW,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAM9E;;OAEG;WACW,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO;CAInG"}
|