@unisphere/nx 2.2.2 → 3.2.4
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/dist/generators/add-application/add-application.d.ts.map +1 -1
- package/dist/generators/add-application/add-application.js +186 -63
- package/dist/generators/add-application/schema.d.ts +3 -1
- package/dist/generators/add-application/schema.json +8 -8
- package/dist/generators/add-application/templates/default/.env-template +6 -0
- package/dist/generators/add-application/templates/default/.eslintrc.json +1 -1
- package/dist/generators/add-application/templates/default/jest.config.ts +3 -3
- package/dist/generators/add-application/templates/default/project.json.template +2 -2
- package/dist/generators/add-application/templates/default/readme.md.template +11 -0
- package/dist/generators/add-application/templates/default/src/app/app.tsx.template +77 -77
- package/dist/generators/add-application/templates/default/tsconfig.json +1 -1
- package/dist/generators/add-application/templates/default/webpack.config.js.template +6 -1
- package/dist/generators/add-package/README.md +2 -2
- package/dist/generators/add-package/add-package.d.ts.map +1 -1
- package/dist/generators/add-package/add-package.js +11 -23
- package/dist/generators/add-package/schema.d.ts +1 -1
- package/dist/generators/add-package/schema.json +27 -19
- package/dist/generators/add-package/templates/new-package/.eslintrc.json +1 -1
- package/dist/generators/add-package/templates/new-package/package.json.template +0 -1
- package/dist/generators/add-package/templates/new-package/project.json.template +4 -4
- package/dist/generators/add-package/templates/new-package/rollup.config.js +1 -1
- package/dist/generators/add-package/templates/new-package/tsconfig.json +1 -1
- package/dist/generators/add-package/templates/new-package/tsconfig.lib.json.template +1 -1
- package/dist/generators/add-package/templates/new-package/tsconfig.spec.json +1 -1
- package/dist/generators/add-runtime/add-runtime.d.ts.map +1 -1
- package/dist/generators/add-runtime/add-runtime.js +62 -9
- package/dist/generators/add-runtime/schema.d.ts +1 -0
- package/dist/generators/add-runtime/schema.json +1 -9
- package/dist/generators/add-runtime/templates/new-runtime/src/lib/create-factory.tsx.template +4 -4
- package/dist/generators/add-runtime/templates/new-runtime/src/lib/runtime.tsx.template +26 -2
- package/dist/generators/add-visual/add-visual.d.ts +1 -1
- package/dist/generators/add-visual/add-visual.d.ts.map +1 -1
- package/dist/generators/add-visual/add-visual.js +108 -15
- package/dist/generators/add-visual/schema.d.ts +3 -3
- package/dist/generators/add-visual/schema.json +2 -24
- package/dist/generators/dependency-config.d.ts.map +1 -1
- package/dist/generators/dependency-config.js +1 -0
- package/dist/generators/internal-dev-runner/generator.d.ts +3 -0
- package/dist/generators/internal-dev-runner/generator.d.ts.map +1 -0
- package/dist/generators/internal-dev-runner/generator.js +47 -0
- package/dist/generators/internal-dev-runner/schema.json +9 -0
- package/dist/generators/remove/remove.d.ts +19 -0
- package/dist/generators/remove/remove.d.ts.map +1 -0
- package/dist/generators/remove/remove.js +270 -0
- package/dist/generators/remove/schema.d.ts +4 -0
- package/dist/generators/remove/schema.json +38 -0
- package/dist/generators/rename-package/rename-package.d.ts +3 -0
- package/dist/generators/rename-package/rename-package.d.ts.map +1 -1
- package/dist/generators/rename-package/rename-package.js +139 -20
- package/dist/generators/utils.d.ts +30 -1
- package/dist/generators/utils.d.ts.map +1 -1
- package/dist/generators/utils.js +258 -7
- package/dist/migrations/1-22-0/patches/@changesets+cli+2.29.7.patch +36 -4
- package/dist/migrations/3-0-0/add-define-plugin-to-webpack.d.ts +3 -0
- package/dist/migrations/3-0-0/add-define-plugin-to-webpack.d.ts.map +1 -0
- package/dist/migrations/3-0-0/add-define-plugin-to-webpack.js +233 -0
- package/dist/migrations/3-0-0/add-env-to-application-gitignore.d.ts +3 -0
- package/dist/migrations/3-0-0/add-env-to-application-gitignore.d.ts.map +1 -0
- package/dist/migrations/3-0-0/add-env-to-application-gitignore.js +117 -0
- package/dist/migrations/3-0-0/fix-vite-config-cache-paths.d.ts +10 -0
- package/dist/migrations/3-0-0/fix-vite-config-cache-paths.d.ts.map +1 -0
- package/dist/migrations/3-0-0/fix-vite-config-cache-paths.js +66 -0
- package/dist/migrations/3-0-0/patches/@changesets+cli+2.29.7.patch +88 -0
- package/dist/migrations/3-0-0/post-cleanup-empty-directories.d.ts +12 -0
- package/dist/migrations/3-0-0/post-cleanup-empty-directories.d.ts.map +1 -0
- package/dist/migrations/3-0-0/post-cleanup-empty-directories.js +62 -0
- package/dist/migrations/3-0-0/pre-cleanup-empty-directories.d.ts +14 -0
- package/dist/migrations/3-0-0/pre-cleanup-empty-directories.d.ts.map +1 -0
- package/dist/migrations/3-0-0/pre-cleanup-empty-directories.js +105 -0
- package/dist/migrations/3-0-0/remove-kaltura-tools-to-pre-install.d.ts +3 -0
- package/dist/migrations/3-0-0/remove-kaltura-tools-to-pre-install.d.ts.map +1 -0
- package/dist/migrations/3-0-0/remove-kaltura-tools-to-pre-install.js +21 -0
- package/dist/migrations/3-0-0/remove-private-from-applications-and-runtimes.d.ts +9 -0
- package/dist/migrations/3-0-0/remove-private-from-applications-and-runtimes.d.ts.map +1 -0
- package/dist/migrations/3-0-0/remove-private-from-applications-and-runtimes.js +88 -0
- package/dist/migrations/3-0-0/remove-publish-config-from-packages.d.ts +9 -0
- package/dist/migrations/3-0-0/remove-publish-config-from-packages.d.ts.map +1 -0
- package/dist/migrations/3-0-0/remove-publish-config-from-packages.js +45 -0
- package/dist/migrations/3-0-0/reorganize-applications-by-distribution-channel.d.ts +15 -0
- package/dist/migrations/3-0-0/reorganize-applications-by-distribution-channel.d.ts.map +1 -0
- package/dist/migrations/3-0-0/reorganize-applications-by-distribution-channel.js +563 -0
- package/dist/migrations/3-0-0/reorganize-packages-by-distribution-channel.d.ts +23 -0
- package/dist/migrations/3-0-0/reorganize-packages-by-distribution-channel.d.ts.map +1 -0
- package/dist/migrations/3-0-0/reorganize-packages-by-distribution-channel.js +645 -0
- package/dist/migrations/3-0-0/replace-github-workflow.d.ts +3 -0
- package/dist/migrations/3-0-0/replace-github-workflow.d.ts.map +1 -0
- package/dist/migrations/3-0-0/replace-github-workflow.js +48 -0
- package/dist/migrations/3-0-0/sync-package-lock.d.ts +10 -0
- package/dist/migrations/3-0-0/sync-package-lock.d.ts.map +1 -0
- package/dist/migrations/3-0-0/sync-package-lock.js +26 -0
- package/dist/migrations/3-0-0/templates/_publish-artifacts.template +363 -0
- package/dist/migrations/3-0-0/templates/cicd.template +89 -0
- package/dist/migrations/3-0-0/update-changeset-patch.d.ts +3 -0
- package/dist/migrations/3-0-0/update-changeset-patch.d.ts.map +1 -0
- package/dist/migrations/3-0-0/update-changeset-patch.js +31 -0
- package/dist/migrations/3-0-0/upgrade-schema-to-2-0-0.d.ts +21 -0
- package/dist/migrations/3-0-0/upgrade-schema-to-2-0-0.d.ts.map +1 -0
- package/dist/migrations/3-0-0/upgrade-schema-to-2-0-0.js +105 -0
- package/dist/migrations/3-1-0/fix-workspaces-pattern.d.ts +23 -0
- package/dist/migrations/3-1-0/fix-workspaces-pattern.d.ts.map +1 -0
- package/dist/migrations/3-1-0/fix-workspaces-pattern.js +72 -0
- package/dist/migrations/utils/has-react-dependency.d.ts +14 -0
- package/dist/migrations/utils/has-react-dependency.d.ts.map +1 -0
- package/dist/migrations/utils/has-react-dependency.js +72 -0
- package/dist/shared.d.ts +6 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +9 -0
- package/generators.json +12 -1
- package/migrations.json +125 -0
- package/package.json +3 -2
- package/dist/generators/add-application/templates/local-dev-playground/.babelrc +0 -11
- package/dist/generators/add-application/templates/local-dev-playground/.eslintrc.json +0 -22
- package/dist/generators/add-application/templates/local-dev-playground/jest.config.ts +0 -11
- package/dist/generators/add-application/templates/local-dev-playground/package.json +0 -6
- package/dist/generators/add-application/templates/local-dev-playground/project.json +0 -9
- package/dist/generators/add-application/templates/local-dev-playground/src/app/app.tsx.template +0 -212
- package/dist/generators/add-application/templates/local-dev-playground/src/app/components/header.tsx.template +0 -123
- package/dist/generators/add-application/templates/local-dev-playground/src/app/components/settings-buttons.tsx +0 -57
- package/dist/generators/add-application/templates/local-dev-playground/src/app/components/settings-form.tsx +0 -108
- package/dist/generators/add-application/templates/local-dev-playground/src/app/components/settings.tsx +0 -74
- package/dist/generators/add-application/templates/local-dev-playground/src/app/configuration-provider.tsx +0 -163
- package/dist/generators/add-application/templates/local-dev-playground/src/app/definitions.ts +0 -25
- package/dist/generators/add-application/templates/local-dev-playground/src/app/utils/merge-deep.ts +0 -31
- package/dist/generators/add-application/templates/local-dev-playground/src/favicon.ico +0 -0
- package/dist/generators/add-application/templates/local-dev-playground/src/index.html +0 -17
- package/dist/generators/add-application/templates/local-dev-playground/src/main.tsx +0 -13
- package/dist/generators/add-application/templates/local-dev-playground/src/styles.css +0 -0
- package/dist/generators/add-application/templates/local-dev-playground/tsconfig.app.json +0 -24
- package/dist/generators/add-application/templates/local-dev-playground/tsconfig.json +0 -20
- package/dist/generators/add-application/templates/local-dev-playground/tsconfig.spec.json +0 -25
- package/dist/generators/add-application/templates/local-dev-playground/webpack.config.js +0 -33
- /package/dist/generators/add-runtime/templates/{core-templates → types-templates}/__runtimeName__-runtime/index.ts.template +0 -0
- /package/dist/generators/add-runtime/templates/{core-templates → types-templates}/__runtimeName__-runtime/runtime-types.ts.template +0 -0
|
@@ -21,8 +21,8 @@ The generator will prompt you for the following information:
|
|
|
21
21
|
- Example: `core`, `notification-service`, `user management`
|
|
22
22
|
|
|
23
23
|
2. **scope** (required, defaults to 'internal')
|
|
24
|
-
- **public**:
|
|
25
|
-
- **internal**:
|
|
24
|
+
- **public**: server to npm with `@unisphere/` prefix
|
|
25
|
+
- **internal**: server to GitHub packages with `@kaltura-corp/unisphere-` prefix
|
|
26
26
|
- **none**: Private repository only, no scope prefix
|
|
27
27
|
|
|
28
28
|
## Local Development & Distribution
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-package.d.ts","sourceRoot":"","sources":["../../../src/generators/add-package/add-package.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,
|
|
1
|
+
{"version":3,"file":"add-package.d.ts","sourceRoot":"","sources":["../../../src/generators/add-package/add-package.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,EAAgD,MAAM,YAAY,CAAC;AAE5G,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AA4DrD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,yBAAyB,uBAiHnC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -56,23 +56,11 @@ async function addPackageGenerator(tree, options) {
|
|
|
56
56
|
else {
|
|
57
57
|
packageJsonName = experienceName + `-${userInputPackageName}`;
|
|
58
58
|
}
|
|
59
|
-
const prefix = options.scope === 'public' ? '@unisphere/' :
|
|
59
|
+
const prefix = options.scope === 'public' ? '@unisphere/' :
|
|
60
|
+
options.scope === 'internal' ? '@kaltura-corp/unisphere-' :
|
|
61
|
+
options.scope === 'kaltura-ai' ? '@kaltura-ai/' :
|
|
62
|
+
'@local/';
|
|
60
63
|
packageJsonName = prefix + packageJsonName;
|
|
61
|
-
const repositoryPrivate = options.scope === 'none';
|
|
62
|
-
// Calculate distributionChannel
|
|
63
|
-
let distributionChannel;
|
|
64
|
-
switch (options.scope) {
|
|
65
|
-
case 'public':
|
|
66
|
-
distributionChannel = 'npm';
|
|
67
|
-
break;
|
|
68
|
-
case 'none':
|
|
69
|
-
distributionChannel = 'none';
|
|
70
|
-
break;
|
|
71
|
-
case 'internal':
|
|
72
|
-
default:
|
|
73
|
-
distributionChannel = 'github';
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
64
|
const transformedPackageName = (0, devkit_1.names)(userInputPackageName);
|
|
77
65
|
const githubUrl = `https://github.com/${companyName}/${experienceName}`;
|
|
78
66
|
// Resolve @unisphere/runtime version from workspace package.json
|
|
@@ -80,23 +68,24 @@ async function addPackageGenerator(tree, options) {
|
|
|
80
68
|
// Determine which dependencies are selected
|
|
81
69
|
const hasDs = selectedDependencies.includes('ds');
|
|
82
70
|
const hasReact = selectedDependencies.includes('react') || hasDs;
|
|
71
|
+
// Determine subdirectory based on scope (schema v2.0.0+)
|
|
72
|
+
const subdirectory = (0, utils_1.getSubdirectoryFromScope)(options.scope);
|
|
73
|
+
const projectRoot = `unisphere/packages/${subdirectory}/${userInputPackageName}`;
|
|
83
74
|
// Prepare template variables
|
|
84
75
|
const templateVariables = {
|
|
85
76
|
scope: options.scope,
|
|
86
|
-
repositoryPrivate,
|
|
87
|
-
distributionChannel,
|
|
88
77
|
githubUrl,
|
|
89
78
|
companyName,
|
|
90
79
|
unisphereRuntimeVersion,
|
|
91
80
|
hasDs,
|
|
92
81
|
hasReact,
|
|
82
|
+
subdirectory,
|
|
93
83
|
...(0, utils_1.createNameTransforms)(userInputPackageName, 'packageName'),
|
|
94
84
|
...(0, utils_1.createNameTransforms)(experienceName, 'experienceName'),
|
|
95
85
|
...(0, utils_1.createNameTransforms)(packageJsonName, 'packageJsonName'),
|
|
96
86
|
...transformedPackageName,
|
|
97
87
|
tmpl: '',
|
|
98
88
|
};
|
|
99
|
-
const projectRoot = `unisphere/packages/${userInputPackageName}`;
|
|
100
89
|
// Check if the project already exists
|
|
101
90
|
if (tree.exists(projectRoot)) {
|
|
102
91
|
throw new Error(`Package "${userInputPackageName}" already exists at ${projectRoot}.\n` +
|
|
@@ -106,17 +95,17 @@ async function addPackageGenerator(tree, options) {
|
|
|
106
95
|
(0, devkit_1.generateFiles)(tree, path.join(__dirname, 'templates/new-package'), projectRoot, templateVariables);
|
|
107
96
|
// Update .unisphere configuration
|
|
108
97
|
(0, utils_1.updateUnisphereConfig)(tree, 'packages', userInputPackageName, {
|
|
109
|
-
sourceRoot: `unisphere/packages/${userInputPackageName}`,
|
|
110
|
-
distributionChannel: distributionChannel,
|
|
98
|
+
sourceRoot: `unisphere/packages/${subdirectory}/${userInputPackageName}`,
|
|
111
99
|
scope: 'widget',
|
|
112
100
|
});
|
|
113
101
|
// Update tsconfig.base.json with path mapping
|
|
114
|
-
(0, utils_1.updateTsConfigPaths)(tree, packageJsonName, `unisphere/packages/${userInputPackageName}/src/index.ts`);
|
|
102
|
+
(0, utils_1.updateTsConfigPaths)(tree, packageJsonName, `unisphere/packages/${subdirectory}/${userInputPackageName}/src/index.ts`);
|
|
115
103
|
// Install selected dependencies
|
|
116
104
|
(0, dependency_config_1.installSelectedDependencies)(tree, selectedDependencies);
|
|
117
105
|
await (0, devkit_1.formatFiles)(tree);
|
|
118
106
|
// Return a function that will be executed after all file operations are complete
|
|
119
107
|
return () => {
|
|
108
|
+
(0, devkit_1.installPackagesTask)(tree, true);
|
|
120
109
|
devkit_1.logger.info('');
|
|
121
110
|
devkit_1.logger.info('✅ Package generated successfully!');
|
|
122
111
|
devkit_1.logger.info('');
|
|
@@ -124,7 +113,6 @@ async function addPackageGenerator(tree, options) {
|
|
|
124
113
|
devkit_1.logger.info(`🏷️ Full Package Name: ${packageJsonName}`);
|
|
125
114
|
devkit_1.logger.info(`📁 Location: ${projectRoot}`);
|
|
126
115
|
devkit_1.logger.info(`🔧 Scope: ${options.scope}`);
|
|
127
|
-
devkit_1.logger.info(`📤 Distribution Channel: ${distributionChannel}`);
|
|
128
116
|
devkit_1.logger.info('');
|
|
129
117
|
};
|
|
130
118
|
}
|
|
@@ -12,33 +12,41 @@
|
|
|
12
12
|
},
|
|
13
13
|
"scope": {
|
|
14
14
|
"type": "string",
|
|
15
|
-
"description": "The distribution scope of the package",
|
|
15
|
+
"description": "The distribution scope of the package",
|
|
16
16
|
"default": "none",
|
|
17
17
|
"x-prompt": {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
"message": "What scope should this package have? If you're unsure, choose Private.",
|
|
19
|
+
"type": "list",
|
|
20
|
+
"items": [
|
|
21
|
+
{
|
|
22
|
+
"value": "none",
|
|
23
|
+
"label": "Private – This repository only (not published to npm)"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"value": "internal",
|
|
27
|
+
"label": "Kaltura Internal – For Kaltura repositories only (jfrog scope: @kaltura-corp/...)"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"value": "public",
|
|
31
|
+
"label": "Unisphere Public – For all Unisphere workspace consumers (npm scope: @unisphere/...)"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"value": "kaltura-ai",
|
|
35
|
+
"label": "Kaltura AI Lab – Experimental packages for standalone use (npm scope: @kaltura-ai/...)"
|
|
36
|
+
}
|
|
37
|
+
]
|
|
32
38
|
}
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
39
|
},
|
|
36
40
|
"dependencies": {
|
|
37
41
|
"type": "array",
|
|
38
42
|
"description": "Select packages to install (use space to select, enter to confirm)",
|
|
39
43
|
"items": {
|
|
40
44
|
"type": "string",
|
|
41
|
-
"enum": [
|
|
45
|
+
"enum": [
|
|
46
|
+
"react",
|
|
47
|
+
"ds",
|
|
48
|
+
"mui"
|
|
49
|
+
]
|
|
42
50
|
},
|
|
43
51
|
"default": [],
|
|
44
52
|
"x-prompt": {
|
|
@@ -66,4 +74,4 @@
|
|
|
66
74
|
"packageName",
|
|
67
75
|
"scope"
|
|
68
76
|
]
|
|
69
|
-
}
|
|
77
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unisphere-package-<%= packageName__lowerDashCase %>",
|
|
3
|
-
"$schema": "
|
|
4
|
-
"sourceRoot": "unisphere/packages/<%= packageName__lowerDashCase %>/src",
|
|
3
|
+
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
+
"sourceRoot": "unisphere/packages/<%= subdirectory %>/<%= packageName__lowerDashCase %>/src",
|
|
5
5
|
"projectType": "library",
|
|
6
6
|
"tags": [],
|
|
7
7
|
"// targets": "to see all targets run: nx show project unisphere-package-<%= packageName__lowerDashCase %> --web",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
],
|
|
14
14
|
"options": {
|
|
15
15
|
"lintFilePatterns": [
|
|
16
|
-
"unisphere/packages/<%= packageName__lowerDashCase %>/src/**/*.{ts,tsx,js,jsx}",
|
|
17
|
-
"unisphere/packages/<%= packageName__lowerDashCase %>/package.json"
|
|
16
|
+
"unisphere/packages/<%= subdirectory %>/<%= packageName__lowerDashCase %>/src/**/*.{ts,tsx,js,jsx}",
|
|
17
|
+
"unisphere/packages/<%= subdirectory %>/<%= packageName__lowerDashCase %>/package.json"
|
|
18
18
|
]
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-runtime.d.ts","sourceRoot":"","sources":["../../../src/generators/add-runtime/add-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,
|
|
1
|
+
{"version":3,"file":"add-runtime.d.ts","sourceRoot":"","sources":["../../../src/generators/add-runtime/add-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,EAAsC,MAAM,YAAY,CAAC;AAElG,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAqFrD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,yBAAyB,uBA6InC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -7,6 +7,41 @@ const path = tslib_1.__importStar(require("path"));
|
|
|
7
7
|
const utils_1 = require("../utils");
|
|
8
8
|
const dependency_config_1 = require("../dependency-config");
|
|
9
9
|
const add_application_1 = require("../add-application/add-application");
|
|
10
|
+
const add_visual_1 = require("../add-visual/add-visual");
|
|
11
|
+
async function getEnquirerPrompt() {
|
|
12
|
+
const enquirer = await import('enquirer');
|
|
13
|
+
// Handle both CommonJS and ESM exports
|
|
14
|
+
return enquirer.prompt || enquirer.default?.prompt || enquirer;
|
|
15
|
+
}
|
|
16
|
+
async function promptForAddVisual() {
|
|
17
|
+
const prompt = await getEnquirerPrompt();
|
|
18
|
+
const response = await prompt({
|
|
19
|
+
type: 'confirm',
|
|
20
|
+
name: 'addVisual',
|
|
21
|
+
message: 'Would you like to add a visual to this runtime?',
|
|
22
|
+
initial: true,
|
|
23
|
+
});
|
|
24
|
+
return response.addVisual;
|
|
25
|
+
}
|
|
26
|
+
async function promptForAnalyticsAppId(existingValue) {
|
|
27
|
+
if (existingValue !== undefined) {
|
|
28
|
+
return existingValue;
|
|
29
|
+
}
|
|
30
|
+
const prompt = await getEnquirerPrompt();
|
|
31
|
+
const response = await prompt({
|
|
32
|
+
type: 'input',
|
|
33
|
+
name: 'analyticsAppId',
|
|
34
|
+
message: 'Provide the analytics app id (number). If you are not certain, leave it empty and later update the runtime constructor.',
|
|
35
|
+
validate: (input) => {
|
|
36
|
+
if (input === '')
|
|
37
|
+
return true; // Allow empty
|
|
38
|
+
const num = Number(input);
|
|
39
|
+
return !isNaN(num) && Number.isInteger(num) ? true : 'Please enter a valid integer or leave empty';
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const value = response.analyticsAppId;
|
|
43
|
+
return value === '' ? undefined : Number(value);
|
|
44
|
+
}
|
|
10
45
|
function updateTypesIndexExport(tree, runtimeName, basePath) {
|
|
11
46
|
const indexPath = `${basePath}/src/index.ts`;
|
|
12
47
|
if (!tree.exists(indexPath)) {
|
|
@@ -32,7 +67,6 @@ async function addRuntimeGenerator(tree, options) {
|
|
|
32
67
|
const unisphereConfig = (0, utils_1.validateUnisphereConfig)(tree);
|
|
33
68
|
// Validate dependencies
|
|
34
69
|
const selectedDependencies = options.dependencies || [];
|
|
35
|
-
(0, dependency_config_1.validateGitToken)(selectedDependencies);
|
|
36
70
|
// Extract environment variables
|
|
37
71
|
const companyName = unisphereConfig.company;
|
|
38
72
|
const widgetName = unisphereConfig.name;
|
|
@@ -40,9 +74,14 @@ async function addRuntimeGenerator(tree, options) {
|
|
|
40
74
|
let userInputRuntimeName = (0, devkit_1.names)(options.name).fileName;
|
|
41
75
|
// Find types package (or fallback to core)
|
|
42
76
|
const typesPackageInfo = (0, utils_1.findTypesOrCorePackageInfo)(tree);
|
|
77
|
+
// Prompt for analyticsAppId only if isExternal is true
|
|
78
|
+
const analyticsAppId = isExternal
|
|
79
|
+
? await promptForAnalyticsAppId(options.analyticsAppId)
|
|
80
|
+
: options.analyticsAppId;
|
|
43
81
|
// Prepare template variables
|
|
44
82
|
const templateVariables = {
|
|
45
83
|
companyName,
|
|
84
|
+
analyticsAppId,
|
|
46
85
|
typesAlias: typesPackageInfo.alias,
|
|
47
86
|
// Add all name transformations
|
|
48
87
|
...(0, utils_1.createNameTransforms)(userInputRuntimeName, 'runtimeName'),
|
|
@@ -65,8 +104,8 @@ async function addRuntimeGenerator(tree, options) {
|
|
|
65
104
|
// Generate files from templates for the runtime
|
|
66
105
|
(0, devkit_1.generateFiles)(tree, path.join(__dirname, 'templates/new-runtime'), projectRoot, templateVariables);
|
|
67
106
|
// Generate the runtime types file in the types/core package using template
|
|
68
|
-
(0, devkit_1.generateFiles)(tree, path.join(__dirname, 'templates/
|
|
69
|
-
// Update types
|
|
107
|
+
(0, devkit_1.generateFiles)(tree, path.join(__dirname, 'templates/types-templates'), `${typesPackageInfo.basePath}/src/lib`, templateVariables);
|
|
108
|
+
// Update types package index.ts to export the new runtime types
|
|
70
109
|
updateTypesIndexExport(tree, userInputRuntimeName, typesPackageInfo.basePath);
|
|
71
110
|
// Update .unisphere configuration
|
|
72
111
|
(0, utils_1.updateUnisphereConfig)(tree, 'runtimes', userInputRuntimeName, {
|
|
@@ -77,35 +116,49 @@ async function addRuntimeGenerator(tree, options) {
|
|
|
77
116
|
const runtimePathKey = `unisphere-runtime-${userInputRuntimeName}`;
|
|
78
117
|
const runtimePathValue = `unisphere/runtimes/${userInputRuntimeName}/src/index.ts`;
|
|
79
118
|
(0, utils_1.updateTsConfigPaths)(tree, runtimePathKey, runtimePathValue);
|
|
119
|
+
// Prompt to add a visual to the new runtime
|
|
120
|
+
const shouldAddVisual = await promptForAddVisual();
|
|
121
|
+
let visualName = '';
|
|
122
|
+
if (shouldAddVisual) {
|
|
123
|
+
const visualTask = await (0, add_visual_1.addVisualGenerator)(tree, {
|
|
124
|
+
runtimeName: userInputRuntimeName,
|
|
125
|
+
});
|
|
126
|
+
const visualResponse = await visualTask();
|
|
127
|
+
visualName = visualResponse.visualName;
|
|
128
|
+
}
|
|
129
|
+
let applicationScriptName = '';
|
|
80
130
|
// Handle internal usage - create dev application
|
|
81
131
|
if (!!isExternal) {
|
|
82
132
|
// Create a dev application without prompts
|
|
83
|
-
const
|
|
133
|
+
const appTask = await (0, add_application_1.addApplicationGenerator)(tree, {
|
|
84
134
|
name: `${userInputRuntimeName}-dev`,
|
|
85
135
|
servingType: 'local-dev-playground',
|
|
86
136
|
runtimeName: userInputRuntimeName,
|
|
137
|
+
visualName,
|
|
138
|
+
skipDynamicRuntimeVisualPrompt: true, // Skip the runtime/visual selection prompts since we already have the info
|
|
87
139
|
dependencies: selectedDependencies, // Pass same dependencies as runtime
|
|
88
140
|
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
applicationResult();
|
|
92
|
-
}
|
|
141
|
+
applicationScriptName = `serve:${userInputRuntimeName}-dev`;
|
|
142
|
+
await appTask();
|
|
93
143
|
}
|
|
94
144
|
// Install selected dependencies
|
|
95
145
|
(0, dependency_config_1.installSelectedDependencies)(tree, selectedDependencies);
|
|
96
146
|
await (0, devkit_1.formatFiles)(tree);
|
|
97
147
|
// Return a function that will be executed after all file operations are complete
|
|
98
148
|
return () => {
|
|
149
|
+
(0, devkit_1.installPackagesTask)(tree, true);
|
|
99
150
|
devkit_1.logger.info('');
|
|
100
151
|
devkit_1.logger.info('✅ Runtime generated successfully!');
|
|
101
152
|
devkit_1.logger.info('');
|
|
102
153
|
devkit_1.logger.info(`🚀 Runtime Name: ${userInputRuntimeName}`);
|
|
103
154
|
devkit_1.logger.info(`📁 Location: ${projectRoot}`);
|
|
155
|
+
devkit_1.logger.info(`Analytics App ID: ${analyticsAppId}`);
|
|
104
156
|
devkit_1.logger.info(`🔧 Consumer: ${isExternal ? 'External' : 'Internal'}`);
|
|
105
|
-
if (
|
|
157
|
+
if (applicationScriptName) {
|
|
106
158
|
devkit_1.logger.info('');
|
|
107
159
|
devkit_1.logger.info('📦 Additional components created:');
|
|
108
160
|
devkit_1.logger.info(` • Dev Application: ${userInputRuntimeName}-dev`);
|
|
161
|
+
devkit_1.logger.info(`. 📜 To run the dev application locally: npm run ${applicationScriptName}`);
|
|
109
162
|
}
|
|
110
163
|
devkit_1.logger.info('');
|
|
111
164
|
};
|
|
@@ -48,15 +48,7 @@
|
|
|
48
48
|
{
|
|
49
49
|
"value": "react",
|
|
50
50
|
"label": "React - UI library for building components"
|
|
51
|
-
}
|
|
52
|
-
{
|
|
53
|
-
"value": "ds",
|
|
54
|
-
"label": "Kaltura DS - Design System (requires GIT_TOKEN)"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"value": "mui",
|
|
58
|
-
"label": "Material UI - Component library"
|
|
59
|
-
}
|
|
51
|
+
}
|
|
60
52
|
]
|
|
61
53
|
}
|
|
62
54
|
}
|
package/dist/generators/add-runtime/templates/new-runtime/src/lib/create-factory.tsx.template
CHANGED
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
import { Root } from 'react-dom/client';
|
|
7
7
|
import { Runtime } from './runtime';
|
|
8
8
|
|
|
9
|
-
class ContextFactory extends UnisphereElementFactory<
|
|
10
|
-
create
|
|
11
|
-
options: CreateElementOptions<
|
|
12
|
-
): UnisphereElementBase<
|
|
9
|
+
class ContextFactory extends UnisphereElementFactory<any, Root> {
|
|
10
|
+
create(
|
|
11
|
+
options: CreateElementOptions<any>
|
|
12
|
+
): UnisphereElementBase<any, Root> {
|
|
13
13
|
switch (options.flavor) {
|
|
14
14
|
default:
|
|
15
15
|
return new Runtime(options) as any;
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
<%= runtimeName__pascalCase %>RuntimeSettings,
|
|
11
11
|
<%= runtimeName__camelCase %>RuntimeSettingsSchema,
|
|
12
12
|
} from '<%= typesAlias %>';
|
|
13
|
-
import { HtmlDomRuntimeVisual } from '@unisphere/runtime';
|
|
13
|
+
import { HtmlDomRuntimeVisual, KalturaAnalyticsServiceType } from '@unisphere/runtime';
|
|
14
14
|
import { widgetName } from '<%= typesAlias %>'
|
|
15
15
|
|
|
16
16
|
export class Runtime
|
|
@@ -42,6 +42,28 @@ export class Runtime
|
|
|
42
42
|
runtimeName: this.runtimeName,
|
|
43
43
|
},
|
|
44
44
|
});
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
const analyticsAppId: null | number = <%= analyticsAppId ? analyticsAppId : 'null' %>;
|
|
48
|
+
if (!analyticsAppId) {
|
|
49
|
+
this._logger.warn(`missing kaltura analytics app id, cannot register application to analytics service`)
|
|
50
|
+
} else {
|
|
51
|
+
const service = this._options
|
|
52
|
+
.getWorkspace()
|
|
53
|
+
.getService<KalturaAnalyticsServiceType>(
|
|
54
|
+
'unisphere.service.kaltura-analytics'
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
if (service) {
|
|
58
|
+
service.registerUnisphereApp({
|
|
59
|
+
analyticsAppId,
|
|
60
|
+
appVersion: this._options.runtimeVersion,
|
|
61
|
+
mode: process.env.NODE_ENV === 'production' ? undefined : 'dryRun',
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
this._logger.warn('missing kaltura analytics service, cannot register analytics application id <%= analyticsAppId %>')
|
|
65
|
+
}
|
|
66
|
+
}
|
|
45
67
|
}
|
|
46
68
|
|
|
47
69
|
override _createVisualContainer(htmlElement: HTMLElement): Root {
|
|
@@ -60,6 +82,8 @@ export class Runtime
|
|
|
60
82
|
}
|
|
61
83
|
|
|
62
84
|
protected _onSettingsUpdated(settings: <%= runtimeName__pascalCase %>RuntimeSettings) {
|
|
63
|
-
//
|
|
85
|
+
// use this method to react to settings changes. for example:
|
|
86
|
+
// this._reMountVisualByType('your-visual-type');
|
|
87
|
+
// this._reMountAllVisuals();
|
|
64
88
|
}
|
|
65
89
|
}
|
|
@@ -3,6 +3,6 @@ import { AddVisualGeneratorSchema } from './schema';
|
|
|
3
3
|
/**
|
|
4
4
|
* Nx generator to create a new visual within a specified runtime.
|
|
5
5
|
*/
|
|
6
|
-
export declare function addVisualGenerator(tree: Tree, options: AddVisualGeneratorSchema): Promise<
|
|
6
|
+
export declare function addVisualGenerator(tree: Tree, options: AddVisualGeneratorSchema): Promise<any>;
|
|
7
7
|
export default addVisualGenerator;
|
|
8
8
|
//# sourceMappingURL=add-visual.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-visual.d.ts","sourceRoot":"","sources":["../../../src/generators/add-visual/add-visual.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,EAAE,MAAM,YAAY,CAAC;AAsB9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"add-visual.d.ts","sourceRoot":"","sources":["../../../src/generators/add-visual/add-visual.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,EAAE,MAAM,YAAY,CAAC;AAsB9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAwbpD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,GAAG,CAAC,CAoFd;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -7,6 +7,54 @@ const path = tslib_1.__importStar(require("path"));
|
|
|
7
7
|
const ts_morph_1 = require("ts-morph");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
9
|
const visual_utils_1 = require("./visual-utils");
|
|
10
|
+
async function getEnquirerPrompt() {
|
|
11
|
+
const enquirer = await import('enquirer');
|
|
12
|
+
// Handle both CommonJS and ESM exports
|
|
13
|
+
return enquirer.prompt || enquirer.default?.prompt || enquirer;
|
|
14
|
+
}
|
|
15
|
+
async function promptForRuntimeName(availableRuntimes, existingRuntimeName) {
|
|
16
|
+
if (existingRuntimeName) {
|
|
17
|
+
return existingRuntimeName;
|
|
18
|
+
}
|
|
19
|
+
const prompt = await getEnquirerPrompt();
|
|
20
|
+
const runtimeNames = Object.keys(availableRuntimes);
|
|
21
|
+
if (runtimeNames.length === 0) {
|
|
22
|
+
throw new Error('No runtimes found in .unisphere configuration.\n' +
|
|
23
|
+
'Please create a runtime first using: nx generate @unisphere/nx:add-runtime');
|
|
24
|
+
}
|
|
25
|
+
const runtimeChoices = runtimeNames.map(name => ({ name, message: name }));
|
|
26
|
+
const response = await prompt({
|
|
27
|
+
type: 'select',
|
|
28
|
+
name: 'runtimeName',
|
|
29
|
+
message: 'Select a runtime to add the visual to:',
|
|
30
|
+
choices: runtimeChoices,
|
|
31
|
+
});
|
|
32
|
+
return response.runtimeName;
|
|
33
|
+
}
|
|
34
|
+
async function promptForVisualName(existingVisualName) {
|
|
35
|
+
if (existingVisualName) {
|
|
36
|
+
return existingVisualName;
|
|
37
|
+
}
|
|
38
|
+
const prompt = await getEnquirerPrompt();
|
|
39
|
+
const response = await prompt({
|
|
40
|
+
type: 'input',
|
|
41
|
+
name: 'visualName',
|
|
42
|
+
message: 'What is the visual name?',
|
|
43
|
+
});
|
|
44
|
+
return response.visualName;
|
|
45
|
+
}
|
|
46
|
+
async function promptForIsSingleOccurrence(existingValue) {
|
|
47
|
+
if (existingValue !== undefined) {
|
|
48
|
+
return existingValue;
|
|
49
|
+
}
|
|
50
|
+
const prompt = await getEnquirerPrompt();
|
|
51
|
+
const response = await prompt({
|
|
52
|
+
type: 'confirm',
|
|
53
|
+
name: 'isSingleOccurrence',
|
|
54
|
+
message: 'Is this visual limited to single occurrence?',
|
|
55
|
+
});
|
|
56
|
+
return response.isSingleOccurrence;
|
|
57
|
+
}
|
|
10
58
|
/**
|
|
11
59
|
* Adds necessary imports (runtimeVisualSettings, runtimeVisualSchema) to the runtime file.
|
|
12
60
|
*/
|
|
@@ -121,11 +169,61 @@ function addRenderMethod(sourceFilePath, tree, vars, project, typesPackageInfo)
|
|
|
121
169
|
const sourceFile = (0, visual_utils_1.loadSourceFile)(tree, sourceFilePath, project);
|
|
122
170
|
const methodName = `_render${vars.visualName__pascalCase}`;
|
|
123
171
|
const clazz = (0, visual_utils_1.findFirstClass)(sourceFile);
|
|
172
|
+
// Always check and add required imports first (even if method exists)
|
|
173
|
+
let importsModified = false;
|
|
174
|
+
// Check if ThemeProvider import exists, add if missing
|
|
175
|
+
const themeProviderImportExists = sourceFile
|
|
176
|
+
.getImportDeclarations()
|
|
177
|
+
.some((decl) => decl.getModuleSpecifier().getLiteralValue() ===
|
|
178
|
+
'@kaltura/ds-react-theme' &&
|
|
179
|
+
decl.getNamedImports().some((imp) => imp.getName() === 'ThemeProvider'));
|
|
180
|
+
if (!themeProviderImportExists) {
|
|
181
|
+
sourceFile.addImportDeclaration({
|
|
182
|
+
kind: ts_morph_1.StructureKind.ImportDeclaration,
|
|
183
|
+
namedImports: ['ThemeProvider'],
|
|
184
|
+
moduleSpecifier: '@kaltura/ds-react-theme',
|
|
185
|
+
});
|
|
186
|
+
console.log(`✅ Added ThemeProvider import to ${sourceFilePath}`);
|
|
187
|
+
importsModified = true;
|
|
188
|
+
}
|
|
189
|
+
// Check if ScopedUnisphereWorkspaceProvider import exists, add if missing
|
|
190
|
+
const scopedProviderImportExists = sourceFile
|
|
191
|
+
.getImportDeclarations()
|
|
192
|
+
.some((decl) => decl.getModuleSpecifier().getLiteralValue() ===
|
|
193
|
+
'@unisphere/runtime-react' &&
|
|
194
|
+
decl
|
|
195
|
+
.getNamedImports()
|
|
196
|
+
.some((imp) => imp.getName() === 'ScopedUnisphereWorkspaceProvider'));
|
|
197
|
+
if (!scopedProviderImportExists) {
|
|
198
|
+
// Check if there's already an import from @unisphere/runtime-react
|
|
199
|
+
const existingRuntimeReactImport = sourceFile
|
|
200
|
+
.getImportDeclarations()
|
|
201
|
+
.find((decl) => decl.getModuleSpecifier().getLiteralValue() ===
|
|
202
|
+
'@unisphere/runtime-react');
|
|
203
|
+
if (existingRuntimeReactImport) {
|
|
204
|
+
// Add to existing import
|
|
205
|
+
existingRuntimeReactImport.addNamedImport('ScopedUnisphereWorkspaceProvider');
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Create new import
|
|
209
|
+
sourceFile.addImportDeclaration({
|
|
210
|
+
kind: ts_morph_1.StructureKind.ImportDeclaration,
|
|
211
|
+
namedImports: ['ScopedUnisphereWorkspaceProvider'],
|
|
212
|
+
moduleSpecifier: '@unisphere/runtime-react',
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
console.log(`✅ Added ScopedUnisphereWorkspaceProvider import to ${sourceFilePath}`);
|
|
216
|
+
importsModified = true;
|
|
217
|
+
}
|
|
124
218
|
// Check if method already exists.
|
|
125
219
|
const exists = clazz
|
|
126
220
|
.getInstanceMethods()
|
|
127
221
|
.some((m) => m.getName() === methodName);
|
|
128
222
|
if (exists) {
|
|
223
|
+
// Save imports if they were modified, even though method exists
|
|
224
|
+
if (importsModified) {
|
|
225
|
+
(0, visual_utils_1.saveSourceFile)(tree, sourceFilePath, sourceFile.getFullText());
|
|
226
|
+
}
|
|
129
227
|
console.log(`⚠️ Method ${methodName} already exists.`);
|
|
130
228
|
return;
|
|
131
229
|
}
|
|
@@ -147,20 +245,6 @@ function addRenderMethod(sourceFilePath, tree, vars, project, typesPackageInfo)
|
|
|
147
245
|
statements: processedContent,
|
|
148
246
|
scope: ts_morph_1.Scope.Private,
|
|
149
247
|
});
|
|
150
|
-
// Check if ThemeProvider import exists, add if missing
|
|
151
|
-
const themeProviderImportExists = sourceFile
|
|
152
|
-
.getImportDeclarations()
|
|
153
|
-
.some((decl) => decl.getModuleSpecifier().getLiteralValue() ===
|
|
154
|
-
'@kaltura/ds-react-theme' &&
|
|
155
|
-
decl.getNamedImports().some((imp) => imp.getName() === 'ThemeProvider'));
|
|
156
|
-
if (!themeProviderImportExists) {
|
|
157
|
-
sourceFile.addImportDeclaration({
|
|
158
|
-
kind: ts_morph_1.StructureKind.ImportDeclaration,
|
|
159
|
-
namedImports: ['ThemeProvider'],
|
|
160
|
-
moduleSpecifier: '@kaltura/ds-react-theme',
|
|
161
|
-
});
|
|
162
|
-
console.log(`✅ Added ThemeProvider import to ${sourceFilePath}`);
|
|
163
|
-
}
|
|
164
248
|
(0, visual_utils_1.saveSourceFile)(tree, sourceFilePath, sourceFile.getFullText());
|
|
165
249
|
console.log(`✅ Added render method ${methodName}.`);
|
|
166
250
|
}
|
|
@@ -201,8 +285,14 @@ export const ${schemaName}: ValidatorSchema = {
|
|
|
201
285
|
* Nx generator to create a new visual within a specified runtime.
|
|
202
286
|
*/
|
|
203
287
|
async function addVisualGenerator(tree, options) {
|
|
204
|
-
|
|
288
|
+
// Validate and read .unisphere configuration first
|
|
205
289
|
const unisphereConfig = (0, utils_1.validateUnisphereConfig)(tree);
|
|
290
|
+
// Prompt for runtime if not provided
|
|
291
|
+
const runtimeName = await promptForRuntimeName(unisphereConfig.runtimes, options.runtimeName);
|
|
292
|
+
// Prompt for visual name if not provided
|
|
293
|
+
const visualName = await promptForVisualName(options.visualName);
|
|
294
|
+
// Prompt for isSingleOccurrence if not provided
|
|
295
|
+
const isSingleOccurrence = await promptForIsSingleOccurrence(options.isSingleOccurrence);
|
|
206
296
|
// Extract environment variables
|
|
207
297
|
const widgetName = unisphereConfig.name;
|
|
208
298
|
// Validate runtime existence and get source root path.
|
|
@@ -249,5 +339,8 @@ async function addVisualGenerator(tree, options) {
|
|
|
249
339
|
console.log(` Visual: ${visualName}`);
|
|
250
340
|
console.log(` Single occurrence: ${isSingleOccurrence ? 'Yes' : 'No'}`);
|
|
251
341
|
console.log(` Modified file: ${runtimeTSxPath}`);
|
|
342
|
+
return () => {
|
|
343
|
+
return { visualName };
|
|
344
|
+
};
|
|
252
345
|
}
|
|
253
346
|
exports.default = addVisualGenerator;
|