@abgov/nx-adsp 13.1.1 → 13.1.3

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 CHANGED
@@ -44,9 +44,8 @@ npx nx g @abgov/nx-adsp:express-service my-service --env dev --tenant my-tenant
44
44
  ## Full-stack quickstart (PEVN → sandbox)
45
45
 
46
46
  This is the end-to-end path a coding agent can follow from an empty folder to a
47
- running full-stack app in an OpenShift sandbox. **The Nx 23 line is published on
48
- the `@beta` dist-tag** — append `@beta` to installs until it is promoted to
49
- `latest`.
47
+ running full-stack app in an OpenShift sandbox. The plugins require **Nx 23**,
48
+ which `create-nx-workspace@latest` produces by default.
50
49
 
51
50
  Prerequisites for the sandbox deploy (steps 4–5): `podman` (machine started on
52
51
  macOS), `oc` logged in to the sandbox cluster, and the GitHub CLI (`gh`)
@@ -66,7 +65,7 @@ cd my-solution
66
65
 
67
66
  # 2. Install the plugins + stack peers (match @nx/* to the workspace nx version)
68
67
  NXV=$(node -p "require('./node_modules/nx/package.json').version")
69
- npm i -D @abgov/nx-oc@beta @abgov/nx-adsp@beta "@nx/express@$NXV" "@nx/vue@$NXV" "@nx/node@$NXV" "@nx/js@$NXV" "@nx/eslint@$NXV"
68
+ npm i -D @abgov/nx-oc @abgov/nx-adsp "@nx/express@$NXV" "@nx/vue@$NXV" "@nx/node@$NXV" "@nx/js@$NXV" "@nx/eslint@$NXV"
70
69
 
71
70
  # 3. Scaffold a Postgres + Express + Vue + Node solution (opens a browser for the ADSP tenant login)
72
71
  npx nx g @abgov/nx-adsp:pevn acme --env=dev --tenant=my-tenant --no-interactive
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abgov/nx-adsp",
3
- "version": "13.1.1",
3
+ "version": "13.1.3",
4
4
  "license": "Apache-2.0",
5
5
  "main": "src/index.js",
6
6
  "description": "Government of Alberta - Nx plugin for ADSP apps.",
@@ -69,45 +69,163 @@ To call another service with an access token:
69
69
  const token = await tokenProvider.getAccessToken();
70
70
  ```
71
71
 
72
- ## Adding routes
72
+ ## Project structure & code factoring
73
73
 
74
- Add route handlers in `main.ts` under the `/<%= projectName %>/v1` path prefix.
75
- `passport.authenticate(['tenant', 'anonymous'])` is applied to the entire prefix
76
- `req.user` is null for anonymous requests and populated for authenticated ones.
74
+ `main.ts` is the **composition root** it initializes the SDK, wires middleware,
75
+ mounts routers, starts the server, and mounts the error handler last. Keep feature
76
+ code out of it. Conventional layout:
77
77
 
78
- **Public route:**
79
- ```typescript
80
- app.get('/<%= projectName %>/v1/my-resource', (req, res) => {
81
- res.json({ ... });
82
- });
83
78
  ```
79
+ src/
80
+ main.ts # composition root — no business logic
81
+ routes/<resource>.ts # one express.Router() per resource; thin HTTP handlers
82
+ services/<resource>.ts # business logic — no req/res, unit-testable
83
+ <% if (database === 'postgres') { %> db/schema.ts # Drizzle tables
84
+ database.ts # shared `db` instance
85
+ <% } else if (database === 'mongo') { %> models/<resource>.ts # Mongoose models
86
+ database.ts # connection helpers
87
+ <% } %> events.ts # domain event definitions
88
+ ```
89
+
90
+ Rules of thumb:
91
+
92
+ - **Do not inline route handlers in `main.ts`.** Add an `express.Router()` per
93
+ resource under `routes/` and mount it. The example routes in `main.ts` are
94
+ starters — replace them with mounted routers as you build real features.
95
+ - **Keep handlers thin** — validate input, call a service, shape the response.
96
+ Put non-trivial logic in `services/` so it can be tested without HTTP.
97
+ - **One responsibility per module** — routers do HTTP, services do logic, the db
98
+ layer does persistence.
99
+ - **Pass runtime capabilities in; don't import them.** `logger` and `eventService`
100
+ come from `initializeService()` in `main.ts`, so pass them into a router/service
101
+ as arguments (e.g. `itemsRouter(eventService)`). Only module-level singletons —
102
+ the `db` instance, Mongoose models — are imported directly.
103
+
104
+ ## Adding routes
105
+
106
+ Factor each resource into its own router module and mount it in `main.ts`.
84
107
 
