@abgov/nx-adsp 12.8.0-beta.1 → 12.8.0-beta.10
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/package.json +1 -1
- package/src/generators/angular-app/angular-app.js +24 -1
- package/src/generators/angular-app/angular-app.js.map +1 -1
- package/src/generators/angular-app/schema.d.ts +5 -0
- package/src/generators/angular-app/schema.json +10 -0
- package/src/generators/express-service/express-service.js +13 -13
- package/src/generators/express-service/express-service.js.map +1 -1
- package/src/generators/express-service/schema.d.ts +2 -0
- package/src/generators/mean/mean.js +38 -5
- package/src/generators/mean/mean.js.map +1 -1
- package/src/generators/mean/schema.d.ts +2 -0
- package/src/generators/mean/schema.json +10 -0
- package/src/generators/mern/mern.js +38 -5
- package/src/generators/mern/mern.js.map +1 -1
- package/src/generators/mern/schema.d.ts +2 -0
- package/src/generators/mern/schema.json +10 -0
- package/src/generators/react-app/files/src/app/config.slice.ts__tmpl__ +2 -2
- package/src/generators/react-app/files/src/app/intake.slice.ts__tmpl__ +1 -1
- package/src/generators/react-app/files/src/app/start.slice.ts__tmpl__ +7 -7
- package/src/generators/react-app/files/src/app/user.slice.ts__tmpl__ +1 -1
- package/src/generators/react-app/react-app.js +24 -1
- package/src/generators/react-app/react-app.js.map +1 -1
- package/src/generators/react-app/schema.d.ts +4 -0
- package/src/generators/react-app/schema.json +10 -0
- package/src/utils/agent.d.ts +30 -2
- package/src/utils/agent.js +338 -143
- package/src/utils/agent.js.map +1 -1
- package/src/utils/agent.spec.ts +19 -2
- package/src/utils/plugin-version.d.ts +1 -0
- package/src/utils/plugin-version.js +7 -0
- package/src/utils/plugin-version.js.map +1 -0
package/package.json
CHANGED
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.default = default_1;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const nx_oc_1 = require("@abgov/nx-oc");
|
|
6
|
+
const agent_1 = require("../../utils/agent");
|
|
7
|
+
const plugin_version_1 = require("../../utils/plugin-version");
|
|
6
8
|
const devkit_1 = require("@nx/devkit");
|
|
7
9
|
const path = require("path");
|
|
8
10
|
function normalizeOptions(host, options) {
|
|
@@ -52,7 +54,7 @@ function addFiles(host, options) {
|
|
|
52
54
|
}
|
|
53
55
|
function default_1(host, options) {
|
|
54
56
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
var _a, _b;
|
|
57
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
56
58
|
const normalizedOptions = yield normalizeOptions(host, options);
|
|
57
59
|
const { applicationGenerator: initAngular } = yield Promise.resolve().then(() => require('@nx/angular/generators'));
|
|
58
60
|
yield initAngular(host, {
|
|
@@ -98,6 +100,27 @@ function default_1(host, options) {
|
|
|
98
100
|
}
|
|
99
101
|
(0, devkit_1.updateProjectConfiguration)(host, options.name, config);
|
|
100
102
|
yield (0, devkit_1.formatFiles)(host);
|
|
103
|
+
if (normalizedOptions.adsp && !options.skipAgent) {
|
|
104
|
+
const accessToken = (_c = normalizedOptions.adsp.accessToken) !== null && _c !== void 0 ? _c : options.accessToken;
|
|
105
|
+
const appComponentTs = (_e = (_d = host.read(`${normalizedOptions.projectRoot}/src/app/app.component.ts`)) === null || _d === void 0 ? void 0 : _d.toString()) !== null && _e !== void 0 ? _e : '';
|
|
106
|
+
const appComponentHtml = (_g = (_f = host.read(`${normalizedOptions.projectRoot}/src/app/app.component.html`)) === null || _f === void 0 ? void 0 : _f.toString()) !== null && _g !== void 0 ? _g : '';
|
|
107
|
+
const appConfigTs = (_j = (_h = host.read(`${normalizedOptions.projectRoot}/src/app/app.config.ts`)) === null || _h === void 0 ? void 0 : _h.toString()) !== null && _j !== void 0 ? _j : '';
|
|
108
|
+
const appRoutesTs = (_l = (_k = host.read(`${normalizedOptions.projectRoot}/src/app/app.routes.ts`)) === null || _k === void 0 ? void 0 : _k.toString()) !== null && _l !== void 0 ? _l : '';
|
|
109
|
+
const environmentTs = (_o = (_m = host.read(`${normalizedOptions.projectRoot}/src/environments/environment.ts`)) === null || _m === void 0 ? void 0 : _m.toString()) !== null && _o !== void 0 ? _o : '';
|
|
110
|
+
yield (0, agent_1.confirmAfterAgentInterrupt)(yield (0, agent_1.consultAgent)(normalizedOptions.adsp.directoryServiceUrl, accessToken, {
|
|
111
|
+
projectName: normalizedOptions.projectName,
|
|
112
|
+
projectType: 'angular-app',
|
|
113
|
+
tenant: normalizedOptions.adsp.tenant,
|
|
114
|
+
pluginVersion: plugin_version_1.PLUGIN_VERSION,
|
|
115
|
+
existingFiles: {
|
|
116
|
+
'src/app/app.component.ts': appComponentTs,
|
|
117
|
+
'src/app/app.component.html': appComponentHtml,
|
|
118
|
+
'src/app/app.config.ts': appConfigTs,
|
|
119
|
+
'src/app/app.routes.ts': appRoutesTs,
|
|
120
|
+
'src/environments/environment.ts': environmentTs,
|
|
121
|
+
},
|
|
122
|
+
}, host, normalizedOptions.projectRoot));
|
|
123
|
+
}
|
|
101
124
|
yield (0, nx_oc_1.deploymentGenerator)(host, Object.assign(Object.assign({}, normalizedOptions), { appType: 'frontend', project: normalizedOptions.projectName }));
|
|
102
125
|
return () => {
|
|
103
126
|
(0, devkit_1.installPackagesTask)(host);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-app.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/angular-app/angular-app.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"angular-app.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/angular-app/angular-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { AdspConfiguration, EnvironmentName } from '@abgov/nx-oc';
|
|
2
|
+
import type { NginxProxyConfiguration } from '../../utils/nginx';
|
|
2
3
|
|
|
3
4
|
export interface AngularAppGeneratorSchema {
|
|
4
5
|
name: string;
|
|
5
6
|
env: EnvironmentName;
|
|
6
7
|
accessToken?: string;
|
|
8
|
+
tenant?: string;
|
|
9
|
+
tenantRealm?: string;
|
|
7
10
|
proxy?: NginxProxyConfiguration | NginxProxyConfiguration[];
|
|
11
|
+
/** When true, skip the agent interaction. Used by composite generators that run the agent themselves. */
|
|
12
|
+
skipAgent?: boolean;
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
export interface NormalizedSchema extends AngularAppGeneratorSchema {
|
|
@@ -31,6 +31,16 @@
|
|
|
31
31
|
]
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
+
"tenant": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "ADSP tenant name. Looks up the tenant realm and opens a single browser login, avoiding a separate interactive tenant selection.",
|
|
37
|
+
"alias": "t"
|
|
38
|
+
},
|
|
39
|
+
"tenantRealm": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Keycloak realm UUID. Optional when --tenant is provided — overrides the realm looked up from the tenant service.",
|
|
42
|
+
"alias": "tr"
|
|
43
|
+
},
|
|
34
44
|
"accessToken": {
|
|
35
45
|
"type": "string",
|
|
36
46
|
"description": "Access token for retrieving configuration from ADSP APIs.",
|
|
@@ -7,9 +7,7 @@ const devkit_1 = require("@nx/devkit");
|
|
|
7
7
|
const eslint_1 = require("@nx/eslint");
|
|
8
8
|
const path = require("path");
|
|
9
9
|
const agent_1 = require("../../utils/agent");
|
|
10
|
-
|
|
11
|
-
// Keep in sync with package.json version.
|
|
12
|
-
const PLUGIN_VERSION = '12.x';
|
|
10
|
+
const plugin_version_1 = require("../../utils/plugin-version");
|
|
13
11
|
function normalizeOptions(host, options) {
|
|
14
12
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
13
|
var _a, _b, _c;
|
|
@@ -78,11 +76,12 @@ function default_1(host, options) {
|
|
|
78
76
|
// files and modifications to integration files (main.ts, environment.ts)
|
|
79
77
|
// which are applied directly to the Nx Tree.
|
|
80
78
|
// Falls back silently if agent-service is unreachable or no accessToken.
|
|
81
|
-
if (normalizedOptions.adsp) {
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
79
|
+
if (normalizedOptions.adsp && !options.skipAgent) {
|
|
80
|
+
// When --tenant was provided, normalizedOptions.accessToken holds the token
|
|
81
|
+
// from the single realm login already performed during normalizeOptions.
|
|
82
|
+
// token from the single realm login. Fall back to a new login only when the
|
|
83
|
+
// full interactive flow was used and no token is available.
|
|
84
|
+
const accessToken = (_a = normalizedOptions.accessToken) !== null && _a !== void 0 ? _a : (yield (0, nx_oc_1.realmLogin)(normalizedOptions.adsp.accessServiceUrl, normalizedOptions.adsp.tenantRealm).catch((err) => {
|
|
86
85
|
var _a;
|
|
87
86
|
process.stdout.write(`Agent sign-in failed (${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}) — skipping agent interaction.\n`);
|
|
88
87
|
return undefined;
|
|
@@ -93,21 +92,22 @@ function default_1(host, options) {
|
|
|
93
92
|
projectName: normalizedOptions.projectName,
|
|
94
93
|
projectType: 'express-service',
|
|
95
94
|
tenant: normalizedOptions.adsp.tenant,
|
|
96
|
-
pluginVersion: PLUGIN_VERSION,
|
|
95
|
+
pluginVersion: plugin_version_1.PLUGIN_VERSION,
|
|
97
96
|
existingFiles: {
|
|
98
97
|
'src/main.ts': mainTs,
|
|
99
98
|
'src/environment.ts': environmentTs,
|
|
100
99
|
},
|
|
101
100
|
}, host, normalizedOptions.projectRoot);
|
|
102
|
-
// When the
|
|
103
|
-
//
|
|
104
|
-
|
|
101
|
+
// When the agent interaction ended without generating files — whether the
|
|
102
|
+
// user was in a conversation or Ctrl+C'd before the agent responded —
|
|
103
|
+
// confirm whether to proceed. Default to false when Ctrl+C was used.
|
|
104
|
+
if (agentResult && agentResult.filesWritten === 0) {
|
|
105
105
|
const { prompt } = yield Promise.resolve().then(() => require('enquirer'));
|
|
106
106
|
const { proceed } = yield prompt({
|
|
107
107
|
type: 'confirm',
|
|
108
108
|
name: 'proceed',
|
|
109
109
|
message: 'Agent interaction ended without generating files. Continue with base scaffolding?',
|
|
110
|
-
initial:
|
|
110
|
+
initial: !agentResult.interrupted,
|
|
111
111
|
});
|
|
112
112
|
if (!proceed) {
|
|
113
113
|
throw new Error('Generation aborted.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express-service.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/express-service/express-service.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"express-service.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/express-service/express-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,8 @@ export interface Schema {
|
|
|
8
8
|
tenantRealm?: string;
|
|
9
9
|
/** ADSP tenant name (e.g. 'my-org'). Required when tenantRealm is provided. */
|
|
10
10
|
tenant?: string;
|
|
11
|
+
/** When true, skip the agent interaction. Used by composite generators that run the agent themselves. */
|
|
12
|
+
skipAgent?: boolean;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export interface NormalizedSchema extends Schema {
|
|
@@ -6,21 +6,54 @@ const devkit_1 = require("@nx/devkit");
|
|
|
6
6
|
const nx_oc_1 = require("@abgov/nx-oc");
|
|
7
7
|
const angular_app_1 = require("../angular-app/angular-app");
|
|
8
8
|
const express_service_1 = require("../express-service/express-service");
|
|
9
|
+
const agent_1 = require("../../utils/agent");
|
|
10
|
+
const plugin_version_1 = require("../../utils/plugin-version");
|
|
9
11
|
function normalizeOptions(host, options) {
|
|
10
12
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
var _a;
|
|
11
14
|
const adsp = yield (0, nx_oc_1.getAdspConfiguration)(host, options);
|
|
12
|
-
|
|
15
|
+
// Propagate the token from adsp to the Schema-level accessToken so that
|
|
16
|
+
// sub-generators (express-service, angular-app) that check options.accessToken
|
|
17
|
+
// see it and skip their own realmLogin fallback.
|
|
18
|
+
return Object.assign(Object.assign({}, options), { accessToken: (_a = adsp.accessToken) !== null && _a !== void 0 ? _a : options.accessToken, adsp });
|
|
13
19
|
});
|
|
14
20
|
}
|
|
15
21
|
function default_1(host, options) {
|
|
16
22
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
17
24
|
const normalizedOptions = yield normalizeOptions(host, options);
|
|
18
25
|
const projectName = (0, devkit_1.names)(options.name).fileName;
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
const serviceName = `${projectName}-service`;
|
|
27
|
+
const appName = `${projectName}-app`;
|
|
28
|
+
const appsDir = (0, devkit_1.getWorkspaceLayout)(host).appsDir;
|
|
29
|
+
const serviceRoot = `${appsDir}/${serviceName}`;
|
|
30
|
+
const appRoot = `${appsDir}/${appName}`;
|
|
31
|
+
// Scaffold both projects before the agent interaction so files exist to upload.
|
|
32
|
+
yield (0, express_service_1.default)(host, Object.assign(Object.assign({}, normalizedOptions), { name: serviceName, skipAgent: true }));
|
|
33
|
+
yield (0, angular_app_1.default)(host, Object.assign(Object.assign({}, normalizedOptions), { name: appName, proxy: {
|
|
21
34
|
location: '/api/',
|
|
22
|
-
proxyPass: `http://${
|
|
23
|
-
} }));
|
|
35
|
+
proxyPass: `http://${serviceName}:3333/${serviceName}/`,
|
|
36
|
+
}, skipAgent: true }));
|
|
37
|
+
if (normalizedOptions.adsp && options.tenant) {
|
|
38
|
+
// Single conversation covering the full stack. Files from both projects are
|
|
39
|
+
// uploaded with service/ and app/ prefixes so the agent can write to both,
|
|
40
|
+
// and are routed to the correct project root when applied.
|
|
41
|
+
yield (0, agent_1.confirmAfterAgentInterrupt)(yield (0, agent_1.consultAgent)(normalizedOptions.adsp.directoryServiceUrl, normalizedOptions.adsp.accessToken, {
|
|
42
|
+
projectName,
|
|
43
|
+
projectType: 'mean',
|
|
44
|
+
tenant: normalizedOptions.adsp.tenant,
|
|
45
|
+
pluginVersion: plugin_version_1.PLUGIN_VERSION,
|
|
46
|
+
existingFiles: {
|
|
47
|
+
'service/src/main.ts': (_b = (_a = host.read(`${serviceRoot}/src/main.ts`)) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',
|
|
48
|
+
'service/src/environment.ts': (_d = (_c = host.read(`${serviceRoot}/src/environment.ts`)) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',
|
|
49
|
+
'app/src/app/app.component.ts': (_f = (_e = host.read(`${appRoot}/src/app/app.component.ts`)) === null || _e === void 0 ? void 0 : _e.toString()) !== null && _f !== void 0 ? _f : '',
|
|
50
|
+
'app/src/app/app.component.html': (_h = (_g = host.read(`${appRoot}/src/app/app.component.html`)) === null || _g === void 0 ? void 0 : _g.toString()) !== null && _h !== void 0 ? _h : '',
|
|
51
|
+
'app/src/app/app.config.ts': (_k = (_j = host.read(`${appRoot}/src/app/app.config.ts`)) === null || _j === void 0 ? void 0 : _j.toString()) !== null && _k !== void 0 ? _k : '',
|
|
52
|
+
'app/src/app/app.routes.ts': (_m = (_l = host.read(`${appRoot}/src/app/app.routes.ts`)) === null || _l === void 0 ? void 0 : _l.toString()) !== null && _m !== void 0 ? _m : '',
|
|
53
|
+
'app/src/environments/environment.ts': (_p = (_o = host.read(`${appRoot}/src/environments/environment.ts`)) === null || _o === void 0 ? void 0 : _o.toString()) !== null && _p !== void 0 ? _p : '',
|
|
54
|
+
},
|
|
55
|
+
}, host, serviceRoot, { additionalRoots: { 'app': appRoot } }));
|
|
56
|
+
}
|
|
24
57
|
yield (0, devkit_1.formatFiles)(host);
|
|
25
58
|
return () => {
|
|
26
59
|
(0, devkit_1.installPackagesTask)(host);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mean.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/mean/mean.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"mean.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/mean/mean.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,16 @@
|
|
|
17
17
|
"enum": ["dev", "test", "prod"],
|
|
18
18
|
"default": "prod"
|
|
19
19
|
},
|
|
20
|
+
"tenant": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"description": "ADSP tenant name. Enables a single browser login for the full stack — service and frontend agent interactions both use the same tenant-realm token.",
|
|
23
|
+
"alias": "t"
|
|
24
|
+
},
|
|
25
|
+
"tenantRealm": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Keycloak realm UUID. Optional when --tenant is provided — overrides the realm looked up from the tenant service.",
|
|
28
|
+
"alias": "tr"
|
|
29
|
+
},
|
|
20
30
|
"accessToken": {
|
|
21
31
|
"type": "string",
|
|
22
32
|
"description": "Access token for ADSP tenant configuration (skips interactive login)."
|
|
@@ -6,21 +6,54 @@ const devkit_1 = require("@nx/devkit");
|
|
|
6
6
|
const nx_oc_1 = require("@abgov/nx-oc");
|
|
7
7
|
const express_service_1 = require("../express-service/express-service");
|
|
8
8
|
const react_app_1 = require("../react-app/react-app");
|
|
9
|
+
const agent_1 = require("../../utils/agent");
|
|
10
|
+
const plugin_version_1 = require("../../utils/plugin-version");
|
|
9
11
|
function normalizeOptions(host, options) {
|
|
10
12
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
var _a;
|
|
11
14
|
const adsp = yield (0, nx_oc_1.getAdspConfiguration)(host, options);
|
|
12
|
-
|
|
15
|
+
// Propagate the token from adsp to the Schema-level accessToken so that
|
|
16
|
+
// sub-generators (express-service, react-app) that check options.accessToken
|
|
17
|
+
// see it and skip their own realmLogin fallback.
|
|
18
|
+
return Object.assign(Object.assign({}, options), { accessToken: (_a = adsp.accessToken) !== null && _a !== void 0 ? _a : options.accessToken, adsp });
|
|
13
19
|
});
|
|
14
20
|
}
|
|
15
21
|
function default_1(host, options) {
|
|
16
22
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
17
24
|
const normalizedOptions = yield normalizeOptions(host, options);
|
|
18
25
|
const projectName = (0, devkit_1.names)(options.name).fileName;
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
const serviceName = `${projectName}-service`;
|
|
27
|
+
const appName = `${projectName}-app`;
|
|
28
|
+
const appsDir = (0, devkit_1.getWorkspaceLayout)(host).appsDir;
|
|
29
|
+
const serviceRoot = `${appsDir}/${serviceName}`;
|
|
30
|
+
const appRoot = `${appsDir}/${appName}`;
|
|
31
|
+
// Scaffold both projects before the agent interaction so files exist to upload.
|
|
32
|
+
yield (0, express_service_1.default)(host, Object.assign(Object.assign({}, normalizedOptions), { name: serviceName, skipAgent: true }));
|
|
33
|
+
yield (0, react_app_1.default)(host, Object.assign(Object.assign({}, normalizedOptions), { name: appName, proxy: {
|
|
21
34
|
location: '/api/',
|
|
22
|
-
proxyPass: `http://${
|
|
23
|
-
} }));
|
|
35
|
+
proxyPass: `http://${serviceName}:3333/${serviceName}/`,
|
|
36
|
+
}, skipAgent: true }));
|
|
37
|
+
if (normalizedOptions.adsp && options.tenant) {
|
|
38
|
+
// Single conversation covering the full stack. Files from both projects are
|
|
39
|
+
// uploaded with service/ and app/ prefixes so the agent can write to both,
|
|
40
|
+
// and are routed to the correct project root when applied.
|
|
41
|
+
yield (0, agent_1.confirmAfterAgentInterrupt)(yield (0, agent_1.consultAgent)(normalizedOptions.adsp.directoryServiceUrl, normalizedOptions.adsp.accessToken, {
|
|
42
|
+
projectName,
|
|
43
|
+
projectType: 'mern',
|
|
44
|
+
tenant: normalizedOptions.adsp.tenant,
|
|
45
|
+
pluginVersion: plugin_version_1.PLUGIN_VERSION,
|
|
46
|
+
existingFiles: {
|
|
47
|
+
'service/src/main.ts': (_b = (_a = host.read(`${serviceRoot}/src/main.ts`)) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',
|
|
48
|
+
'service/src/environment.ts': (_d = (_c = host.read(`${serviceRoot}/src/environment.ts`)) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',
|
|
49
|
+
'app/src/app/app.tsx': (_f = (_e = host.read(`${appRoot}/src/app/app.tsx`)) === null || _e === void 0 ? void 0 : _e.toString()) !== null && _f !== void 0 ? _f : '',
|
|
50
|
+
'app/src/store.ts': (_h = (_g = host.read(`${appRoot}/src/store.ts`)) === null || _g === void 0 ? void 0 : _g.toString()) !== null && _h !== void 0 ? _h : '',
|
|
51
|
+
'app/src/environments/environment.ts': (_k = (_j = host.read(`${appRoot}/src/environments/environment.ts`)) === null || _j === void 0 ? void 0 : _j.toString()) !== null && _k !== void 0 ? _k : '',
|
|
52
|
+
'app/src/app/config.slice.ts': (_m = (_l = host.read(`${appRoot}/src/app/config.slice.ts`)) === null || _l === void 0 ? void 0 : _l.toString()) !== null && _m !== void 0 ? _m : '',
|
|
53
|
+
'app/src/app/intake.slice.ts': (_p = (_o = host.read(`${appRoot}/src/app/intake.slice.ts`)) === null || _o === void 0 ? void 0 : _o.toString()) !== null && _p !== void 0 ? _p : '',
|
|
54
|
+
},
|
|
55
|
+
}, host, serviceRoot, { additionalRoots: { 'app': appRoot } }));
|
|
56
|
+
}
|
|
24
57
|
yield (0, devkit_1.formatFiles)(host);
|
|
25
58
|
return () => {
|
|
26
59
|
(0, devkit_1.installPackagesTask)(host);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mern.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/mern/mern.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"mern.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/mern/mern.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,16 @@
|
|
|
31
31
|
]
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
+
"tenant": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "ADSP tenant name. Enables a single browser login for the full stack — service and frontend agent interactions both use the same tenant-realm token.",
|
|
37
|
+
"alias": "t"
|
|
38
|
+
},
|
|
39
|
+
"tenantRealm": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Keycloak realm UUID. Optional when --tenant is provided — overrides the realm looked up from the tenant service.",
|
|
42
|
+
"alias": "tr"
|
|
43
|
+
},
|
|
34
44
|
"accessToken": {
|
|
35
45
|
"type": "string",
|
|
36
46
|
"description": "Access token for retrieving configuration from ADSP APIs.",
|
|
@@ -12,7 +12,7 @@ export const initializeConfig = createAsyncThunk(
|
|
|
12
12
|
'config/initialize',
|
|
13
13
|
async (environment?: Record<string, unknown>) => {
|
|
14
14
|
// Initialize state with environment and ADSP directory of services.
|
|
15
|
-
const directoryUrl = environment?.directory?.['url'];
|
|
15
|
+
const directoryUrl = (environment?.directory as Record<string, string> | undefined)?.['url'];
|
|
16
16
|
|
|
17
17
|
let directory: Record<string, string> = {};
|
|
18
18
|
if (directoryUrl) {
|
|
@@ -56,7 +56,7 @@ const configSlice = createSlice({
|
|
|
56
56
|
reducers: {},
|
|
57
57
|
extraReducers: (builder) => {
|
|
58
58
|
builder.addCase(initializeConfig.fulfilled, (state, { payload }) => {
|
|
59
|
-
state.environment = payload.environment;
|
|
59
|
+
state.environment = payload.environment ?? {};
|
|
60
60
|
state.directory = payload.directory;
|
|
61
61
|
state.initialized = true;
|
|
62
62
|
});
|
|
@@ -40,10 +40,10 @@ export const fetchPrivateResource = createAsyncThunk(
|
|
|
40
40
|
);
|
|
41
41
|
|
|
42
42
|
export const initialStartState: StartState = {
|
|
43
|
-
apiPublicMessage:
|
|
44
|
-
apiPrivateMessage:
|
|
43
|
+
apiPublicMessage: '',
|
|
44
|
+
apiPrivateMessage: '',
|
|
45
45
|
loadingStatus: 'not loaded',
|
|
46
|
-
error:
|
|
46
|
+
error: '',
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
export const startReducer = createReducer(initialStartState, (builder) => {
|
|
@@ -60,7 +60,7 @@ export const startReducer = createReducer(initialStartState, (builder) => {
|
|
|
60
60
|
)
|
|
61
61
|
.addCase(fetchPublicResource.rejected, (state: StartState, action) => {
|
|
62
62
|
state.loadingStatus = 'error';
|
|
63
|
-
state.error = action.error.message;
|
|
63
|
+
state.error = action.error.message ?? '';
|
|
64
64
|
})
|
|
65
65
|
.addCase(fetchPrivateResource.pending, (state: StartState) => {
|
|
66
66
|
state.loadingStatus = 'loading';
|
|
@@ -74,16 +74,16 @@ export const startReducer = createReducer(initialStartState, (builder) => {
|
|
|
74
74
|
)
|
|
75
75
|
.addCase(fetchPrivateResource.rejected, (state: StartState, action) => {
|
|
76
76
|
state.loadingStatus = 'error';
|
|
77
|
-
state.error = action.error.message;
|
|
77
|
+
state.error = action.error.message ?? '';
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
export const publicResourceSelector = createSelector(
|
|
82
|
-
(state:
|
|
82
|
+
(state: { [START_FEATURE_KEY]: StartState }) => state[START_FEATURE_KEY],
|
|
83
83
|
(start) => start.apiPublicMessage
|
|
84
84
|
);
|
|
85
85
|
|
|
86
86
|
export const privateResourceSelector = createSelector(
|
|
87
|
-
(state:
|
|
87
|
+
(state: { [START_FEATURE_KEY]: StartState }) => state[START_FEATURE_KEY],
|
|
88
88
|
(start) => start.apiPrivateMessage
|
|
89
89
|
);
|
|
@@ -48,7 +48,7 @@ export const logoutUser = createAsyncThunk('user/logout', async () => {
|
|
|
48
48
|
|
|
49
49
|
export async function getAccessToken(): Promise<string> {
|
|
50
50
|
await keycloak.updateToken(30);
|
|
51
|
-
return keycloak.token;
|
|
51
|
+
return keycloak.token as string;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const userSlice = createSlice({
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.default = default_1;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const nx_oc_1 = require("@abgov/nx-oc");
|
|
6
|
+
const agent_1 = require("../../utils/agent");
|
|
7
|
+
const plugin_version_1 = require("../../utils/plugin-version");
|
|
6
8
|
const devkit_1 = require("@nx/devkit");
|
|
7
9
|
const eslint_1 = require("@nx/eslint");
|
|
8
10
|
const path = require("path");
|
|
@@ -58,7 +60,7 @@ function removeFiles(host, options) {
|
|
|
58
60
|
}
|
|
59
61
|
function default_1(host, options) {
|
|
60
62
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
var _a, _b;
|
|
63
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
62
64
|
const normalizedOptions = yield normalizeOptions(host, options);
|
|
63
65
|
const { applicationGenerator: initReact } = yield Promise.resolve().then(() => require('@nx/react'));
|
|
64
66
|
// Setting strict to false because of: https://github.com/nrwl/nx/issues/8180
|
|
@@ -107,6 +109,27 @@ function default_1(host, options) {
|
|
|
107
109
|
}
|
|
108
110
|
(0, devkit_1.updateProjectConfiguration)(host, options.name, config);
|
|
109
111
|
yield (0, devkit_1.formatFiles)(host);
|
|
112
|
+
if (normalizedOptions.adsp && !options.skipAgent) {
|
|
113
|
+
const accessToken = (_c = normalizedOptions.adsp.accessToken) !== null && _c !== void 0 ? _c : options.accessToken;
|
|
114
|
+
const appTs = (_e = (_d = host.read(`${normalizedOptions.projectRoot}/src/app/app.tsx`)) === null || _d === void 0 ? void 0 : _d.toString()) !== null && _e !== void 0 ? _e : '';
|
|
115
|
+
const storeTs = (_g = (_f = host.read(`${normalizedOptions.projectRoot}/src/store.ts`)) === null || _f === void 0 ? void 0 : _f.toString()) !== null && _g !== void 0 ? _g : '';
|
|
116
|
+
const environmentTs = (_j = (_h = host.read(`${normalizedOptions.projectRoot}/src/environments/environment.ts`)) === null || _h === void 0 ? void 0 : _h.toString()) !== null && _j !== void 0 ? _j : '';
|
|
117
|
+
const configSliceTs = (_l = (_k = host.read(`${normalizedOptions.projectRoot}/src/app/config.slice.ts`)) === null || _k === void 0 ? void 0 : _k.toString()) !== null && _l !== void 0 ? _l : '';
|
|
118
|
+
const intakeSliceTs = (_o = (_m = host.read(`${normalizedOptions.projectRoot}/src/app/intake.slice.ts`)) === null || _m === void 0 ? void 0 : _m.toString()) !== null && _o !== void 0 ? _o : '';
|
|
119
|
+
yield (0, agent_1.confirmAfterAgentInterrupt)(yield (0, agent_1.consultAgent)(normalizedOptions.adsp.directoryServiceUrl, accessToken, {
|
|
120
|
+
projectName: normalizedOptions.projectName,
|
|
121
|
+
projectType: 'react-app',
|
|
122
|
+
tenant: normalizedOptions.adsp.tenant,
|
|
123
|
+
pluginVersion: plugin_version_1.PLUGIN_VERSION,
|
|
124
|
+
existingFiles: {
|
|
125
|
+
'src/app/app.tsx': appTs,
|
|
126
|
+
'src/store.ts': storeTs,
|
|
127
|
+
'src/environments/environment.ts': environmentTs,
|
|
128
|
+
'src/app/config.slice.ts': configSliceTs,
|
|
129
|
+
'src/app/intake.slice.ts': intakeSliceTs,
|
|
130
|
+
},
|
|
131
|
+
}, host, normalizedOptions.projectRoot));
|
|
132
|
+
}
|
|
110
133
|
yield (0, nx_oc_1.deploymentGenerator)(host, Object.assign(Object.assign({}, normalizedOptions), { appType: 'frontend', project: normalizedOptions.projectName }));
|
|
111
134
|
return () => {
|
|
112
135
|
(0, devkit_1.installPackagesTask)(host);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-app.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/react-app/react-app.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"react-app.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/react-app/react-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,11 @@ export interface Schema {
|
|
|
5
5
|
name: string;
|
|
6
6
|
env: EnvironmentName;
|
|
7
7
|
accessToken?: string;
|
|
8
|
+
tenant?: string;
|
|
9
|
+
tenantRealm?: string;
|
|
8
10
|
proxy?: NginxProxyConfiguration | NginxProxyConfiguration[];
|
|
11
|
+
/** When true, skip the agent interaction. Used by composite generators that run the agent themselves. */
|
|
12
|
+
skipAgent?: boolean;
|
|
9
13
|
}
|
|
10
14
|
|
|
11
15
|
export interface NormalizedSchema extends Schema {
|
|
@@ -31,6 +31,16 @@
|
|
|
31
31
|
]
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
+
"tenant": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "ADSP tenant name. Looks up the tenant realm and opens a single browser login, avoiding a separate interactive tenant selection.",
|
|
37
|
+
"alias": "t"
|
|
38
|
+
},
|
|
39
|
+
"tenantRealm": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Keycloak realm UUID. Optional when --tenant is provided — overrides the realm looked up from the tenant service.",
|
|
42
|
+
"alias": "tr"
|
|
43
|
+
},
|
|
34
44
|
"accessToken": {
|
|
35
45
|
"type": "string",
|
|
36
46
|
"description": "Access token for retrieving configuration from ADSP APIs.",
|