@abgov/nx-adsp 13.9.0 → 13.9.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 +42 -42
- package/package.json +1 -1
- package/src/build-assets.spec.ts +3 -3
- package/src/generators/angular-app/angular-app.js +22 -7
- package/src/generators/angular-app/angular-app.js.map +1 -1
- package/src/generators/angular-app/angular-app.spec.ts +8 -5
- package/src/generators/dotnet-service/dotnet-service.spec.ts +1 -1
- package/src/generators/express-service/express-service.js +16 -5
- package/src/generators/express-service/express-service.js.map +1 -1
- package/src/generators/express-service/express-service.spec.ts +39 -16
- package/src/generators/mean/mean.js +3 -2
- package/src/generators/mean/mean.js.map +1 -1
- package/src/generators/mean/mean.spec.ts +5 -2
- package/src/generators/mern/mern.js +3 -2
- package/src/generators/mern/mern.js.map +1 -1
- package/src/generators/mern/mern.spec.ts +5 -2
- package/src/generators/mevn/mevn.js +3 -2
- package/src/generators/mevn/mevn.js.map +1 -1
- package/src/generators/mevn/mevn.spec.ts +5 -2
- package/src/generators/pean/pean.js +3 -2
- package/src/generators/pean/pean.js.map +1 -1
- package/src/generators/pean/pean.spec.ts +5 -2
- package/src/generators/pern/pern.js +3 -2
- package/src/generators/pern/pern.js.map +1 -1
- package/src/generators/pern/pern.spec.ts +5 -2
- package/src/generators/pevn/pevn.js +3 -2
- package/src/generators/pevn/pevn.js.map +1 -1
- package/src/generators/pevn/pevn.spec.ts +5 -2
- package/src/generators/react-app/react-app.js +12 -5
- package/src/generators/react-app/react-app.js.map +1 -1
- package/src/generators/react-app/react-app.spec.ts +4 -4
- package/src/generators/react-dotnet/react-dotnet.spec.ts +1 -1
- package/src/generators/react-form/react-form.js.map +1 -1
- package/src/generators/react-form/react-forms.spec.ts +3 -3
- package/src/generators/react-task-list/react-task-list.js.map +1 -1
- package/src/generators/react-task-list/react-task-list.spec.ts +2 -2
- package/src/generators/vue-app/vue-app.js +13 -5
- package/src/generators/vue-app/vue-app.js.map +1 -1
- package/src/generators/vue-app/vue-app.spec.ts +24 -9
- package/src/generators/vue-components/vue-components.js +7 -2
- package/src/generators/vue-components/vue-components.js.map +1 -1
- package/src/generators/vue-components/vue-components.spec.ts +41 -13
- package/src/types/nx-angular-generators.d.ts +1 -1
- package/src/utils/agent.js +23 -9
- package/src/utils/agent.js.map +1 -1
- package/src/utils/agent.spec.ts +74 -17
- package/src/utils/keycloak-admin.js +16 -5
- package/src/utils/keycloak-admin.js.map +1 -1
- package/src/utils/quality.js.map +1 -1
- package/src/utils/quality.spec.ts +5 -3
package/README.md
CHANGED
|
@@ -10,17 +10,17 @@ Install only the framework peers for the generators you use — they are declare
|
|
|
10
10
|
as **optional** peer dependencies, so a workspace that only builds Vue apps
|
|
11
11
|
doesn't need `@nx/react`, `@nx/angular`, etc.
|
|
12
12
|
|
|
13
|
-
| Generator
|
|
14
|
-
|
|
15
|
-
| `react-app`
|
|
16
|
-
| `angular-app`
|
|
17
|
-
| `vue-app`
|
|
18
|
-
| `dotnet-service`
|
|
19
|
-
| `react-dotnet`
|
|
20
|
-
| `express-service`
|
|
21
|
-
| `pevn`, `mevn` (full-stack)
|
|
22
|
-
| `pern`, `pean` (full-stack)
|
|
23
|
-
| `react-form`, `react-task-list` | existing React project in the workspace
|
|
13
|
+
| Generator | Required peer dependency |
|
|
14
|
+
| ------------------------------- | ---------------------------------------- |
|
|
15
|
+
| `react-app` | `@nx/react` |
|
|
16
|
+
| `angular-app` | `@nx/angular` |
|
|
17
|
+
| `vue-app` | `@nx/vue` |
|
|
18
|
+
| `dotnet-service` | `@nx-dotnet/core` |
|
|
19
|
+
| `react-dotnet` | `@nx/react`, `@nx-dotnet/core` |
|
|
20
|
+
| `express-service` | `@nx/express` |
|
|
21
|
+
| `pevn`, `mevn` (full-stack) | `@nx/express`, `@nx/vue` |
|
|
22
|
+
| `pern`, `pean` (full-stack) | `@nx/express`, `@nx/react`/`@nx/angular` |
|
|
23
|
+
| `react-form`, `react-task-list` | existing React project in the workspace |
|
|
24
24
|
|
|
25
25
|
## Installation
|
|
26
26
|
|
|
@@ -99,13 +99,13 @@ Creates a Node/Express backend service configured for ADSP.
|
|
|
99
99
|
npx nx g @abgov/nx-adsp:express-service my-service --env dev --tenant my-tenant
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
| Option
|
|
103
|
-
|
|
104
|
-
| `name`
|
|
105
|
-
| `env`
|
|
106
|
-
| `tenant`
|
|
107
|
-
| `tenantRealm` | `-tr` | No
|
|
108
|
-
| `accessToken` | `-at` | No
|
|
102
|
+
| Option | Alias | Required | Description |
|
|
103
|
+
| ------------- | ----- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
104
|
+
| `name` | — | Yes | Name of the service |
|
|
105
|
+
| `env` | `-e` | No | ADSP environment / access service. Defaults to `test` = access-uat.alberta.ca (UAT — use for dev and pre-prod); `prod` = access.alberta.ca; `dev` = ADSP platform dev (restricted) |
|
|
106
|
+
| `tenant` | `-t` | No | ADSP tenant name; resolves the Keycloak realm by name (sign in once with `@abgov/adsp-cli` — see Authentication) |
|
|
107
|
+
| `tenantRealm` | `-tr` | No | Keycloak realm UUID; overrides the realm resolved from `--tenant` |
|
|
108
|
+
| `accessToken` | `-at` | No | Access token for non-interactive retrieval of ADSP configuration |
|
|
109
109
|
|
|
110
110
|
OpenAPI docs are generated from the same Zod schemas already used for request validation
|
|
111
111
|
(`@asteasolutions/zod-to-openapi`) and served at `/swagger/docs/v1` — no separate spec to
|
|
@@ -123,14 +123,14 @@ Creates a React/Redux frontend application configured for ADSP. Requires `@nx/re
|
|
|
123
123
|
npx nx g @abgov/nx-adsp:react-app my-app --env dev --tenant my-tenant
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
| Option
|
|
127
|
-
|
|
128
|
-
| `name`
|
|
129
|
-
| `env`
|
|
130
|
-
| `tenant`
|
|
131
|
-
| `tenantRealm` | `-tr` | No
|
|
132
|
-
| `accessToken` | `-at` | No
|
|
133
|
-
| `proxy`
|
|
126
|
+
| Option | Alias | Required | Description |
|
|
127
|
+
| ------------- | ----- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
128
|
+
| `name` | — | Yes | Name of the application |
|
|
129
|
+
| `env` | `-e` | No | ADSP environment / access service. Defaults to `test` = access-uat.alberta.ca (UAT — use for dev and pre-prod); `prod` = access.alberta.ca; `dev` = ADSP platform dev (restricted) |
|
|
130
|
+
| `tenant` | `-t` | No | ADSP tenant name; resolves the Keycloak realm by name (sign in once with `@abgov/adsp-cli` — see Authentication) |
|
|
131
|
+
| `tenantRealm` | `-tr` | No | Keycloak realm UUID; overrides the realm resolved from `--tenant` |
|
|
132
|
+
| `accessToken` | `-at` | No | Access token for non-interactive retrieval of ADSP configuration |
|
|
133
|
+
| `proxy` | — | No | Nginx proxy rule(s) as `{ location, proxyPass }` or an array of such objects |
|
|
134
134
|
|
|
135
135
|
---
|
|
136
136
|
|
|
@@ -154,11 +154,11 @@ Creates an ASP.NET Core backend service configured for ADSP. Requires `@nx-dotne
|
|
|
154
154
|
npx nx g @abgov/nx-adsp:dotnet-service my-service --env dev --accessToken $TOKEN
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
-
| Option
|
|
158
|
-
|
|
159
|
-
| `name`
|
|
160
|
-
| `env`
|
|
161
|
-
| `accessToken` | `-at` | No
|
|
157
|
+
| Option | Alias | Required | Description |
|
|
158
|
+
| ------------- | ----- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
159
|
+
| `name` | — | Yes | Name of the service |
|
|
160
|
+
| `env` | `-e` | No | ADSP environment / access service. Defaults to `test` = access-uat.alberta.ca (UAT — use for dev and pre-prod); `prod` = access.alberta.ca; `dev` = ADSP platform dev (restricted) |
|
|
161
|
+
| `accessToken` | `-at` | No | Access token for non-interactive retrieval of ADSP configuration |
|
|
162
162
|
|
|
163
163
|
---
|
|
164
164
|
|
|
@@ -182,11 +182,11 @@ Adds a React component generated from an existing [ADSP Form Definition](https:/
|
|
|
182
182
|
npx nx g @abgov/nx-adsp:react-form my-app --env test
|
|
183
183
|
```
|
|
184
184
|
|
|
185
|
-
| Option
|
|
186
|
-
|
|
187
|
-
| `project`
|
|
188
|
-
| `env`
|
|
189
|
-
| `accessToken` | `-at` | No
|
|
185
|
+
| Option | Alias | Required | Description |
|
|
186
|
+
| ------------- | ----- | -------- | ------------------------------------------------------------------------------------------------- |
|
|
187
|
+
| `project` | — | Yes | Name of the existing Nx project to add the form component to |
|
|
188
|
+
| `env` | `-e` | No | ADSP environment to fetch form definitions from. Defaults to `test` (UAT / access-uat.alberta.ca) |
|
|
189
|
+
| `accessToken` | `-at` | No | Access token for non-interactive retrieval of ADSP configuration |
|
|
190
190
|
|
|
191
191
|
---
|
|
192
192
|
|
|
@@ -224,11 +224,11 @@ When you run a generator:
|
|
|
224
224
|
|
|
225
225
|
Generator flags that steer which tenant/token is used:
|
|
226
226
|
|
|
227
|
-
| Flag
|
|
228
|
-
|
|
229
|
-
| `--tenant <name>`
|
|
230
|
-
| `--tenantRealm <uuid>`
|
|
231
|
-
| `--accessToken <token>` | Supply a pre-obtained token directly (CI/CD), bypassing the CLI
|
|
227
|
+
| Flag | Effect |
|
|
228
|
+
| ----------------------- | ----------------------------------------------------------------------------------- |
|
|
229
|
+
| `--tenant <name>` | Resolves the Keycloak realm by tenant name (anonymous lookup) and targets it |
|
|
230
|
+
| `--tenantRealm <uuid>` | Use the realm UUID directly; combine with `--tenant` to override the resolved realm |
|
|
231
|
+
| `--accessToken <token>` | Supply a pre-obtained token directly (CI/CD), bypassing the CLI |
|
|
232
232
|
|
|
233
233
|
With none of these, the generator lets `adsp login`'s interactive picker resolve the tenant. Don't
|
|
234
234
|
have a tenant yet? That picker also offers a **+ Create a new tenant** choice — available in
|
|
@@ -251,7 +251,7 @@ This needs the same tenant/token as [Authentication](#authentication) above, plu
|
|
|
251
251
|
is non-interactive (`--no-interactive`, no TTY, or `CI=true`). Skip it explicitly with
|
|
252
252
|
`--skipAgent`, regardless of interactivity.
|
|
253
253
|
|
|
254
|
-
> **Note for coding agents:** skip this. It exists to let a
|
|
254
|
+
> **Note for coding agents:** skip this. It exists to let a _human_ describe what they want built
|
|
255
255
|
> to a separate, remote agent working from nothing but that description. You already have the
|
|
256
256
|
> actual requirements and the surrounding codebase context that conversation exists to gather —
|
|
257
257
|
> make any needed customizations directly, after scaffolding, rather than through an indirect
|
package/package.json
CHANGED
package/src/build-assets.spec.ts
CHANGED
|
@@ -33,7 +33,7 @@ describe('build assets packaging', () => {
|
|
|
33
33
|
|
|
34
34
|
it('matches every non-TypeScript src file with an asset glob', () => {
|
|
35
35
|
const project = JSON.parse(
|
|
36
|
-
fs.readFileSync(path.join(projectRoot, 'project.json'), 'utf-8')
|
|
36
|
+
fs.readFileSync(path.join(projectRoot, 'project.json'), 'utf-8'),
|
|
37
37
|
);
|
|
38
38
|
const assets: unknown[] = project.targets.build.options.assets ?? [];
|
|
39
39
|
|
|
@@ -44,7 +44,7 @@ describe('build assets packaging', () => {
|
|
|
44
44
|
typeof a === 'object' &&
|
|
45
45
|
a !== null &&
|
|
46
46
|
'input' in a &&
|
|
47
|
-
path.resolve(repoRoot, (a as { input: string }).input) === srcRoot
|
|
47
|
+
path.resolve(repoRoot, (a as { input: string }).input) === srcRoot,
|
|
48
48
|
)
|
|
49
49
|
.map((a) => a.glob);
|
|
50
50
|
|
|
@@ -54,7 +54,7 @@ describe('build assets packaging', () => {
|
|
|
54
54
|
.map((f) => path.relative(srcRoot, f));
|
|
55
55
|
|
|
56
56
|
const unmatched = mustShip.filter(
|
|
57
|
-
(rel) => !srcGlobs.some((glob) => minimatch(rel, glob, { dot: true }))
|
|
57
|
+
(rel) => !srcGlobs.some((glob) => minimatch(rel, glob, { dot: true })),
|
|
58
58
|
);
|
|
59
59
|
|
|
60
60
|
expect(unmatched).toEqual([]);
|
|
@@ -93,7 +93,13 @@ function default_1(host, options) {
|
|
|
93
93
|
(0, quality_1.addVsCodeSettings)(host);
|
|
94
94
|
// @nx/angular generates app.ts/html/css/spec.ts (new naming) and nx-welcome.ts;
|
|
95
95
|
// our templates use app.component.* and don't use nx-welcome.
|
|
96
|
-
for (const file of [
|
|
96
|
+
for (const file of [
|
|
97
|
+
'app.ts',
|
|
98
|
+
'app.html',
|
|
99
|
+
'app.css',
|
|
100
|
+
'app.spec.ts',
|
|
101
|
+
'nx-welcome.ts',
|
|
102
|
+
]) {
|
|
97
103
|
host.delete(`${normalizedOptions.projectRoot}/src/app/${file}`);
|
|
98
104
|
}
|
|
99
105
|
const config = (0, devkit_1.readProjectConfiguration)(host, options.name);
|
|
@@ -106,7 +112,11 @@ function default_1(host, options) {
|
|
|
106
112
|
if ((_c = config.targets.build.configurations) === null || _c === void 0 ? void 0 : _c.production) {
|
|
107
113
|
config.targets.build.configurations.production.budgets = [
|
|
108
114
|
{ type: 'initial', maximumWarning: '2mb', maximumError: '4mb' },
|
|
109
|
-
{
|
|
115
|
+
{
|
|
116
|
+
type: 'anyComponentStyle',
|
|
117
|
+
maximumWarning: '6kb',
|
|
118
|
+
maximumError: '10kb',
|
|
119
|
+
},
|
|
110
120
|
];
|
|
111
121
|
}
|
|
112
122
|
config.targets.build.options = Object.assign(Object.assign({}, config.targets.build.options), { polyfills: ['zone.js'], assets: [
|
|
@@ -140,11 +150,16 @@ function default_1(host, options) {
|
|
|
140
150
|
}
|
|
141
151
|
if (normalizedOptions.adsp && !options.skipAgent) {
|
|
142
152
|
const accessToken = (_f = normalizedOptions.adsp.accessToken) !== null && _f !== void 0 ? _f : options.accessToken;
|
|
143
|
-
const appComponentTs = (_h = (_g = host
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
const
|
|
153
|
+
const appComponentTs = (_h = (_g = host
|
|
154
|
+
.read(`${normalizedOptions.projectRoot}/src/app/app.component.ts`)) === null || _g === void 0 ? void 0 : _g.toString()) !== null && _h !== void 0 ? _h : '';
|
|
155
|
+
const appComponentHtml = (_k = (_j = host
|
|
156
|
+
.read(`${normalizedOptions.projectRoot}/src/app/app.component.html`)) === null || _j === void 0 ? void 0 : _j.toString()) !== null && _k !== void 0 ? _k : '';
|
|
157
|
+
const appConfigTs = (_m = (_l = host
|
|
158
|
+
.read(`${normalizedOptions.projectRoot}/src/app/app.config.ts`)) === null || _l === void 0 ? void 0 : _l.toString()) !== null && _m !== void 0 ? _m : '';
|
|
159
|
+
const appRoutesTs = (_p = (_o = host
|
|
160
|
+
.read(`${normalizedOptions.projectRoot}/src/app/app.routes.ts`)) === null || _o === void 0 ? void 0 : _o.toString()) !== null && _p !== void 0 ? _p : '';
|
|
161
|
+
const environmentTs = (_r = (_q = host
|
|
162
|
+
.read(`${normalizedOptions.projectRoot}/src/environments/environment.ts`)) === null || _q === void 0 ? void 0 : _q.toString()) !== null && _r !== void 0 ? _r : '';
|
|
148
163
|
yield (0, agent_1.confirmAfterAgentInterrupt)(yield (0, agent_1.consultAgent)(normalizedOptions.adsp.directoryServiceUrl, accessToken, {
|
|
149
164
|
projectName: normalizedOptions.projectName,
|
|
150
165
|
projectType: 'angular-app',
|
|
@@ -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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"}
|
|
@@ -6,7 +6,10 @@ import { environments } from '@abgov/nx-oc';
|
|
|
6
6
|
import angularApp from './angular-app';
|
|
7
7
|
import { AngularAppGeneratorSchema } from './schema';
|
|
8
8
|
|
|
9
|
-
jest.mock('@nx/devkit', () => ({
|
|
9
|
+
jest.mock('@nx/devkit', () => ({
|
|
10
|
+
...jest.requireActual('@nx/devkit'),
|
|
11
|
+
formatFiles: jest.fn().mockResolvedValue(undefined),
|
|
12
|
+
}));
|
|
10
13
|
jest.mock('@abgov/nx-oc');
|
|
11
14
|
jest.mock('../../utils/agent', () => ({
|
|
12
15
|
consultAgent: jest.fn().mockResolvedValue(null),
|
|
@@ -22,7 +25,7 @@ utilsMock.getAdspConfiguration.mockResolvedValue({
|
|
|
22
25
|
// jest.mock('@abgov/nx-oc') automocks adspProjectTags too — restore the real
|
|
23
26
|
// (pure, no I/O) implementation so tag-writing behavior is actually exercised.
|
|
24
27
|
utilsMock.adspProjectTags.mockImplementation(
|
|
25
|
-
jest.requireActual('@abgov/nx-oc').adspProjectTags
|
|
28
|
+
jest.requireActual('@abgov/nx-oc').adspProjectTags,
|
|
26
29
|
);
|
|
27
30
|
|
|
28
31
|
describe('angular app generator', () => {
|
|
@@ -49,7 +52,7 @@ describe('angular app generator', () => {
|
|
|
49
52
|
expect(appTree.exists('apps/test-e2e/project.json')).toBeTruthy();
|
|
50
53
|
expect(
|
|
51
54
|
appTree.exists('apps/test-e2e/playwright.config.ts') ||
|
|
52
|
-
appTree.exists('apps/test-e2e/playwright.config.mts')
|
|
55
|
+
appTree.exists('apps/test-e2e/playwright.config.mts'),
|
|
53
56
|
).toBe(true);
|
|
54
57
|
expect(appTree.exists('apps/test-e2e/cypress.config.ts')).toBeFalsy();
|
|
55
58
|
// webServer guarded so CI can target a deployed URL (BASE_URL) instead of a local server
|
|
@@ -82,7 +85,7 @@ describe('angular app generator', () => {
|
|
|
82
85
|
|
|
83
86
|
expect(host.exists('apps/test/nginx.conf')).toBeTruthy();
|
|
84
87
|
expect(host.read('apps/test/nginx.conf').toString()).toContain(
|
|
85
|
-
'http://test-service:3333/'
|
|
88
|
+
'http://test-service:3333/',
|
|
86
89
|
);
|
|
87
90
|
});
|
|
88
91
|
|
|
@@ -127,7 +130,7 @@ describe('angular app generator', () => {
|
|
|
127
130
|
expect(host.exists('apps/test/proxy.conf.json')).toBeTruthy();
|
|
128
131
|
|
|
129
132
|
const proxyConf = JSON.parse(
|
|
130
|
-
host.read('apps/test/proxy.conf.json').toString()
|
|
133
|
+
host.read('apps/test/proxy.conf.json').toString(),
|
|
131
134
|
);
|
|
132
135
|
expect(proxyConf['/test/'].target).toBe('http://localhost:3333');
|
|
133
136
|
expect(proxyConf['/test/'].pathRewrite['^/test/']).toBe('/api/');
|
|
@@ -39,9 +39,16 @@ function default_1(host, options) {
|
|
|
39
39
|
});
|
|
40
40
|
const normalizedOptions = yield normalizeOptions(host, options);
|
|
41
41
|
yield initExpress(host, Object.assign(Object.assign({}, options), { skipFormat: true, skipPackageJson: false, linter: eslint_1.Linter.EsLint, unitTestRunner: 'jest', js: false, directory: normalizedOptions.projectRoot }));
|
|
42
|
-
(0, devkit_1.addDependenciesToPackageJson)(host, Object.assign(Object.assign({ '@abgov/adsp-service-sdk': '^2.23.0', '@asteasolutions/zod-to-openapi': '^7.3.4', compression: '^1.8.1', cors: '^2.8.5', dotenv: '^16.4.7', envalid: '^8.0.0', helmet: '^8.0.0', passport: '^0.7.0', 'passport-anonymous': '^1.0.1', zod: '^3.0.0' }, (normalizedOptions.database === 'postgres'
|
|
42
|
+
(0, devkit_1.addDependenciesToPackageJson)(host, Object.assign(Object.assign({ '@abgov/adsp-service-sdk': '^2.23.0', '@asteasolutions/zod-to-openapi': '^7.3.4', compression: '^1.8.1', cors: '^2.8.5', dotenv: '^16.4.7', envalid: '^8.0.0', helmet: '^8.0.0', passport: '^0.7.0', 'passport-anonymous': '^1.0.1', zod: '^3.0.0' }, (normalizedOptions.database === 'postgres'
|
|
43
|
+
? { 'drizzle-orm': '^0.44.0', pg: '^8.11.0' }
|
|
44
|
+
: {})), (normalizedOptions.database === 'mongo' ? { mongoose: '^8.0.0' } : {})), Object.assign(Object.assign({ '@types/compression': '^1.7.5', '@types/cors': '^2.8.17', '@types/passport': '^1.0.16', '@types/passport-anonymous': '^1.0.3', supertest: '^7.0.0', '@types/supertest': '^6.0.0' }, (normalizedOptions.database === 'postgres'
|
|
45
|
+
? { 'drizzle-kit': '^0.31.0', '@types/pg': '^8.11.0' }
|
|
46
|
+
: {})), { 'eslint-plugin-security': '^3.0.0', 'eslint-plugin-no-secrets': '^2.0.0', 'eslint-plugin-jest': '^28.0.0' }));
|
|
43
47
|
addFiles(host, normalizedOptions);
|
|
44
|
-
(0, quality_1.addEslintQualityRules)(host, normalizedOptions.projectRoot, [
|
|
48
|
+
(0, quality_1.addEslintQualityRules)(host, normalizedOptions.projectRoot, [
|
|
49
|
+
'**/*.spec.ts',
|
|
50
|
+
'**/*.test.ts',
|
|
51
|
+
]);
|
|
45
52
|
(0, quality_1.addJestCoverageConfig)(host, normalizedOptions.projectRoot);
|
|
46
53
|
(0, quality_1.addVsCodeSettings)(host);
|
|
47
54
|
// Equip coding agents with grounded ADSP docs + Node SDK reference lookup.
|
|
@@ -116,7 +123,9 @@ function default_1(host, options) {
|
|
|
116
123
|
// developer-owned config too (KEYCLOAK_ROOT_URL, DIRECTORY_URL, etc.) and
|
|
117
124
|
// shouldn't be blanket-gitignored.
|
|
118
125
|
const envLocalPath = `${normalizedOptions.projectRoot}/.env.local`;
|
|
119
|
-
const existing = host.exists(envLocalPath)
|
|
126
|
+
const existing = host.exists(envLocalPath)
|
|
127
|
+
? host.read(envLocalPath).toString()
|
|
128
|
+
: '';
|
|
120
129
|
if (!existing.includes('CLIENT_SECRET=')) {
|
|
121
130
|
host.write(envLocalPath, `${existing ? existing.trimEnd() + '\n' : ''}CLIENT_SECRET=${clientSecret}\n`);
|
|
122
131
|
}
|
|
@@ -132,10 +141,12 @@ function default_1(host, options) {
|
|
|
132
141
|
// so it's already on normalizedOptions.accessToken (--tenant) or adsp.accessToken.
|
|
133
142
|
const accessToken = (_f = normalizedOptions.accessToken) !== null && _f !== void 0 ? _f : normalizedOptions.adsp.accessToken;
|
|
134
143
|
const mainTs = (_h = (_g = host.read(`${normalizedOptions.projectRoot}/src/main.ts`)) === null || _g === void 0 ? void 0 : _g.toString()) !== null && _h !== void 0 ? _h : '';
|
|
135
|
-
const environmentTs = (_k = (_j = host
|
|
144
|
+
const environmentTs = (_k = (_j = host
|
|
145
|
+
.read(`${normalizedOptions.projectRoot}/src/environment.ts`)) === null || _j === void 0 ? void 0 : _j.toString()) !== null && _k !== void 0 ? _k : '';
|
|
136
146
|
const eventsTs = (_m = (_l = host.read(`${normalizedOptions.projectRoot}/src/events.ts`)) === null || _l === void 0 ? void 0 : _l.toString()) !== null && _m !== void 0 ? _m : '';
|
|
137
147
|
const databaseTs = normalizedOptions.database !== 'none'
|
|
138
|
-
? (_p = (_o = host
|
|
148
|
+
? ((_p = (_o = host
|
|
149
|
+
.read(`${normalizedOptions.projectRoot}/src/database.ts`)) === null || _o === void 0 ? void 0 : _o.toString()) !== null && _p !== void 0 ? _p : '')
|
|
139
150
|
: undefined;
|
|
140
151
|
const agentResult = yield (0, agent_1.consultAgent)(normalizedOptions.adsp.directoryServiceUrl, accessToken, {
|
|
141
152
|
projectName: normalizedOptions.projectName,
|
|
@@ -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":";;AAuEA,4BA6PC;;AApUD,wCAIsB;AACtB,uCAUoB;AACpB,uCAAoC;AACpC,6BAA6B;AAC7B,6CAAiD;AACjD,+DAAiE;AACjE,+DAA4D;AAC5D,iDAM6B;AAG7B,SAAe,gBAAgB,CAC7B,IAAU,EACV,OAAe;;;QAEf,MAAM,WAAW,GAAG,IAAA,cAAK,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;QACjD,MAAM,WAAW,GAAG,GAAG,IAAA,2BAAkB,EAAC,IAAI,CAAC,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;QAEzE,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAoB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvD,uCACK,OAAO,KACV,WAAW;YACX,WAAW;YACX,IAAI,EACJ,QAAQ,EAAE,MAAA,OAAO,CAAC,QAAQ,mCAAI,MAAM,IACpC;IACJ,CAAC;CAAA;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,OAAyB;;IACrD,MAAM,eAAe,iDAChB,OAAO,GACP,OAAO,CAAC,IAAI,KACf,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,IAAI,EAC5C,IAAI,EAAE,EAAE,GACT,CAAC;IACF,IAAA,sBAAa,EACX,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,WAAW,EACnB,eAAe,CAChB,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACpE,IAAA,sBAAa,EACX,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,OAAO,CAAC,QAAQ,EAAE,CAAC,EACjD,OAAO,CAAC,WAAW,EACnB,eAAe,CAChB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,mBAA+B,IAAU,EAAE,OAAe;;;QACxD,4EAA4E;QAC5E,2EAA2E;QAC3E,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,GACzC,MAAM,qCAAO,aAAa,GAAE,KAAK,CAAC,GAAG,EAAE;YACrC,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,MAAM,iBAAiB,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEhE,MAAM,WAAW,CAAC,IAAI,kCACjB,OAAO,KACV,UAAU,EAAE,IAAI,EAChB,eAAe,EAAE,KAAK,EACtB,MAAM,EAAE,eAAM,CAAC,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,iBAAiB,CAAC,WAAW,IACxC,CAAC;QAEH,IAAA,qCAA4B,EAC1B,IAAI,gCAEF,yBAAyB,EAAE,SAAS,EACpC,gCAAgC,EAAE,QAAQ,EAC1C,WAAW,EAAE,QAAQ,EACrB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,QAAQ,EAC9B,GAAG,EAAE,QAAQ,IACV,CAAC,iBAAiB,CAAC,QAAQ,KAAK,UAAU;YAC3C,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC,GACJ,CAAC,iBAAiB,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,iCAGzE,oBAAoB,EAAE,QAAQ,EAC9B,aAAa,EAAE,SAAS,EACxB,iBAAiB,EAAE,SAAS,EAC5B,2BAA2B,EAAE,QAAQ,EACrC,SAAS,EAAE,QAAQ,EACnB,kBAAkB,EAAE,QAAQ,IACzB,CAAC,iBAAiB,CAAC,QAAQ,KAAK,UAAU;YAC3C,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC,KACP,wBAAwB,EAAE,QAAQ,EAClC,0BAA0B,EAAE,QAAQ,EACpC,oBAAoB,EAAE,SAAS,IAElC,CAAC;QAEF,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAElC,IAAA,+BAAqB,EAAC,IAAI,EAAE,iBAAiB,CAAC,WAAW,EAAE;YACzD,cAAc;YACd,cAAc;SACf,CAAC,CAAC;QACH,IAAA,+BAAqB,EAAC,IAAI,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAA,2BAAiB,EAAC,IAAI,CAAC,CAAC;QACxB,2EAA2E;QAC3E,IAAA,0BAAgB,EAAC,IAAI,CAAC,CAAC;QAEvB,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAC5C,IAAI,EACJ,iBAAiB,CAAC,WAAW,CAC9B,CAAC;QACF,MAAM,OAAO,qBAAQ,aAAa,CAAC,OAAO,CAAE,CAAC;QAE7C,IAAI,iBAAiB,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAClB,QAAQ,EAAE,iBAAiB;gBAC3B,OAAO,EAAE;oBACP,OAAO,EAAE,wBAAwB;oBACjC,GAAG,EAAE,eAAe;iBACrB;aACF,CAAC;YAEF,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,OAAO,CAAC,mCACX,OAAO,CAAC,OAAO,CAAC,KACnB,SAAS,EAAE,CAAC,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,mCAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,GAC7D,CAAC;YACJ,CAAC;YAED,IAAI,iBAAiB,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC9C,OAAO,CAAC,aAAa,CAAC,GAAG;oBACvB,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,eAAe,EAAE;iBACvE,CAAC;gBACF,OAAO,CAAC,YAAY,CAAC,GAAG;oBACtB,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,eAAe,EAAE;iBACtE,CAAC;gBACF,OAAO,CAAC,mBAAmB,CAAC,GAAG;oBAC7B,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,eAAe,EAAE;iBACtE,CAAC;gBACF,OAAO,CAAC,WAAW,CAAC,GAAG;oBACrB,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,GAAG,EAAE,eAAe,EAAE;iBACrE,CAAC;gBAEF,6EAA6E;gBAC7E,2EAA2E;gBAC3E,wEAAwE;gBACxE,IAAI,MAAA,OAAO,CAAC,OAAO,CAAC,0CAAE,OAAO,EAAE,CAAC;oBAC9B,OAAO,CAAC,OAAO,CAAC,mCACX,OAAO,CAAC,OAAO,CAAC,KACnB,OAAO,kCACF,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,KAC3B,MAAM,EAAE;gCACN,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;gCAC1C;oCACE,KAAK,EAAE,GAAG,iBAAiB,CAAC,WAAW,UAAU;oCACjD,IAAI,EAAE,MAAM;oCACZ,MAAM,EAAE,SAAS;iCAClB;6BACF,MAEJ,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,4EAA4E;QAC5E,MAAM,KAAK,GAAG,iBAAiB,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG;YACd,GAAG,CAAC,iBAAiB,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,IAAA,uBAAe,EAAC,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;SACzE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,CAAC,MAAA,aAAa,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA,EAAA,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAA,aAAa,CAAC,IAAI,mCAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;QAEzD,IAAA,mCAA0B,EAAC,IAAI,EAAE,iBAAiB,CAAC,WAAW,kCACzD,aAAa,KAChB,OAAO;YACP,IAAI,IACJ,CAAC;QAEH,IAAA,0BAAgB,EAAC,IAAI,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,IAAI,iBAAiB,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,WAAW,iBAAiB,CAAC,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAC7F,MAAM,WAAW,GACf,MAAA,iBAAiB,CAAC,WAAW,mCAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;YACtE,MAAM,YAAY,GAAG,MAAM,IAAA,oCAAmB,EAC5C,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EACvC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAClC,QAAQ,EACR,WAAW,CACZ,CAAC;YACF,IAAI,YAAY,EAAE,CAAC;gBACjB,6EAA6E;gBAC7E,wEAAwE;gBACxE,sEAAsE;gBACtE,uEAAuE;gBACvE,sEAAsE;gBACtE,0EAA0E;gBAC1E,mCAAmC;gBACnC,MAAM,YAAY,GAAG,GAAG,iBAAiB,CAAC,WAAW,aAAa,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;oBACxC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;oBACpC,CAAC,CAAC,EAAE,CAAC;gBACP,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,KAAK,CACR,YAAY,EACZ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,YAAY,IAAI,CAC9E,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,6CAA6C;QAC7C,yEAAyE;QACzE,IAAI,iBAAiB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACjD,gFAAgF;YAChF,mFAAmF;YACnF,MAAM,WAAW,GACf,MAAA,iBAAiB,CAAC,WAAW,mCAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;YAEtE,MAAM,MAAM,GACV,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,WAAW,cAAc,CAAC,0CAAE,QAAQ,EAAE,mCACrE,EAAE,CAAC;YACL,MAAM,aAAa,GACjB,MAAA,MAAA,IAAI;iBACD,IAAI,CAAC,GAAG,iBAAiB,CAAC,WAAW,qBAAqB,CAAC,0CAC1D,QAAQ,EAAE,mCAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GACZ,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,WAAW,gBAAgB,CAAC,0CAAE,QAAQ,EAAE,mCACvE,EAAE,CAAC;YACL,MAAM,UAAU,GACd,iBAAiB,CAAC,QAAQ,KAAK,MAAM;gBACnC,CAAC,CAAC,CAAC,MAAA,MAAA,IAAI;qBACF,IAAI,CAAC,GAAG,iBAAiB,CAAC,WAAW,kBAAkB,CAAC,0CACvD,QAAQ,EAAE,mCAAI,EAAE,CAAC;gBACvB,CAAC,CAAC,SAAS,CAAC;YAEhB,MAAM,WAAW,GAAG,MAAM,IAAA,oBAAY,EACpC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,EAC1C,WAAW,EACX;gBACE,WAAW,EAAE,iBAAiB,CAAC,WAAW;gBAC1C,WAAW,EAAE,iBAAiB;gBAC9B,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM;gBACrC,aAAa,EAAE,+BAAc;gBAC7B,aAAa,kBACX,aAAa,EAAE,MAAM,EACrB,oBAAoB,EAAE,aAAa,EACnC,eAAe,EAAE,QAAQ,IACtB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACzD;aACF,EACD,IAAI,EACJ,iBAAiB,CAAC,WAAW,CAC9B,CAAC;YAEF,0EAA0E;YAC1E,sEAAsE;YACtE,qEAAqE;YACrE,IAAI,WAAW,IAAI,WAAW,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,EAAE,MAAM,EAAE,GAAG,2CAAa,UAAU,EAAC,CAAC;gBAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAuB;oBACrD,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EACL,mFAAmF;oBACrF,OAAO,EAAE,CAAC,WAAW,CAAC,WAAW;iBAClC,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAA,2BAAmB,EAAC,IAAI,kCACzB,iBAAiB,KACpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,WAAW,EACtC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,IACpC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;CAAA"}
|
|
@@ -18,7 +18,7 @@ utilsMock.getAdspConfiguration.mockResolvedValue({
|
|
|
18
18
|
// jest.mock('@abgov/nx-oc') automocks adspProjectTags too — restore the real
|
|
19
19
|
// (pure, no I/O) implementation so tag-writing behavior is actually exercised.
|
|
20
20
|
utilsMock.adspProjectTags.mockImplementation(
|
|
21
|
-
jest.requireActual('@abgov/nx-oc').adspProjectTags
|
|
21
|
+
jest.requireActual('@abgov/nx-oc').adspProjectTags,
|
|
22
22
|
);
|
|
23
23
|
utilsMock.deploymentGenerator.mockResolvedValue(undefined);
|
|
24
24
|
utilsMock.ensureAdspToken.mockResolvedValue('test-token');
|
|
@@ -41,7 +41,9 @@ describe('Express Service Generator', () => {
|
|
|
41
41
|
|
|
42
42
|
expect(host.exists('apps/test/src/main.ts')).toBeTruthy();
|
|
43
43
|
expect(host.exists('apps/test/src/environment.ts')).toBeTruthy();
|
|
44
|
-
expect(
|
|
44
|
+
expect(
|
|
45
|
+
host.exists('apps/test/src/environments/environment.ts'),
|
|
46
|
+
).toBeFalsy();
|
|
45
47
|
}, 60000);
|
|
46
48
|
|
|
47
49
|
it('serves generated OpenAPI docs, discoverable via the root _links convention', async () => {
|
|
@@ -61,7 +63,9 @@ describe('Express Service Generator', () => {
|
|
|
61
63
|
const mainTs = host.read('apps/test/src/main.ts').toString();
|
|
62
64
|
expect(mainTs).toContain('OpenApiGeneratorV3');
|
|
63
65
|
expect(mainTs).toContain('/swagger/docs/v1');
|
|
64
|
-
expect(mainTs).toContain(
|
|
66
|
+
expect(mainTs).toContain(
|
|
67
|
+
"docs: { href: new URL('/swagger/docs/v1', rootUrl).href }",
|
|
68
|
+
);
|
|
65
69
|
// Document-level default security — without it, routes with no explicit
|
|
66
70
|
// `security` override (e.g. /private) would inherit nothing at all,
|
|
67
71
|
// rather than the accessToken requirement they actually enforce.
|
|
@@ -109,7 +113,10 @@ describe('Express Service Generator', () => {
|
|
|
109
113
|
// Unrelated server preserved.
|
|
110
114
|
expect(mcp.mcpServers.other).toEqual({ command: 'other-cmd', args: [] });
|
|
111
115
|
// A team's customized adsp-sdk entry is not overwritten.
|
|
112
|
-
expect(mcp.mcpServers['adsp-sdk']).toEqual({
|
|
116
|
+
expect(mcp.mcpServers['adsp-sdk']).toEqual({
|
|
117
|
+
command: 'node',
|
|
118
|
+
args: ['/local/build/main.js'],
|
|
119
|
+
});
|
|
113
120
|
}, 60000);
|
|
114
121
|
|
|
115
122
|
it('factors routes into a router module mounted in main.ts (not inlined)', async () => {
|
|
@@ -119,7 +126,9 @@ describe('Express Service Generator', () => {
|
|
|
119
126
|
// main.ts holds infra + the mount, not route handlers.
|
|
120
127
|
const mainTs = host.read('apps/test/src/main.ts').toString();
|
|
121
128
|
expect(mainTs).toContain('createErrorHandler');
|
|
122
|
-
expect(mainTs).toContain(
|
|
129
|
+
expect(mainTs).toContain(
|
|
130
|
+
"import { exampleRouter } from './routes/example'",
|
|
131
|
+
);
|
|
123
132
|
expect(mainTs).toContain('exampleRouter(eventService)');
|
|
124
133
|
// The handler internals moved out of main.ts.
|
|
125
134
|
expect(mainTs).not.toContain('authorize');
|
|
@@ -128,7 +137,9 @@ describe('Express Service Generator', () => {
|
|
|
128
137
|
// The router module carries the handlers, capabilities passed in as args.
|
|
129
138
|
expect(host.exists('apps/test/src/routes/example.ts')).toBeTruthy();
|
|
130
139
|
const routerTs = host.read('apps/test/src/routes/example.ts').toString();
|
|
131
|
-
expect(routerTs).toContain(
|
|
140
|
+
expect(routerTs).toContain(
|
|
141
|
+
'export function exampleRouter(eventService: EventService)',
|
|
142
|
+
);
|
|
132
143
|
expect(routerTs).toContain('authorize');
|
|
133
144
|
expect(routerTs).toContain('createValidationHandler');
|
|
134
145
|
expect(routerTs).toContain('eventService.send');
|
|
@@ -170,14 +181,17 @@ describe('Express Service Generator', () => {
|
|
|
170
181
|
expect(config.targets['serve'].dependsOn).toContain('dev-db');
|
|
171
182
|
|
|
172
183
|
// Drizzle has no client codegen, so build must NOT depend on db:generate.
|
|
173
|
-
expect(config.targets['build'].dependsOn ?? []).not.toContain(
|
|
184
|
+
expect(config.targets['build'].dependsOn ?? []).not.toContain(
|
|
185
|
+
'db:generate',
|
|
186
|
+
);
|
|
174
187
|
// The SQL migrations are shipped as a build asset.
|
|
175
188
|
const assets = config.targets['build'].options.assets ?? [];
|
|
176
189
|
expect(
|
|
177
190
|
assets.some(
|
|
178
191
|
(a: unknown) =>
|
|
179
|
-
typeof a === 'object' &&
|
|
180
|
-
|
|
192
|
+
typeof a === 'object' &&
|
|
193
|
+
(a as { output?: string }).output === 'drizzle',
|
|
194
|
+
),
|
|
181
195
|
).toBe(true);
|
|
182
196
|
|
|
183
197
|
// Tagged so the sandbox generator wires the DB without a --database flag.
|
|
@@ -212,9 +226,9 @@ describe('Express Service Generator', () => {
|
|
|
212
226
|
|
|
213
227
|
const config = readProjectConfiguration(host, 'test');
|
|
214
228
|
expect(config.targets['dev-db']).toBeFalsy();
|
|
215
|
-
expect(
|
|
216
|
-
|
|
217
|
-
);
|
|
229
|
+
expect(
|
|
230
|
+
(config.tags ?? []).some((t) => t.startsWith('adsp:database:')),
|
|
231
|
+
).toBe(false);
|
|
218
232
|
}, 60000);
|
|
219
233
|
|
|
220
234
|
it('writes a provisioned CLIENT_SECRET to .env.local, not .env', async () => {
|
|
@@ -222,7 +236,9 @@ describe('Express Service Generator', () => {
|
|
|
222
236
|
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
223
237
|
await generator(host, { ...options, accessToken: 'test-token' });
|
|
224
238
|
|
|
225
|
-
expect(host.read('apps/test/.env.local').toString()).toContain(
|
|
239
|
+
expect(host.read('apps/test/.env.local').toString()).toContain(
|
|
240
|
+
'CLIENT_SECRET=super-secret',
|
|
241
|
+
);
|
|
226
242
|
expect(host.exists('apps/test/.env')).toBeFalsy();
|
|
227
243
|
}, 60000);
|
|
228
244
|
|
|
@@ -236,7 +252,9 @@ describe('Express Service Generator', () => {
|
|
|
236
252
|
}, 60000);
|
|
237
253
|
|
|
238
254
|
it('does not overwrite or duplicate an existing CLIENT_SECRET in .env.local', async () => {
|
|
239
|
-
keycloakAdminMock.ensureServiceClient.mockResolvedValueOnce(
|
|
255
|
+
keycloakAdminMock.ensureServiceClient.mockResolvedValueOnce(
|
|
256
|
+
'freshly-provisioned-secret',
|
|
257
|
+
);
|
|
240
258
|
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
241
259
|
// express-service is a one-shot scaffolder (re-running it against an
|
|
242
260
|
// existing project throws in @nx/express), so this exercises the guard
|
|
@@ -254,11 +272,16 @@ describe('Express Service Generator', () => {
|
|
|
254
272
|
it('preserves an existing .env.local value (e.g. a prior dev-db run) alongside CLIENT_SECRET', async () => {
|
|
255
273
|
keycloakAdminMock.ensureServiceClient.mockResolvedValueOnce('super-secret');
|
|
256
274
|
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
257
|
-
host.write(
|
|
275
|
+
host.write(
|
|
276
|
+
'apps/test/.env.local',
|
|
277
|
+
'DATABASE_URL=postgresql://test:test@localhost:5432/test_dev\n',
|
|
278
|
+
);
|
|
258
279
|
await generator(host, { ...options, accessToken: 'test-token' });
|
|
259
280
|
|
|
260
281
|
const envLocal = host.read('apps/test/.env.local').toString();
|
|
261
|
-
expect(envLocal).toContain(
|
|
282
|
+
expect(envLocal).toContain(
|
|
283
|
+
'DATABASE_URL=postgresql://test:test@localhost:5432/test_dev',
|
|
284
|
+
);
|
|
262
285
|
expect(envLocal).toContain('CLIENT_SECRET=super-secret');
|
|
263
286
|
}, 60000);
|
|
264
287
|
|
|
@@ -65,9 +65,10 @@ function default_1(host, options) {
|
|
|
65
65
|
'app/src/app/app.component.html': (_o = (_m = host.read(`${appRoot}/src/app/app.component.html`)) === null || _m === void 0 ? void 0 : _m.toString()) !== null && _o !== void 0 ? _o : '',
|
|
66
66
|
'app/src/app/app.config.ts': (_q = (_p = host.read(`${appRoot}/src/app/app.config.ts`)) === null || _p === void 0 ? void 0 : _p.toString()) !== null && _q !== void 0 ? _q : '',
|
|
67
67
|
'app/src/app/app.routes.ts': (_s = (_r = host.read(`${appRoot}/src/app/app.routes.ts`)) === null || _r === void 0 ? void 0 : _r.toString()) !== null && _s !== void 0 ? _s : '',
|
|
68
|
-
'app/src/environments/environment.ts': (_u = (_t = host
|
|
68
|
+
'app/src/environments/environment.ts': (_u = (_t = host
|
|
69
|
+
.read(`${appRoot}/src/environments/environment.ts`)) === null || _t === void 0 ? void 0 : _t.toString()) !== null && _u !== void 0 ? _u : '',
|
|
69
70
|
},
|
|
70
|
-
}, host, serviceRoot, { additionalRoots: {
|
|
71
|
+
}, host, serviceRoot, { additionalRoots: { app: appRoot } }));
|
|
71
72
|
}
|
|
72
73
|
yield (0, devkit_1.formatFiles)(host);
|
|
73
74
|
return () => {
|
|
@@ -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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"}
|
|
@@ -5,7 +5,10 @@ import { environments } from '@abgov/nx-oc';
|
|
|
5
5
|
import { Schema } from './schema';
|
|
6
6
|
import generator from './mean';
|
|
7
7
|
|
|
8
|
-
jest.mock('@nx/devkit', () => ({
|
|
8
|
+
jest.mock('@nx/devkit', () => ({
|
|
9
|
+
...jest.requireActual('@nx/devkit'),
|
|
10
|
+
formatFiles: jest.fn().mockResolvedValue(undefined),
|
|
11
|
+
}));
|
|
9
12
|
jest.mock('@abgov/nx-oc');
|
|
10
13
|
jest.mock('../../utils/agent', () => ({
|
|
11
14
|
consultAgent: jest.fn().mockResolvedValue(null),
|
|
@@ -21,7 +24,7 @@ utilsMock.getAdspConfiguration.mockResolvedValue({
|
|
|
21
24
|
// jest.mock('@abgov/nx-oc') automocks adspProjectTags too — restore the real
|
|
22
25
|
// (pure, no I/O) implementation so tag-writing behavior is actually exercised.
|
|
23
26
|
utilsMock.adspProjectTags.mockImplementation(
|
|
24
|
-
jest.requireActual('@abgov/nx-oc').adspProjectTags
|
|
27
|
+
jest.requireActual('@abgov/nx-oc').adspProjectTags,
|
|
25
28
|
);
|
|
26
29
|
utilsMock.deploymentGenerator.mockResolvedValue(undefined);
|
|
27
30
|
utilsMock.ensureAdspToken.mockResolvedValue('test-token');
|