85
- **Protected route** (requires a role, validates input, publishes an event):
86
108
  ```typescript
109
+ // src/routes/items.ts
110
+ import { Router } from 'express';
87
111
  import { authorize, createValidationHandler } from '@abgov/adsp-service-sdk';
88
112
  import { z } from 'zod';
113
+ import * as items from '../services/items';
89
114
 
90
- const MySchema = z.object({ name: z.string().min(1) });
115
+ const CreateItem = z.object({ name: z.string().min(1) });
91
116
 
92
- app.post(
93
- '/<%= projectName %>/v1/my-resource',
94
- authorize('my-role'), // 403 if authenticated user lacks role
95
- createValidationHandler(MySchema), // 400 if body fails schema
96
- async (req, res, next) => {
117
+ export function itemsRouter(): Router {
118
+ const router = Router();
119
+
120
+ // Anonymous is allowed on the /v1 prefix, so req.user may be null here.
121
+ router.get('/', async (_req, res, next) => {
97
122
  try {
98
- const { name } = req.body as z.infer<typeof MySchema>;
99
- eventService.send(createMyEvent(name));
100
- res.json({ name });
123
+ res.json(await items.list());
101
124
  } catch (err) {
102
- next(err); // createErrorHandler maps to 500
125
+ next(err);
126
+ }
127
+ });
128
+
129
+ // Protected: require a role, validate the body, then delegate to the service.
130
+ router.post(
131
+ '/',
132
+ authorize('item-writer'),
133
+ createValidationHandler(CreateItem),
134
+ async (req, res, next) => {
135
+ try {
136
+ const { name } = req.body as z.infer<typeof CreateItem>;
137
+ res.status(201).json(await items.create(name));
138
+ } catch (err) {
139
+ next(err);
140
+ }
103
141
  }
104
- }
105
- );
142
+ );
143
+
144
+ return router;
145
+ }
106
146
  ```
107
147
 
