@jskit-ai/console-web 0.1.115 → 0.1.118

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 CHANGED
@@ -1,13 +1,224 @@
1
1
  {
2
2
  "name": "@jskit-ai/console-web",
3
- "version": "0.1.115",
3
+ "version": "0.1.118",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
7
7
  },
8
8
  "dependencies": {
9
- "@jskit-ai/auth-web": "0.1.147",
10
- "@jskit-ai/console-core": "0.1.110",
11
- "@jskit-ai/shell-web": "0.1.147"
9
+ "@jskit-ai/auth-web": "0.1.150",
10
+ "@jskit-ai/console-core": "0.1.113",
11
+ "@jskit-ai/shell-web": "0.1.154"
12
+ },
13
+ "description": "Authenticated console surface scaffold and surface policy wiring.",
14
+ "jskit": {
15
+ "kind": "runtime",
16
+ "capabilities": {
17
+ "provides": [
18
+ "console.web"
19
+ ],
20
+ "requires": [
21
+ "console.core"
22
+ ]
23
+ },
24
+ "runtime": {
25
+ "server": {
26
+ "providers": []
27
+ },
28
+ "client": {
29
+ "providers": []
30
+ }
31
+ },
32
+ "metadata": {
33
+ "apiSummary": {
34
+ "surfaces": [
35
+ {
36
+ "subpath": "./client",
37
+ "summary": "Exports no runtime API today (reserved console surface package entrypoint)."
38
+ }
39
+ ],
40
+ "containerTokens": {
41
+ "server": [],
42
+ "client": []
43
+ }
44
+ },
45
+ "ui": {
46
+ "placements": {
47
+ "outlets": [
48
+ {
49
+ "target": "console-settings:primary-menu",
50
+ "surfaces": [
51
+ "console"
52
+ ],
53
+ "source": "templates/src/pages/console/settings.vue"
54
+ }
55
+ ],
56
+ "topology": {
57
+ "placements": [
58
+ {
59
+ "id": "page.section-nav",
60
+ "owner": "console-settings",
61
+ "description": "Navigation between console settings child pages.",
62
+ "surfaces": [
63
+ "console"
64
+ ],
65
+ "variants": {
66
+ "compact": {
67
+ "outlet": "console-settings:primary-menu",
68
+ "renderers": {
69
+ "link": "local.main.ui.surface-aware-menu-link-item"
70
+ }
71
+ },
72
+ "medium": {
73
+ "outlet": "console-settings:primary-menu",
74
+ "renderers": {
75
+ "link": "local.main.ui.surface-aware-menu-link-item"
76
+ }
77
+ },
78
+ "expanded": {
79
+ "outlet": "console-settings:primary-menu",
80
+ "renderers": {
81
+ "link": "local.main.ui.surface-aware-menu-link-item"
82
+ }
83
+ }
84
+ }
85
+ }
86
+ ]
87
+ },
88
+ "contributions": [
89
+ {
90
+ "id": "console.web.profile.menu.console",
91
+ "target": "auth.profile-menu",
92
+ "kind": "link",
93
+ "surfaces": [
94
+ "*"
95
+ ],
96
+ "order": 600,
97
+ "when": "auth.authenticated === true && surfaceAccess.consoleowner === true && surface !== \"console\"",
98
+ "source": "mutations.text#console-web-profile-menu-console-placement"
99
+ },
100
+ {
101
+ "id": "console.web.menu.settings",
102
+ "target": "shell.primary-nav",
103
+ "kind": "link",
104
+ "surfaces": [
105
+ "console"
106
+ ],
107
+ "order": 100,
108
+ "when": "auth.authenticated === true",
109
+ "source": "mutations.text#console-web-console-settings-placement"
110
+ }
111
+ ]
112
+ }
113
+ }
114
+ },
115
+ "mutations": {
116
+ "dependencies": {
117
+ "runtime": {
118
+ "@jskit-ai/auth-web": "0.1.150",
119
+ "@jskit-ai/console-core": "0.1.113",
120
+ "@jskit-ai/shell-web": "0.1.154"
121
+ },
122
+ "dev": {}
123
+ },
124
+ "packageJson": {
125
+ "scripts": {
126
+ "server:console": "SERVER_SURFACE=console node ./bin/server.js",
127
+ "dev:console": "VITE_SURFACE=console vite",
128
+ "build:console": "VITE_SURFACE=console vite build"
129
+ }
130
+ },
131
+ "procfile": {},
132
+ "files": [
133
+ {
134
+ "from": "templates/src/pages/console.vue",
135
+ "toSurface": "console",
136
+ "toSurfaceRoot": true,
137
+ "ownership": "app",
138
+ "reason": "Install shell-driven console wrapper page.",
139
+ "category": "console-web",
140
+ "id": "console-web-page-console-wrapper"
141
+ },
142
+ {
143
+ "from": "templates/src/pages/console/index.vue",
144
+ "toSurface": "console",
145
+ "toSurfacePath": "index.vue",
146
+ "ownership": "app",
147
+ "reason": "Install shell-driven console page starter.",
148
+ "category": "console-web",
149
+ "id": "console-web-page-console"
150
+ },
151
+ {
152
+ "from": "templates/src/pages/console/settings.vue",
153
+ "toSurface": "console",
154
+ "toSurfacePath": "settings.vue",
155
+ "ownership": "app",
156
+ "reason": "Install console settings shell route scaffold for console-web.",
157
+ "category": "console-web",
158
+ "id": "console-web-page-console-settings-shell"
159
+ },
160
+ {
161
+ "from": "templates/src/pages/console/settings/index.vue",
162
+ "toSurface": "console",
163
+ "toSurfacePath": "settings/index.vue",
164
+ "ownership": "app",
165
+ "reason": "Install console settings index stub scaffold for app-owned landing or redirect behavior.",
166
+ "category": "console-web",
167
+ "id": "console-web-page-console-settings"
168
+ }
169
+ ],
170
+ "text": [
171
+ {
172
+ "op": "append-text",
173
+ "file": "config/surfaceAccessPolicies.js",
174
+ "position": "bottom",
175
+ "skipIfContains": "surfaceAccessPolicies.console_owner = {",
176
+ "value": "\nsurfaceAccessPolicies.console_owner = {\n requireAuth: true,\n requireFlagsAll: [\"console_owner\"]\n};\n",
177
+ "reason": "Register console-owner surface access policy for the console surface.",
178
+ "category": "console-web",
179
+ "id": "console-web-surface-access-policies-console-owner"
180
+ },
181
+ {
182
+ "op": "append-text",
183
+ "file": "config/public.js",
184
+ "position": "bottom",
185
+ "skipIfContains": "config.surfaceDefinitions.console = {",
186
+ "value": "\nconfig.surfaceDefinitions.console = {\n id: \"console\",\n label: \"Console\",\n pagesRoot: \"console\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: false,\n accessPolicyId: \"console_owner\",\n icon: \"mdi-console-network-outline\",\n showInSurfaceSwitchMenu: false,\n origin: \"\"\n};\n",
187
+ "reason": "Register console surface definition once console-web is installed.",
188
+ "category": "console-web",
189
+ "id": "console-web-surface-config-console"
190
+ },
191
+ {
192
+ "op": "append-text",
193
+ "file": "src/placement.js",
194
+ "position": "bottom",
195
+ "skipIfContains": "id: \"console.web.profile.menu.console\"",
196
+ "value": "\naddPlacement({\n id: \"console.web.profile.menu.console\",\n target: \"auth.profile-menu\",\n kind: \"link\",\n surfaces: [\"*\"],\n order: 600,\n props: {\n label: \"Go to console\",\n to: \"/console\",\n icon: \"mdi-console-network-outline\"\n },\n when: ({ auth, surfaceAccess, surface }) => {\n return auth?.authenticated === true && surfaceAccess?.consoleowner === true && surface !== \"console\";\n }\n});\n",
197
+ "reason": "Append owner-only console navigation entry into the authenticated profile menu outside the console surface.",
198
+ "category": "console-web",
199
+ "id": "console-web-profile-menu-console-placement"
200
+ },
201
+ {
202
+ "op": "append-text",
203
+ "file": "src/placement.js",
204
+ "position": "bottom",
205
+ "skipIfContains": "id: \"console.web.menu.settings\"",
206
+ "value": "\naddPlacement({\n id: \"console.web.menu.settings\",\n target: \"shell.primary-nav\",\n kind: \"link\",\n surfaces: [\"console\"],\n order: 100,\n props: {\n label: \"Settings\",\n to: \"/console/settings\",\n icon: \"mdi-cog-outline\"\n },\n when: ({ auth }) => auth?.authenticated === true\n});\n",
207
+ "reason": "Append console-web settings menu placement into app-owned placement registry.",
208
+ "category": "console-web",
209
+ "id": "console-web-console-settings-placement"
210
+ },
211
+ {
212
+ "op": "append-text",
213
+ "file": "src/placementTopology.js",
214
+ "position": "bottom",
215
+ "skipIfContains": "owner: \"console-settings\"",
216
+ "value": "\naddPlacementTopology({\n id: \"page.section-nav\",\n owner: \"console-settings\",\n description: \"Navigation between console settings child pages.\",\n surfaces: [\"console\"],\n variants: {\n compact: {\n outlet: \"console-settings:primary-menu\",\n renderers: {\n link: \"local.main.ui.surface-aware-menu-link-item\"\n }\n },\n medium: {\n outlet: \"console-settings:primary-menu\",\n renderers: {\n link: \"local.main.ui.surface-aware-menu-link-item\"\n }\n },\n expanded: {\n outlet: \"console-settings:primary-menu\",\n renderers: {\n link: \"local.main.ui.surface-aware-menu-link-item\"\n }\n }\n }\n});\n",
217
+ "reason": "Append console settings semantic topology into app-owned placement topology.",
218
+ "category": "console-web",
219
+ "id": "console-web-settings-placement-topology"
220
+ }
221
+ ]
222
+ }
12
223
  }
