@abgov/nx-adsp 13.18.3 → 13.19.0
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/express-service/express-service.js +4 -5
- package/src/generators/express-service/express-service.js.map +1 -1
- package/src/generators/express-service/express-service.spec.ts +4 -3
- package/src/generators/express-service/files/AGENTS.md__tmpl__ +5 -3
- package/src/generators/init/init.js +18 -0
- package/src/generators/init/init.js.map +1 -1
- package/src/generators/init/init.spec.ts +27 -0
- package/src/generators/vue-app/vue-app.spec.ts +17 -8
- package/src/generators/vue-components/files/src/lib/patterns/AppHeader.vue__tmpl__ +3 -2
- package/src/generators/vue-components/files/src/lib/patterns/WorkspaceTable.vue__tmpl__ +1 -0
package/package.json
CHANGED
|
@@ -127,11 +127,10 @@ function default_1(host, options) {
|
|
|
127
127
|
const accessToken = (_e = normalizedOptions.accessToken) !== null && _e !== void 0 ? _e : normalizedOptions.adsp.accessToken;
|
|
128
128
|
const clientSecret = yield (0, keycloak_admin_1.ensureServiceClient)(normalizedOptions.adsp.accessServiceUrl, normalizedOptions.adsp.tenantRealm, clientId, accessToken);
|
|
129
129
|
if (clientSecret) {
|
|
130
|
-
// .env.local, not .env: CLIENT_SECRET is a generated, local-only value —
|
|
131
|
-
// same tier `nx dev-db` already uses for DATABASE_URL/MONGODB_URI
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
// needed here at all. .env itself is left alone: it holds non-secret,
|
|
130
|
+
// .env.local, not .env: CLIENT_SECRET is a generated, local-only value —
|
|
131
|
+
// the same tier `nx dev-db` already uses for DATABASE_URL/MONGODB_URI.
|
|
132
|
+
// .env.local is gitignored by nx-adsp:init (called above), which this
|
|
133
|
+
// generator always runs. .env itself is left alone: it holds non-secret,
|
|
135
134
|
// developer-owned config too (KEYCLOAK_ROOT_URL, DIRECTORY_URL, etc.) and
|
|
136
135
|
// shouldn't be blanket-gitignored.
|
|
137
136
|
const envLocalPath = `${normalizedOptions.projectRoot}/.env.local`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express-service.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/express-service/express-service.ts"],"names":[],"mappings":";;AAwEA,
|
|
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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"}
|
|
@@ -286,13 +286,14 @@ describe('Express Service Generator', () => {
|
|
|
286
286
|
expect(host.exists('apps/test/.env')).toBeFalsy();
|
|
287
287
|
}, 60000);
|
|
288
288
|
|
|
289
|
-
it('
|
|
289
|
+
it('ensures .env.local is gitignored when writing the provisioned secret', async () => {
|
|
290
290
|
keycloakAdminMock.ensureServiceClient.mockResolvedValueOnce('super-secret');
|
|
291
291
|
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
292
|
-
const gitignoreBefore = host.read('.gitignore')?.toString() ?? '';
|
|
293
292
|
await generator(host, { ...options, accessToken: 'test-token' });
|
|
294
293
|
|
|
295
|
-
|
|
294
|
+
const gitignore = host.read('.gitignore')?.toString() ?? '';
|
|
295
|
+
expect(gitignore).toContain('.env.local');
|
|
296
|
+
expect(gitignore).toContain('.env.*.local');
|
|
296
297
|
}, 60000);
|
|
297
298
|
|
|
298
299
|
it('does not overwrite or duplicate an existing CLIENT_SECRET in .env.local', async () => {
|
|
@@ -419,10 +419,12 @@ arbitrary UID; it logs `No migrations to apply.` and exits 0 when `drizzle/` is
|
|
|
419
419
|
empty. The `drizzle/` folder is shipped into the build output as a build asset.
|
|
420
420
|
|
|
421
421
|
**Sandbox** (`nx run <%= projectName %>:sandbox`) — nothing to set up. The
|
|
422
|
-
sandbox target provisions a shared `sandbox-postgres` instance
|
|
422
|
+
sandbox target provisions a shared `sandbox-postgres` Postgres instance (via the
|
|
423
|
+
CloudNativePG operator when available, plain Deployment otherwise), creates this
|
|
423
424
|
service's `<%= projectName %>_sandbox` database, and injects `DATABASE_URL`
|
|
424
|
-
(sourced from the `sandbox-postgres-
|
|
425
|
-
and the app. If a deploy fails on migrations, read
|
|
425
|
+
(sourced from the `sandbox-postgres-app` secret — keys `username` and `password`)
|
|
426
|
+
into both the init container and the app. If a deploy fails on migrations, read
|
|
427
|
+
the init container's logs:
|
|
426
428
|
|
|
427
429
|
```bash
|
|
428
430
|
oc logs -n <namespace> <pod> -c <%= projectName %>-migrate
|
|
@@ -4,6 +4,23 @@ exports.default = default_1;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const devkit_1 = require("@nx/devkit");
|
|
6
6
|
const quality_1 = require("../../utils/quality");
|
|
7
|
+
// express-service writes CLIENT_SECRET, DATABASE_URL, and MONGODB_URI to
|
|
8
|
+
// .env.local — these must be gitignored before any generator run can commit.
|
|
9
|
+
// Idempotent: no-op if the patterns are already present.
|
|
10
|
+
const ENV_LOCAL_GITIGNORE_PATTERNS = ['.env.local', '.env.*.local'];
|
|
11
|
+
function ensureEnvLocalGitignored(host) {
|
|
12
|
+
const path = '.gitignore';
|
|
13
|
+
if (!host.exists(path)) {
|
|
14
|
+
host.write(path, `${ENV_LOCAL_GITIGNORE_PATTERNS.join('\n')}\n`);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const existing = host.read(path).toString();
|
|
18
|
+
const existingLines = new Set(existing.split('\n').map((l) => l.trim()));
|
|
19
|
+
const missing = ENV_LOCAL_GITIGNORE_PATTERNS.filter((p) => !existingLines.has(p));
|
|
20
|
+
if (missing.length === 0)
|
|
21
|
+
return;
|
|
22
|
+
host.write(path, `${existing.replace(/\n+$/, '')}\n\n${missing.join('\n')}\n`);
|
|
23
|
+
}
|
|
7
24
|
// Every app/service generator (express-service, react-app, angular-app,
|
|
8
25
|
// vue-app) calls this as one of its own steps — it's also the standalone
|
|
9
26
|
// entry point for the same workspace-root setup. That setup previously only
|
|
@@ -15,6 +32,7 @@ const quality_1 = require("../../utils/quality");
|
|
|
15
32
|
// workspace-root concern.
|
|
16
33
|
function default_1(host) {
|
|
17
34
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
ensureEnvLocalGitignored(host);
|
|
18
36
|
(0, quality_1.addAdspMcpServer)(host);
|
|
19
37
|
(0, quality_1.addVsCodeSettings)(host);
|
|
20
38
|
yield (0, devkit_1.formatFiles)(host);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/init/init.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../packages/nx-adsp/src/generators/init/init.ts"],"names":[],"mappings":";;AAmCA,4BAKC;;AAxCD,uCAA+C;AAC/C,iDAA0E;AAE1E,yEAAyE;AACzE,6EAA6E;AAC7E,yDAAyD;AACzD,MAAM,4BAA4B,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAEpE,SAAS,wBAAwB,CAAC,IAAU;IAC1C,MAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,4BAA4B,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7B,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,IAAI,CAAC,KAAK,CACR,IAAI,EACJ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC7D,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,yEAAyE;AACzE,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,oEAAoE;AACpE,6EAA6E;AAC7E,2EAA2E;AAC3E,0BAA0B;AAC1B,mBAA+B,IAAU;;QACvC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAA,0BAAgB,EAAC,IAAI,CAAC,CAAC;QACvB,IAAA,2BAAiB,EAAC,IAAI,CAAC,CAAC;QACxB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CAAA"}
|
|
@@ -47,6 +47,33 @@ describe('nx-adsp init generator', () => {
|
|
|
47
47
|
logSpy.mockRestore();
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
it('adds .env.local and .env.*.local to .gitignore', async () => {
|
|
51
|
+
await generator(host);
|
|
52
|
+
|
|
53
|
+
const gitignore = host.read('.gitignore').toString();
|
|
54
|
+
expect(gitignore).toContain('.env.local');
|
|
55
|
+
expect(gitignore).toContain('.env.*.local');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('does not duplicate .env.local if it is already in .gitignore', async () => {
|
|
59
|
+
host.write('.gitignore', '.env.local\n.env.*.local\n');
|
|
60
|
+
|
|
61
|
+
await generator(host);
|
|
62
|
+
|
|
63
|
+
const gitignore = host.read('.gitignore').toString();
|
|
64
|
+
expect(gitignore.split('.env.local').length - 1).toBe(1);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('appends .env.local to an existing .gitignore that does not have it', async () => {
|
|
68
|
+
host.write('.gitignore', 'node_modules\ndist\n');
|
|
69
|
+
|
|
70
|
+
await generator(host);
|
|
71
|
+
|
|
72
|
+
const gitignore = host.read('.gitignore').toString();
|
|
73
|
+
expect(gitignore).toContain('node_modules');
|
|
74
|
+
expect(gitignore).toContain('.env.local');
|
|
75
|
+
});
|
|
76
|
+
|
|
50
77
|
it('writes shared VS Code settings, standalone', async () => {
|
|
51
78
|
await generator(host);
|
|
52
79
|
|
|
@@ -405,24 +405,33 @@ describe('Vue App Generator', () => {
|
|
|
405
405
|
expect(app).toContain('goa-button-group');
|
|
406
406
|
}, 30000);
|
|
407
407
|
|
|
408
|
-
it('renders the sign-in button in the app header (needs the "utilities" slot)', async () => {
|
|
409
|
-
// goa-app-header
|
|
410
|
-
//
|
|
411
|
-
// "
|
|
412
|
-
//
|
|
413
|
-
//
|
|
414
|
-
// just feeds its named Vue slot. Regression guard for exactly that gap,
|
|
415
|
-
// now spanning both files since AppHeader was extracted out of App.vue.
|
|
408
|
+
it('renders the sign-in button in the app header (needs version="2" and the "utilities" slot)', async () => {
|
|
409
|
+
// goa-app-header defaults to version="1", which does not render the
|
|
410
|
+
// utilities area at all — the sign-in button is silently invisible.
|
|
411
|
+
// version="2" is required. AppHeader (the shared pattern component)
|
|
412
|
+
// owns both the version attribute and the native slot="utilities" div;
|
|
413
|
+
// App.vue just feeds its named Vue slot.
|
|
416
414
|
await generator(host, options);
|
|
417
415
|
const appHeader = host
|
|
418
416
|
.read('libs/vue-components/src/lib/patterns/AppHeader.vue')
|
|
419
417
|
.toString();
|
|
418
|
+
expect(appHeader).toContain('version="2"');
|
|
420
419
|
expect(appHeader).toMatch(/<div[^>]*slot="utilities"[^>]*>[\s\S]*<slot name="utilities"/);
|
|
421
420
|
|
|
422
421
|
const app = host.read('apps/test/src/App.vue').toString();
|
|
423
422
|
expect(app).toMatch(/<template #utilities>[\s\S]*<goa-button-group/);
|
|
424
423
|
}, 30000);
|
|
425
424
|
|
|
425
|
+
it('WorkspaceTable uses goa-pagination version="2" (compact size; v1 default renders oversized buttons)', async () => {
|
|
426
|
+
// goa-pagination defaults to version="1" (normal/default size). version="2"
|
|
427
|
+
// uses compact size, matching the React wrapper which always passes version="2".
|
|
428
|
+
await generator(host, options);
|
|
429
|
+
const table = host
|
|
430
|
+
.read('libs/vue-components/src/lib/patterns/WorkspaceTable.vue')
|
|
431
|
+
.toString();
|
|
432
|
+
expect(table).toContain('version="2"');
|
|
433
|
+
}, 30000);
|
|
434
|
+
|
|
426
435
|
it('removes the @nx/vue demo scaffold and ships a passing App test', async () => {
|
|
427
436
|
await generator(host, options);
|
|
428
437
|
// The stale nx demo + its failing test must be gone (they fail against our shell).
|
|
@@ -7,11 +7,12 @@ const slots = useSlots();
|
|
|
7
7
|
|
|
8
8
|
<template>
|
|
9
9
|
<goa-microsite-header type="alpha" />
|
|
10
|
-
<goa-app-header url="/" :heading="heading">
|
|
10
|
+
<goa-app-header url="/" :heading="heading" version="2">
|
|
11
11
|
<!-- goa-app-header only renders content placed in a named slot — the
|
|
12
12
|
"utilities" slot is where GoA's own design system docs put
|
|
13
13
|
account/sign-in actions (as opposed to "navigation" for nav links).
|
|
14
|
-
A bare child with no slot attribute renders nothing.
|
|
14
|
+
A bare child with no slot attribute renders nothing. version="2"
|
|
15
|
+
is required: v1 (the default) does not render the utilities area. -->
|
|
15
16
|
<div v-if="slots.utilities" slot="utilities">
|
|
16
17
|
<slot name="utilities" />
|
|
17
18
|
</div>
|