108
- Both `authorize` and `createValidationHandler` pass errors to `next()`
109
- `createErrorHandler(logger)` at the bottom of `main.ts` translates them to
110
- structured HTTP responses (401/403 and 400 respectively).
148
+ Mount it in `main.ts` after the passport/configuration middleware, before
149
+ `createErrorHandler`:
150
+
151
+ ```typescript
152
+ import { itemsRouter } from './routes/items';
153
+ // ...
154
+ app.use('/<%= projectName %>/v1/items', itemsRouter());
155
+ ```
156
+
157
+ `authorize(role)` → 403 if the user lacks the role; `createValidationHandler(schema)`
158
+ → 400 on a bad body. Both forward errors to `next()`, which `createErrorHandler`
159
+ (mounted last in `main.ts`) turns into structured HTTP responses.
160
+
161
+ ## Recipe: add a resource end to end
162
+
163
+ Build a feature the conventional way — persistence, a service, a router, wiring,
164
+ and a test. (Replace the inline example routes in `main.ts` with resources built
165
+ like this.)
166
+
167
+ <% if (database === 'postgres') { %>1. **Table** — add it to `src/db/schema.ts`, then `nx db:generate <%= projectName %>` and `nx db:migrate <%= projectName %>` (see "Adding a table").
168
+ <% } else if (database === 'mongo') { %>1. **Model** — add a Mongoose model (see "Adding a Mongoose model").
169
+ <% } else { %>1. **Data source** — back the resource with your store (this service has no database configured).
170
+ <% } %>
171
+ 2. **Service** — put the logic in `src/services/items.ts`, with no `req`/`res` so
172
+ it is unit-testable in isolation:
173
+
174
+ ```typescript
175
+ // src/services/items.ts
176
+ <% if (database === 'postgres') { %>import { db } from '../database';
177
+ import { items } from '../db/schema';
178
+
179
+ export const list = () => db.select().from(items);
180
+ export const create = async (name: string) => {
181
+ const [row] = await db.insert(items).values({ name }).returning();
182
+ return row;
183
+ };<% } else if (database === 'mongo') { %>import { ItemModel } from '../models/item';
184
+
185
+ export const list = () => ItemModel.find().lean();
186
+ export const create = (name: string) => ItemModel.create({ name });<% } else { %>const store: { id: number; name: string }[] = [];
187
+
188
+ export const list = async () => store;
189
+ export const create = async (name: string) => {
190
+ const row = { id: store.length + 1, name };
191
+ store.push(row);
192
+ return row;
193
+ };<% } %>
194
+ ```
195
+
196
+ 3. **Event** (optional) — define it in `src/events.ts` and register it in
197
+ `initializeService({ events })`. To emit it, have the router factory accept
198
+ `eventService` — `itemsRouter(eventService)` — and call `eventService.send(...)`
199
+ in the handler after a successful write (see "Domain events").
200
+
201
+ 4. **Router** — create `src/routes/items.ts` as in "Adding routes" above: thin
202
+ handlers that validate, call the service, and shape the response.
203
+
204
+ 5. **Mount** — in `main.ts`: `app.use('/<%= projectName %>/v1/items', itemsRouter());`
205
+
206
+ 6. **Test** — mount the router with supertest and mock the service (no DB, no
207
+ server needed):
208
+
209
+ ```typescript
210
+ import request from 'supertest';
211
+ import express from 'express';
212
+ import { itemsRouter } from './items';
213
+
214
+ jest.mock('../services/items', () => ({
215
+ list: async () => [{ id: 1, name: 'first' }],
216
+ create: jest.fn(),
217
+ }));
218
+
219
+ describe('items router', () => {
220
+ it('GET / returns items', async () => {
221
+ const app = express().use(express.json());
222
+ app.use('/items', itemsRouter());
223
+ const res = await request(app).get('/items');
224
+ expect(res.status).toBe(200);
225
+ expect(res.body).toEqual([{ id: 1, name: 'first' }]);
226
+ });
227
+ });
228
+ ```
111
229
 
112
230
  ## Adding an environment variable
113
231
 