13
224
  }
@@ -3,27 +3,29 @@ import path from "node:path";
3
3
  import test from "node:test";
4
4
  import { readFile } from "node:fs/promises";
5
5
  import { fileURLToPath } from "node:url";
6
- import descriptor from "../package.descriptor.mjs";
6
+ import packageJson from "../package.json" with { type: "json" };
7
+
8
+ const packageMetadata = packageJson.jskit;
7
9
 
8
10
  const TEST_DIRECTORY = path.dirname(fileURLToPath(import.meta.url));
9
11
  const PACKAGE_DIR = path.resolve(TEST_DIRECTORY, "..");
10
12
 
11
13
  function findFileMutation(id) {
12
- const files = descriptor?.mutations?.files;
14
+ const files = packageMetadata?.mutations?.files;
13
15
  return Array.isArray(files)
14
16
  ? files.find((entry) => String(entry?.id || "").trim() === id) || null
15
17
  : null;
16
18
  }
17
19
 
18
20
  function findTextMutation(id) {
19
- const text = descriptor?.mutations?.text;
21
+ const text = packageMetadata?.mutations?.text;
20
22
  return Array.isArray(text)
21
23
  ? text.find((entry) => String(entry?.id || "").trim() === id) || null
22
24
  : null;
23
25
  }