@@ -186,17 +304,34 @@ app.get('/<%= projectName %>/v1/items', async (_req, res) => {
186
304
  by `migrate.js` (bundled from `src/migrate.ts`), which uses only `drizzle-orm` +
187
305
  `pg` — no CLI and no native engine — so it runs under OpenShift's arbitrary UID.
188
306
 
189
- ## OpenShift deployment database
307
+ ## Database in OpenShift — migrations run automatically
308
+
309
+ Migrations are applied at deploy time by an **init container** named
310
+ `<%= projectName %>-migrate`, which runs `node migrate.js` (everything in
311
+ `drizzle/`) against the database **before the app container starts** — so a
312
+ deploy always brings the schema up to date, and the app never starts against a
313
+ stale DB. `migrate.js` is bundled from `src/migrate.ts` using only `drizzle-orm`
314
+ + `pg` (no `drizzle-kit` CLI, no native engine), so it runs under OpenShift's
315
+ arbitrary UID; it logs `No migrations to apply.` and exits 0 when `drizzle/` is
316
+ empty. The `drizzle/` folder is shipped into the build output as a build asset.
317
+
318
+ **Sandbox** (`nx run <%= projectName %>:sandbox`) — nothing to set up. The
319
+ sandbox target provisions a shared `sandbox-postgres` instance, creates this
320
+ service's `<%= projectName %>_sandbox` database, and injects `DATABASE_URL`
321
+ (sourced from the `sandbox-postgres-creds` secret) into both the init container
322
+ and the app. If a deploy fails on migrations, read the init container's logs:
323
+
324
+ ```bash
325
+ oc logs -n <namespace> <pod> -c <%= projectName %>-migrate
326
+ ```
190
327
 
191
- The deployment manifest references a Secret named `{appName}-database` for the
192
- `DATABASE_URL` value, and runs `node migrate.js` as an init container before the
193
- application starts. The generated SQL migrations in `drizzle/` are shipped into
194
- the build output as assets so the init container can apply them.
328
+ See `.openshift/<%= projectName %>/SANDBOX.md` for the full sandbox runbook.
195
329
 
196
- Create the Secret in each OpenShift namespace before first deploy:
330
+ **dev / test / prod** — the deployment reads `DATABASE_URL` from a Secret named
331
+ `<%= projectName %>-database`. Create it once per namespace before the first deploy:
197
332
 
198
333
  ```bash
199
- oc create secret generic <app-name>-database \
334
+ oc create secret generic <%= projectName %>-database \
200
335
  --from-literal=DATABASE_URL=postgresql://user:password@host:5432/dbname \
201
336
  -n <namespace>
202
337
  ```
@@ -265,15 +400,18 @@ app.get('/<%= projectName %>/v1/items', async (_req, res) => {
265
400
  });
266
401
  ```
267
402
 
268
- ## OpenShift deployment — database
403
+ ## Database in OpenShift
269
404
 
270
- The deployment manifest references a Secret named `{appName}-database` for the
271
- `MONGODB_URI` value.
405
+ **Sandbox** (`nx run <%= projectName %>:sandbox`) nothing to set up. The
406
+ sandbox target provisions a shared `sandbox-mongodb` instance and injects
407
+ `MONGODB_URI` (sourced from the `sandbox-mongodb-creds` secret) into the app.
408
+ See `.openshift/<%= projectName %>/SANDBOX.md` for the full sandbox runbook.
272
409
 
273
- Create the Secret in each OpenShift namespace before first deploy:
410
+ **dev / test / prod** — the deployment reads `MONGODB_URI` from a Secret named
411
+ `<%= projectName %>-database`. Create it once per namespace before the first deploy:
274
412
 
275
413
  ```bash
276
- oc create secret generic <app-name>-database \
414
+ oc create secret generic <%= projectName %>-database \
277
415
  --from-literal=MONGODB_URI=mongodb://user:password@host:27017/dbname \
278
416
  -n <namespace>
279
417
  ```
@@ -1,4 +1,5 @@
1
1
  import { Tree } from '@nx/devkit';
2
+ export declare function isNonInteractive(): boolean;
2
3
  export interface AgentCapability {
3
4
  generator: string;
4
5
  params: Record<string, unknown>;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNonInteractive = isNonInteractive;
3
4
  exports.confirmAfterAgentInterrupt = confirmAfterAgentInterrupt;
4
5
  exports.consultAgent = consultAgent;
5
6
  const tslib_1 = require("tslib");
@@ -8,6 +9,30 @@ const socket_io_client_1 = require("socket.io-client");
8
9
  const nx_oc_1 = require("@abgov/nx-oc");
9
10
  const AGENT_SERVICE_URN = 'urn:ads:platform:agent-service:v1';
10
11
  const AGENT_ID = 'nxAdspAgent';
12
+ // The agent consultation is an interactive, stdin-driven conversation, so it must
13
+ // not run unattended (a coding agent, CI, or a piped shell) — it would hang or
14
+ // corrupt stdin.
15
+ //
16
+ // NOTE: this relies on Nx *internal* behavior (not a public API), so re-verify it
17
+ // on Nx upgrades — the two `argv` clauses below are the fragile part:
18
+ // 1. Nx deletes `--interactive` from the generator's options before invoking it
19
+ // (`delete generatorOptions.interactive` in nx's command-line/generate/generate.js),
20
+ // so we can't read it from `options`.
21
+ // 2. Nx runs generators in-process, so the CLI args are still on `process.argv`.
22
+ // If Nx ever runs generators out-of-process, or stops stripping the option, the
23
+ // argv detection may go stale. The TTY/CI fallback is the resilient part — it
24
+ // mirrors Nx's own prompt gate (`isTTY()` in command-line utils/params.js:
25
+ // `process.stdout.isTTY && CI !== 'true'`) and still catches unattended runs even
26
+ // if the flag detection breaks. Worst case if all detection fails: the generator
27
+ // prompts and the caller can still pass `--skipAgent`.
28
+ function isNonInteractive() {
29
+ const argv = process.argv;
30
+ const interactiveIdx = argv.indexOf('--interactive');
31
+ const flagged = argv.includes('--no-interactive') ||
32
+ argv.includes('--interactive=false') ||
33
+ (interactiveIdx !== -1 && argv[interactiveIdx + 1] === 'false');
34
+ return flagged || !process.stdout.isTTY || process.env.CI === 'true';
35
+ }
11
36
  /**
12
37
  * After a consultAgent call, check whether the user interrupted before any
13
38
  * files were generated and confirm they still want to proceed with the base
@@ -46,6 +71,10 @@ function confirmAfterAgentInterrupt(result) {
46
71
  function consultAgent(directoryServiceUrl, accessToken, projectContext, host, projectRoot, options) {
47
72
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
48
73
  var _a, _b, _c;
74
+ if (isNonInteractive()) {
75
+ process.stdout.write('\n[nx-adsp] Non-interactive run (--no-interactive / no TTY / CI) — skipping the agent consultation; base scaffolding only.\n');
76
+ return null;
77
+ }
49
78
  if (!accessToken) {
50
79
  process.stdout.write('\n[nx-adsp] No access token — skipping agent interaction.\n');
51
80
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../packages/nx-adsp/src/utils/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../packages/nx-adsp/src/utils/agent.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { consultAgent } from './agent';
1
+ import { consultAgent, isNonInteractive } from './agent';
2
2
 
3
3
  jest.mock('readline', () => ({
4
4
  createInterface: jest.fn(() => ({
@@ -61,9 +61,23 @@ function makeMockSocket() {
61
61
  const flushPromises = () => new Promise(resolve => setTimeout(resolve, 0));
62
62
 
63
63
  describe('consultAgent', () => {
64
+ const ORIGINAL_ARGV = process.argv;
65
+ const ORIGINAL_TTY = process.stdout.isTTY;
66
+ const ORIGINAL_CI = process.env.CI;
64
67
  beforeEach(() => {
65
68
  jest.clearAllMocks();
66
69
  jest.spyOn(process.stdout, 'write').mockImplementation(() => true);
70
+ // consultAgent short-circuits when non-interactive; force an interactive
71
+ // TTY (no flag, no CI) so these tests exercise the interactive flow.
72
+ process.argv = ['node', 'nx'];
73
+ Object.defineProperty(process.stdout, 'isTTY', { value: true, configurable: true });
74
+ delete process.env.CI;
75
+ });
76
+ afterAll(() => {
77
+ process.argv = ORIGINAL_ARGV;
78
+ Object.defineProperty(process.stdout, 'isTTY', { value: ORIGINAL_TTY, configurable: true });
79
+ if (ORIGINAL_CI === undefined) delete process.env.CI;
80
+ else process.env.CI = ORIGINAL_CI;
67
81
  });
68
82
 
69
83
  it('returns null when agent-service is not in directory', async () => {
@@ -148,3 +162,51 @@ describe('consultAgent', () => {
148
162
  );
149
163
  });
150
164
  });
165
+
166
+ describe('isNonInteractive', () => {
167
+ const ORIGINAL_ARGV = process.argv;
168
+ const ORIGINAL_TTY = process.stdout.isTTY;
169
+ const ORIGINAL_CI = process.env.CI;
170
+ const setTTY = (v: boolean | undefined) =>
171
+ Object.defineProperty(process.stdout, 'isTTY', { value: v, configurable: true });
172
+
173
+ afterEach(() => {
174
+ process.argv = ORIGINAL_ARGV;
175
+ setTTY(ORIGINAL_TTY);
176
+ if (ORIGINAL_CI === undefined) delete process.env.CI;
177
+ else process.env.CI = ORIGINAL_CI;
178
+ });
179
+
180
+ it('is true when --no-interactive is passed, even in an interactive TTY', () => {
181
+ setTTY(true);
182
+ delete process.env.CI;
183
+ process.argv = ['node', 'nx', 'g', 'x', '--no-interactive'];
184
+ expect(isNonInteractive()).toBe(true);
185
+ });
186
+
187
+ it('honors --interactive=false and --interactive false', () => {
188
+ setTTY(true);
189
+ delete process.env.CI;
190
+ process.argv = ['node', 'nx', 'g', 'x', '--interactive=false'];
191
+ expect(isNonInteractive()).toBe(true);
192
+ process.argv = ['node', 'nx', 'g', 'x', '--interactive', 'false'];
193
+ expect(isNonInteractive()).toBe(true);
194
+ });
195
+
196
+ it('is true without a TTY or on CI', () => {
197
+ setTTY(false);
198
+ delete process.env.CI;
199
+ process.argv = ['node', 'nx'];
200
+ expect(isNonInteractive()).toBe(true);
201
+ setTTY(true);
202
+ process.env.CI = 'true';
203
+ expect(isNonInteractive()).toBe(true);
204
+ });
205
+
206
+ it('is false in an interactive TTY with no flag and no CI', () => {
207
+ setTTY(true);
208
+ delete process.env.CI;
209
+ process.argv = ['node', 'nx', 'g', 'x'];
210
+ expect(isNonInteractive()).toBe(false);
211
+ });
212
+ });
@@ -40,13 +40,20 @@ function ensureClientRole(accessServiceUrl, realm, clientUuid, roleName, descrip
40
40
  });
41
41
  }
42
42
  catch (err) {
43
+ // Best-effort, like the other ensure* helpers: a role we can't read/create
44
+ // must not abort provisioning or cause the client secret to be dropped.
43
45
  if (((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
44
- yield axios.post(baseUrl, { name: roleName, description }, {
45
- headers: { Authorization: `Bearer ${accessToken}` },
46
- });
46
+ try {
47
+ yield axios.post(baseUrl, { name: roleName, description }, {
48
+ headers: { Authorization: `Bearer ${accessToken}` },
49
+ });
50
+ }
51
+ catch (createErr) {
52
+ logAdminError(clientUuid, createErr);
53
+ }
47
54
  }
48
55
  else {
49
- throw err;
56
+ logAdminError(clientUuid, err);
50
57
  }
51
58
  }
52
59
  });
@@ -80,11 +87,18 @@ function assignRoleToServiceAccount(accessServiceUrl, realm, userId, platformCli
80
87
  function ensureServiceAccountRoles(accessServiceUrl, realm, serviceClientUuid, roles, accessToken) {
81
88
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
82
89
  const { default: axios } = yield Promise.resolve().then(() => require('axios'));
83
- const userUrl = new URL(`/auth/admin/realms/${realm}/clients/${serviceClientUuid}/service-account-user`, accessServiceUrl).href;
84
- const { data: user } = yield axios.get(userUrl, {
85
- headers: { Authorization: `Bearer ${accessToken}` },
86
- });
87
- yield Promise.all(roles.map(({ platformClientId, roleName }) => assignRoleToServiceAccount(accessServiceUrl, realm, user.id, platformClientId, roleName, accessToken)));
90
+ // Best-effort, like the other ensure* helpers: don't abort provisioning or
91
+ // drop the client secret if a platform service-account role can't be assigned.
92
+ try {
93
+ const userUrl = new URL(`/auth/admin/realms/${realm}/clients/${serviceClientUuid}/service-account-user`, accessServiceUrl).href;
94
+ const { data: user } = yield axios.get(userUrl, {
95
+ headers: { Authorization: `Bearer ${accessToken}` },
96
+ });
97
+ yield Promise.all(roles.map(({ platformClientId, roleName }) => assignRoleToServiceAccount(accessServiceUrl, realm, user.id, platformClientId, roleName, accessToken)));
98
+ }
99
+ catch (err) {
100
+ logAdminError(serviceClientUuid, err);
101
+ }
88
102
  });
89
103
  }
90
104
  function getClientSecret(accessServiceUrl, realm, clientUuid, accessToken) {
@@ -1 +1 @@
1
- {"version":3,"file":"keycloak-admin.js","sourceRoot":"","sources":["../../../../../packages/nx-adsp/src/utils/keycloak-admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keycloak-admin.js","sourceRoot":"","sources":["../../../../../packages/nx-adsp/src/utils/keycloak-admin.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,11 @@ function addJestCoverageConfig(host, projectRoot) {
57
57
  if (!host.exists(jestPath))
58
58
  return;
59
59
  const existing = host.read(jestPath).toString();
60
- const modified = existing.replace(/([ \t]*coverageDirectory:[^\n]+\n)/, `$1 collectCoverage: true,\n coverageThreshold: {\n global: {\n lines: 60,\n },\n },\n`);
60
+ // Capture the coverageDirectory line WITHOUT its trailing comma, then re-emit
61
+ // it with one before the inserted properties. @nx/jest may leave
62
+ // coverageDirectory as the last property (no trailing comma), so appending
63
+ // properties after it verbatim would produce an invalid object literal.
64
+ const modified = existing.replace(/([ \t]*coverageDirectory:[^\n]*?),?\n/, `$1,\n collectCoverage: true,\n coverageThreshold: {\n global: {\n lines: 60,\n },\n },\n`);
61
65
  if (modified !== existing) {
62
66
  host.write(jestPath, modified);
63
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../../packages/nx-adsp/src/utils/quality.ts"],"names":[],"mappings":";;AAUA,sDAoCC;AAOD,sDAYC;AAOD,4CAeC;AAED,8CAeC;AAxGD,uCAA+G;AAE/G;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,IAAU,EAAE,WAAmB,EAAE,aAAuB;;IAC5F,MAAM,UAAU,GAAG,GAAG,WAAW,oBAAoB,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,CAAC,CAAC,mCAAI,yBAAyB,CAAC;IACzE,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,CAAC,KAAK,CACR,UAAU,EACV,2BAA2B,cAAc;;;;;;;;;;;;;;;cAe/B,YAAY;;;;;;;;CAQzB,CACE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAU,EAAE,WAAmB;IACnE,MAAM,QAAQ,GAAG,GAAG,WAAW,kBAAkB,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO;IAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAC/B,oCAAoC,EACpC,qGAAqG,CACtG,CAAC;IACF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU,EAAE,WAAmB;IAC9D,MAAM,MAAM,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,CAAC,OAAO,mCACT,MAAM,CAAC,OAAO,KACjB,OAAO,EAAE;YACP,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE;gBACP,OAAO,EAAE,iDAAiD;gBAC1D,GAAG,EAAE,eAAe;aACrB;SACF,GACF,CAAC;IACF,IAAA,mCAA0B,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAU;IAC1C,MAAM,YAAY,GAAG,uBAAuB,CAAC;IAC7C,MAAM,QAAQ,GAAG;QACf,qBAAqB,EAAE,IAAI;QAC3B,yBAAyB,EAAE,wBAAwB;QACnD,0BAA0B,EAAE;YAC1B,sBAAsB,EAAE,UAAU;SACnC;KACF,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,IAAA,mBAAU,EAAC,IAAI,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iCAAM,QAAQ,GAAK,QAAQ,EAAG,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,IAAA,kBAAS,EAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../../../../packages/nx-adsp/src/utils/quality.ts"],"names":[],"mappings":";;AAUA,sDAoCC;AAOD,sDAgBC;AAOD,4CAeC;AAED,8CAeC;AA5GD,uCAA+G;AAE/G;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,IAAU,EAAE,WAAmB,EAAE,aAAuB;;IAC5F,MAAM,UAAU,GAAG,GAAG,WAAW,oBAAoB,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACtF,MAAM,cAAc,GAAG,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,CAAC,CAAC,mCAAI,yBAAyB,CAAC;IACzE,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,CAAC,KAAK,CACR,UAAU,EACV,2BAA2B,cAAc;;;;;;;;;;;;;;;cAe/B,YAAY;;;;;;;;CAQzB,CACE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAU,EAAE,WAAmB;IACnE,MAAM,QAAQ,GAAG,GAAG,WAAW,kBAAkB,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO;IAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChD,8EAA8E;IAC9E,iEAAiE;IACjE,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAC/B,uCAAuC,EACvC,wGAAwG,CACzG,CAAC;IACF,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU,EAAE,WAAmB;IAC9D,MAAM,MAAM,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,CAAC,OAAO,mCACT,MAAM,CAAC,OAAO,KACjB,OAAO,EAAE;YACP,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE;gBACP,OAAO,EAAE,iDAAiD;gBAC1D,GAAG,EAAE,eAAe;aACrB;SACF,GACF,CAAC;IACF,IAAA,mCAA0B,EAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAU;IAC1C,MAAM,YAAY,GAAG,uBAAuB,CAAC;IAC7C,MAAM,QAAQ,GAAG;QACf,qBAAqB,EAAE,IAAI;QAC3B,yBAAyB,EAAE,wBAAwB;QACnD,0BAA0B,EAAE;YAC1B,sBAAsB,EAAE,UAAU;SACnC;KACF,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,IAAA,mBAAU,EAAC,IAAI,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,iCAAM,QAAQ,GAAK,QAAQ,EAAG,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,IAAA,kBAAS,EAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
3
+ import { addJestCoverageConfig } from './quality';
4
+
5
+ function makeConfig(coverageDirectoryLine: string): string {
6
+ return [
7
+ 'module.exports = {',
8
+ " displayName: 'svc',",
9
+ " preset: '../../jest.preset.js',",
10
+ ` ${coverageDirectoryLine}`,
11
+ '};',
12
+ '',
13
+ ].join('\n');
14
+ }
15
+
16
+ // Parse the exported object literal; throws SyntaxError if the config is invalid
17
+ // (e.g. a property with no separating comma).
18
+ function evalConfigObject(src: string): Record<string, unknown> {
19
+ const body = src.slice(src.indexOf('{'), src.lastIndexOf('}') + 1);
20
+ return new Function(`return (${body})`)() as Record<string, unknown>;
21
+ }
22
+
23
+ describe('addJestCoverageConfig', () => {
24
+ let tree: Tree;
25
+ beforeEach(() => {
26
+ tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
27
+ });
28
+
29
+ it('inserts a comma when coverageDirectory is the last property (no trailing comma)', () => {
30
+ // The @nx/jest (Nx 23) template leaves coverageDirectory without a trailing comma.
31
+ tree.write(
32
+ 'apps/svc/jest.config.cts',
33
+ makeConfig("coverageDirectory: 'test-output/jest/coverage'")
34
+ );
35
+
36
+ addJestCoverageConfig(tree, 'apps/svc');
37
+ const out = tree.read('apps/svc/jest.config.cts').toString();
38
+
39
+ expect(out).toContain("coverageDirectory: 'test-output/jest/coverage',");
40
+ expect(out).toContain('collectCoverage: true,');
41
+ expect(out).toContain('lines: 60,');
42
+ expect(out).not.toContain(',,');
43
+ // The result must be a valid object literal.
44
+ const cfg = evalConfigObject(out);
45
+ expect(cfg.collectCoverage).toBe(true);
46
+ expect((cfg.coverageThreshold as { global: { lines: number } }).global.lines).toBe(60);
47
+ });
48
+
49
+ it('does not double the comma when coverageDirectory already has one', () => {
50
+ tree.write(
51
+ 'apps/svc/jest.config.cts',
52
+ makeConfig("coverageDirectory: '../../coverage/svc',")
53
+ );
54
+
55
+ addJestCoverageConfig(tree, 'apps/svc');
56
+ const out = tree.read('apps/svc/jest.config.cts').toString();
57
+
58
+ expect(out).toContain("coverageDirectory: '../../coverage/svc',");
59
+ expect(out).not.toContain(',,');
60
+ expect(() => evalConfigObject(out)).not.toThrow();
61
+ });
62
+
63
+ it('is a no-op when there is no jest config', () => {
64
+ expect(() => addJestCoverageConfig(tree, 'apps/none')).not.toThrow();
65
+ expect(tree.exists('apps/none/jest.config.cts')).toBe(false);
66
+ });
67
+ });