24
26
 
25
27
  function readOutlets(target = "") {
26
- const outlets = descriptor?.metadata?.ui?.placements?.outlets;
28
+ const outlets = packageMetadata?.metadata?.ui?.placements?.outlets;
27
29
  const normalizedTarget = String(target || "").trim();
28
30
  return Array.isArray(outlets)
29
31
  ? outlets.filter((entry) => String(entry?.target || "").trim() === normalizedTarget)
@@ -31,7 +33,7 @@ function readOutlets(target = "") {
31
33
  }
32
34
 
33
35
  function findTopology(id, owner = "") {
34
- const placements = descriptor?.metadata?.ui?.placements?.topology?.placements;
36
+ const placements = packageMetadata?.metadata?.ui?.placements?.topology?.placements;
35
37
  const normalizedId = String(id || "").trim();
36
38
  const normalizedOwner = String(owner || "").trim();
37
39
  return Array.isArray(placements)
@@ -44,14 +46,14 @@ function findTopology(id, owner = "") {
44
46
  }
45
47
 
46
48
  function findContribution(id) {
47
- const contributions = descriptor?.metadata?.ui?.placements?.contributions;
49
+ const contributions = packageMetadata?.metadata?.ui?.placements?.contributions;
48
50
  return Array.isArray(contributions)
49
51
  ? contributions.find((entry) => String(entry?.id || "").trim() === id) || null
50
52
  : null;
51
53
  }
52
54
 
53
55
  test("console-web installs console surface scripts and files", () => {
54
- assert.deepEqual(descriptor?.mutations?.packageJson?.scripts, {
56
+ assert.deepEqual(packageMetadata?.mutations?.packageJson?.scripts, {
55
57
  "server:console": "SERVER_SURFACE=console node ./bin/server.js",
56
58
  "dev:console": "VITE_SURFACE=console vite",
57
59
  "build:console": "VITE_SURFACE=console vite build"
@@ -1,215 +0,0 @@
1
- export default Object.freeze({
2
- packageVersion: 1,
3
- packageId: "@jskit-ai/console-web",
4
- version: "0.1.115",
5
- kind: "runtime",
6
- description: "Authenticated console surface scaffold and surface policy wiring.",
7
- dependsOn: [
8
- "@jskit-ai/auth-web",
9
- "@jskit-ai/console-core",
10
- "@jskit-ai/shell-web",
11
- ],
12
- capabilities: {
13
- provides: [
14
- "console.web"
15
- ],
16
- requires: [
17
- "console.core"
18
- ]
19
- },
20
- runtime: {
21
- server: {
22
- providers: []
23
- },
24
- client: {
25
- providers: []
26
- }
27
- },
28
- metadata: {
29
- apiSummary: {
30
- surfaces: [
31
- {
32
- subpath: "./client",
33
- summary: "Exports no runtime API today (reserved console surface package entrypoint)."
34
- }
35
- ],
36
- containerTokens: {
37
- server: [],
38
- client: []
39
- }
40
- },
41
- ui: {
42
- placements: {
43
- outlets: [
44
- {
45
- target: "console-settings:primary-menu",
46
- surfaces: ["console"],
47
- source: "templates/src/pages/console/settings.vue"
48
- }
49
- ],
50
- topology: {
51
- placements: [
52
- {
53
- id: "page.section-nav",
54
- owner: "console-settings",
55
- description: "Navigation between console settings child pages.",
56
- surfaces: ["console"],
57
- variants: {
58
- compact: {
59
- outlet: "console-settings:primary-menu",
60
- renderers: {
61
- link: "local.main.ui.surface-aware-menu-link-item"
62
- }
63
- },
64
- medium: {
65
- outlet: "console-settings:primary-menu",
66
- renderers: {
67
- link: "local.main.ui.surface-aware-menu-link-item"
68
- }
69
- },
70
- expanded: {
71
- outlet: "console-settings:primary-menu",
72
- renderers: {
73
- link: "local.main.ui.surface-aware-menu-link-item"
74
- }
75
- }
76
- }
77
- }
78
- ]
79
- },
80
- contributions: [
81
- {
82
- id: "console.web.profile.menu.console",
83
- target: "auth.profile-menu",
84
- kind: "link",
85
- surfaces: ["*"],
86
- order: 600,
87
- when: "auth.authenticated === true && surfaceAccess.consoleowner === true && surface !== \"console\"",
88
- source: "mutations.text#console-web-profile-menu-console-placement"
89
- },
90
- {
91
- id: "console.web.menu.settings",
92
- target: "shell.primary-nav",
93
- kind: "link",
94
- surfaces: ["console"],
95
- order: 100,
96
- when: "auth.authenticated === true",
97
- source: "mutations.text#console-web-console-settings-placement"
98
- }
99
- ]
100
- }
101
- }
102
- },
103
- mutations: {
104
- dependencies: {
105
- runtime: {
106
- "@jskit-ai/auth-web": "0.1.147",
107
- "@jskit-ai/console-core": "0.1.110",
108
- "@jskit-ai/shell-web": "0.1.147",
109
- },
110
- dev: {}
111
- },
112
- packageJson: {
113
- scripts: {
114
- "server:console": "SERVER_SURFACE=console node ./bin/server.js",
115
- "dev:console": "VITE_SURFACE=console vite",
116
- "build:console": "VITE_SURFACE=console vite build"
117
- }
118
- },
119
- procfile: {},
120
- files: [
121
- {
122
- from: "templates/src/pages/console.vue",
123
- toSurface: "console",
124
- toSurfaceRoot: true,
125
- ownership: "app",
126
- reason: "Install shell-driven console wrapper page.",
127
- category: "console-web",
128
- id: "console-web-page-console-wrapper"
129
- },
130
- {
131
- from: "templates/src/pages/console/index.vue",
132
- toSurface: "console",
133
- toSurfacePath: "index.vue",
134
- ownership: "app",
135
- reason: "Install shell-driven console page starter.",
136
- category: "console-web",
137
- id: "console-web-page-console"
138
- },
139
- {
140
- from: "templates/src/pages/console/settings.vue",
141
- toSurface: "console",
142
- toSurfacePath: "settings.vue",
143
- ownership: "app",
144
- reason: "Install console settings shell route scaffold for console-web.",
145
- category: "console-web",
146
- id: "console-web-page-console-settings-shell"
147
- },
148
- {
149
- from: "templates/src/pages/console/settings/index.vue",
150
- toSurface: "console",
151
- toSurfacePath: "settings/index.vue",
152
- ownership: "app",
153
- reason: "Install console settings index stub scaffold for app-owned landing or redirect behavior.",
154
- category: "console-web",
155
- id: "console-web-page-console-settings"
156
- }
157
- ],
158
- text: [
159
- {
160
- op: "append-text",
161
- file: "config/surfaceAccessPolicies.js",
162
- position: "bottom",
163
- skipIfContains: "surfaceAccessPolicies.console_owner = {",
164
- value: "\nsurfaceAccessPolicies.console_owner = {\n requireAuth: true,\n requireFlagsAll: [\"console_owner\"]\n};\n",
165
- reason: "Register console-owner surface access policy for the console surface.",
166
- category: "console-web",
167
- id: "console-web-surface-access-policies-console-owner"
168
- },
169
- {
170
- op: "append-text",
171
- file: "config/public.js",
172
- position: "bottom",
173
- skipIfContains: "config.surfaceDefinitions.console = {",
174
- value:
175
- "\nconfig.surfaceDefinitions.console = {\n id: \"console\",\n label: \"Console\",\n pagesRoot: \"console\",\n enabled: true,\n requiresAuth: true,\n requiresWorkspace: false,\n accessPolicyId: \"console_owner\",\n icon: \"mdi-console-network-outline\",\n showInSurfaceSwitchMenu: false,\n origin: \"\"\n};\n",
176
- reason: "Register console surface definition once console-web is installed.",
177
- category: "console-web",
178
- id: "console-web-surface-config-console"
179
- },
180
- {
181
- op: "append-text",
182
- file: "src/placement.js",
183
- position: "bottom",
184
- skipIfContains: "id: \"console.web.profile.menu.console\"",
185
- value:
186
- "\naddPlacement({\n id: \"console.web.profile.menu.console\",\n target: \"auth.profile-menu\",\n kind: \"link\",\n surfaces: [\"*\"],\n order: 600,\n props: {\n label: \"Go to console\",\n to: \"/console\",\n icon: \"mdi-console-network-outline\"\n },\n when: ({ auth, surfaceAccess, surface }) => {\n return auth?.authenticated === true && surfaceAccess?.consoleowner === true && surface !== \"console\";\n }\n});\n",
187
- reason: "Append owner-only console navigation entry into the authenticated profile menu outside the console surface.",
188
- category: "console-web",
189
- id: "console-web-profile-menu-console-placement"
190
- },
191
- {
192
- op: "append-text",
193
- file: "src/placement.js",
194
- position: "bottom",
195
- skipIfContains: "id: \"console.web.menu.settings\"",
196
- value:
197
- "\naddPlacement({\n id: \"console.web.menu.settings\",\n target: \"shell.primary-nav\",\n kind: \"link\",\n surfaces: [\"console\"],\n order: 100,\n props: {\n label: \"Settings\",\n to: \"/console/settings\",\n icon: \"mdi-cog-outline\"\n },\n when: ({ auth }) => auth?.authenticated === true\n});\n",
198
- reason: "Append console-web settings menu placement into app-owned placement registry.",
199
- category: "console-web",
200
- id: "console-web-console-settings-placement"
201
- },
202
- {
203
- op: "append-text",
204
- file: "src/placementTopology.js",
205
- position: "bottom",
206
- skipIfContains: "owner: \"console-settings\"",
207
- value:
208
- "\naddPlacementTopology({\n id: \"page.section-nav\",\n owner: \"console-settings\",\n description: \"Navigation between console settings child pages.\",\n surfaces: [\"console\"],\n variants: {\n compact: {\n outlet: \"console-settings:primary-menu\",\n renderers: {\n link: \"local.main.ui.surface-aware-menu-link-item\"\n }\n },\n medium: {\n outlet: \"console-settings:primary-menu\",\n renderers: {\n link: \"local.main.ui.surface-aware-menu-link-item\"\n }\n },\n expanded: {\n outlet: \"console-settings:primary-menu\",\n renderers: {\n link: \"local.main.ui.surface-aware-menu-link-item\"\n }\n }\n }\n});\n",
209
- reason: "Append console settings semantic topology into app-owned placement topology.",
210
- category: "console-web",
211
- id: "console-web-settings-placement-topology"
212
- }
213
- ]
214
- }
215
- });