@happyvertical/smrt-workbench 0.40.66
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/AGENTS.md +28 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +31 -0
- package/dist/chunks/discovery-G9-foyW8.js +979 -0
- package/dist/chunks/discovery-G9-foyW8.js.map +1 -0
- package/dist/chunks/runtime-BTiu5fuP.js +93 -0
- package/dist/chunks/runtime-BTiu5fuP.js.map +1 -0
- package/dist/discovery.d.ts +14 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/runtime.d.ts +10 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2 -0
- package/dist/svelte/MarkdownDocument.svelte +200 -0
- package/dist/svelte/MarkdownDocument.svelte.d.ts +7 -0
- package/dist/svelte/MarkdownDocument.svelte.d.ts.map +1 -0
- package/dist/svelte/WorkbenchHost.svelte +2058 -0
- package/dist/svelte/WorkbenchHost.svelte.d.ts +13 -0
- package/dist/svelte/WorkbenchHost.svelte.d.ts.map +1 -0
- package/dist/svelte/command.d.ts +6 -0
- package/dist/svelte/command.d.ts.map +1 -0
- package/dist/svelte/command.js +18 -0
- package/dist/svelte/index.d.ts +2 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +1 -0
- package/dist/types.d.ts +202 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/vite.d.ts +6 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +124 -0
- package/dist/vite.js.map +1 -0
- package/host/README.md +12 -0
- package/host/package.json +21 -0
- package/host/src/app.html +11 -0
- package/host/src/hooks.client.ts +5 -0
- package/host/src/routes/+error.svelte +44 -0
- package/host/src/routes/+page.svelte +15 -0
- package/host/svelte.config.js +12 -0
- package/host/tsconfig.json +10 -0
- package/host/vite.config.ts +202 -0
- package/package.json +96 -0
- package/src/discovery.ts +1748 -0
- package/src/runtime.ts +165 -0
- package/src/types.ts +243 -0
- package/src/utils.ts +16 -0
- package/src/vite.ts +303 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SmrtPlaygroundModule } from '@happyvertical/smrt-playground';
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import type { SmrtWorkbenchModule, SmrtWorkbenchProject } from '../types.js';
|
|
4
|
+
export interface Props {
|
|
5
|
+
project: SmrtWorkbenchProject;
|
|
6
|
+
modules?: SmrtWorkbenchModule[];
|
|
7
|
+
playgroundModules?: SmrtPlaygroundModule[];
|
|
8
|
+
title?: string;
|
|
9
|
+
}
|
|
10
|
+
declare const WorkbenchHost: Component<Props, {}, "">;
|
|
11
|
+
type WorkbenchHost = ReturnType<typeof WorkbenchHost>;
|
|
12
|
+
export default WorkbenchHost;
|
|
13
|
+
//# sourceMappingURL=WorkbenchHost.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkbenchHost.svelte.d.ts","sourceRoot":"","sources":["../../src/svelte/WorkbenchHost.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAWxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,KAAK,EAEV,mBAAmB,EACnB,oBAAoB,EAQrB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,iBAAiB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2pCD,QAAA,MAAM,aAAa,0BAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/svelte/command.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CACpC,cAAc,EAAE;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,EACD,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GACtC,MAAM,CAmBR"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function workbenchScriptCommand(packageSummary, scriptName, packageManager) {
|
|
2
|
+
if (packageSummary.source === 'workspace') {
|
|
3
|
+
return `pnpm --filter ${packageSummary.name} ${scriptName}`;
|
|
4
|
+
}
|
|
5
|
+
if (packageSummary.source === 'app') {
|
|
6
|
+
return packageManager === 'yarn'
|
|
7
|
+
? `yarn run ${scriptName}`
|
|
8
|
+
: `${packageManager} run ${scriptName}`;
|
|
9
|
+
}
|
|
10
|
+
const packageDir = packageSummary.relativeDirectory || '.';
|
|
11
|
+
if (packageManager === 'yarn') {
|
|
12
|
+
return `yarn --cwd ${packageDir} run ${scriptName}`;
|
|
13
|
+
}
|
|
14
|
+
if (packageManager === 'pnpm') {
|
|
15
|
+
return `pnpm --dir ${packageDir} run ${scriptName}`;
|
|
16
|
+
}
|
|
17
|
+
return `npm --prefix ${packageDir} run ${scriptName}`;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as WorkbenchHost } from './WorkbenchHost.svelte';
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Component } from 'svelte';
|
|
2
|
+
export type WorkbenchComponentType = Component<Record<string, unknown>>;
|
|
3
|
+
export type WorkbenchComponentModule = WorkbenchComponentType | {
|
|
4
|
+
default: WorkbenchComponentType;
|
|
5
|
+
};
|
|
6
|
+
export type WorkbenchComponentLoader = () => Promise<WorkbenchComponentModule>;
|
|
7
|
+
export type SmrtWorkbenchScopeMode = 'workspace' | 'package' | 'consumer';
|
|
8
|
+
export type SmrtWorkbenchPackageManager = 'pnpm' | 'yarn' | 'npm';
|
|
9
|
+
export interface SmrtWorkbenchRouteDefinition {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
defaultPath?: string;
|
|
14
|
+
component?: WorkbenchComponentType;
|
|
15
|
+
loadComponent?: WorkbenchComponentLoader;
|
|
16
|
+
props?: Record<string, unknown>;
|
|
17
|
+
tags?: string[];
|
|
18
|
+
nav?: {
|
|
19
|
+
label?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
icon?: string;
|
|
22
|
+
order?: number;
|
|
23
|
+
group?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface SmrtWorkbenchRouteModule {
|
|
27
|
+
packageName: string;
|
|
28
|
+
displayName?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
routes: Record<string, SmrtWorkbenchRouteDefinition>;
|
|
31
|
+
}
|
|
32
|
+
export interface SmrtWorkbenchRecommendedCommand {
|
|
33
|
+
id: string;
|
|
34
|
+
label: string;
|
|
35
|
+
command: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface SmrtWorkbenchModule {
|
|
39
|
+
packageName: string;
|
|
40
|
+
displayName?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
routeModule?: SmrtWorkbenchRouteModule;
|
|
43
|
+
routeModules?: SmrtWorkbenchRouteModule[];
|
|
44
|
+
recommendedCommands?: SmrtWorkbenchRecommendedCommand[];
|
|
45
|
+
docs?: WorkbenchDocumentSummary[];
|
|
46
|
+
examples?: WorkbenchExampleSummary[];
|
|
47
|
+
}
|
|
48
|
+
export type SmrtWorkbenchModuleExport = SmrtWorkbenchModule | SmrtWorkbenchModule[] | {
|
|
49
|
+
modules: SmrtWorkbenchModule[];
|
|
50
|
+
};
|
|
51
|
+
export interface ResolvedWorkbenchRouteEntry extends SmrtWorkbenchRouteDefinition {
|
|
52
|
+
packageName: string;
|
|
53
|
+
moduleDisplayName: string;
|
|
54
|
+
routeKey: string;
|
|
55
|
+
qualifiedId: string;
|
|
56
|
+
defaultPath: string;
|
|
57
|
+
}
|
|
58
|
+
export interface ResolvedWorkbenchModule extends Omit<SmrtWorkbenchModule, 'displayName' | 'routeModule' | 'routeModules'> {
|
|
59
|
+
displayName: string;
|
|
60
|
+
routeModules: SmrtWorkbenchRouteModule[];
|
|
61
|
+
routes: ResolvedWorkbenchRouteEntry[];
|
|
62
|
+
}
|
|
63
|
+
export interface WorkbenchScopeResolution {
|
|
64
|
+
mode: SmrtWorkbenchScopeMode;
|
|
65
|
+
cwd: string;
|
|
66
|
+
projectRoot: string;
|
|
67
|
+
workspaceRoot?: string;
|
|
68
|
+
packageName?: string;
|
|
69
|
+
packageDir?: string;
|
|
70
|
+
packageManager: SmrtWorkbenchPackageManager;
|
|
71
|
+
}
|
|
72
|
+
export interface WorkbenchDocumentSummary {
|
|
73
|
+
kind: 'readme' | 'agents' | 'changelog' | 'generated' | 'docs' | 'other';
|
|
74
|
+
title: string;
|
|
75
|
+
path: string;
|
|
76
|
+
content?: string;
|
|
77
|
+
truncated?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface WorkbenchExampleSummary {
|
|
80
|
+
id: string;
|
|
81
|
+
title: string;
|
|
82
|
+
path?: string;
|
|
83
|
+
language?: string;
|
|
84
|
+
code?: string;
|
|
85
|
+
source: 'file' | 'readme' | 'playground';
|
|
86
|
+
}
|
|
87
|
+
export interface WorkbenchKnowledgeSummary {
|
|
88
|
+
manifestPath?: string;
|
|
89
|
+
knowledgePath?: string;
|
|
90
|
+
objectCount: number;
|
|
91
|
+
relationshipCount: number;
|
|
92
|
+
promptCount: number;
|
|
93
|
+
mcpToolCount: number;
|
|
94
|
+
surfaceCount: number;
|
|
95
|
+
tags: string[];
|
|
96
|
+
risks: string[];
|
|
97
|
+
objectNames: string[];
|
|
98
|
+
}
|
|
99
|
+
export interface WorkbenchApiObjectFieldSummary {
|
|
100
|
+
name: string;
|
|
101
|
+
type?: string;
|
|
102
|
+
required?: boolean;
|
|
103
|
+
related?: string;
|
|
104
|
+
description?: string;
|
|
105
|
+
}
|
|
106
|
+
export interface WorkbenchApiObjectSummary {
|
|
107
|
+
name: string;
|
|
108
|
+
className?: string;
|
|
109
|
+
qualifiedName?: string;
|
|
110
|
+
collection?: string;
|
|
111
|
+
sourcePath?: string;
|
|
112
|
+
typedocPath?: string;
|
|
113
|
+
description?: string;
|
|
114
|
+
fields: WorkbenchApiObjectFieldSummary[];
|
|
115
|
+
}
|
|
116
|
+
export type WorkbenchApiParameterLocation = 'path' | 'query' | 'body' | 'option' | 'argument' | 'input';
|
|
117
|
+
export interface WorkbenchApiParameterSummary {
|
|
118
|
+
name: string;
|
|
119
|
+
type?: string;
|
|
120
|
+
required?: boolean;
|
|
121
|
+
location: WorkbenchApiParameterLocation;
|
|
122
|
+
description?: string;
|
|
123
|
+
defaultValue?: string;
|
|
124
|
+
}
|
|
125
|
+
export interface WorkbenchRestEndpointSummary {
|
|
126
|
+
objectName: string;
|
|
127
|
+
action: string;
|
|
128
|
+
method: string;
|
|
129
|
+
path: string;
|
|
130
|
+
description: string;
|
|
131
|
+
parameters: WorkbenchApiParameterSummary[];
|
|
132
|
+
}
|
|
133
|
+
export interface WorkbenchCliCommandSummary {
|
|
134
|
+
objectName: string;
|
|
135
|
+
action: string;
|
|
136
|
+
command: string;
|
|
137
|
+
description: string;
|
|
138
|
+
parameters: WorkbenchApiParameterSummary[];
|
|
139
|
+
}
|
|
140
|
+
export interface WorkbenchMcpToolSummary {
|
|
141
|
+
objectName: string;
|
|
142
|
+
action: string;
|
|
143
|
+
toolName: string;
|
|
144
|
+
description: string;
|
|
145
|
+
parameters: WorkbenchApiParameterSummary[];
|
|
146
|
+
}
|
|
147
|
+
export interface WorkbenchApiSummary {
|
|
148
|
+
objectNames: string[];
|
|
149
|
+
objects: WorkbenchApiObjectSummary[];
|
|
150
|
+
restEndpoints: WorkbenchRestEndpointSummary[];
|
|
151
|
+
cliCommands: WorkbenchCliCommandSummary[];
|
|
152
|
+
mcpTools: WorkbenchMcpToolSummary[];
|
|
153
|
+
endpointCount: number;
|
|
154
|
+
routeFiles: string[];
|
|
155
|
+
}
|
|
156
|
+
export interface WorkbenchPackageSummary {
|
|
157
|
+
name: string;
|
|
158
|
+
version?: string;
|
|
159
|
+
description?: string;
|
|
160
|
+
source: 'workspace' | 'package' | 'app';
|
|
161
|
+
directory?: string;
|
|
162
|
+
relativeDirectory?: string;
|
|
163
|
+
scripts: Record<string, string>;
|
|
164
|
+
dependencies: Record<string, string>;
|
|
165
|
+
devDependencies: Record<string, string>;
|
|
166
|
+
peerDependencies: Record<string, string>;
|
|
167
|
+
smrtDependencies: string[];
|
|
168
|
+
sdkDependencies: string[];
|
|
169
|
+
exportKeys: string[];
|
|
170
|
+
docs: WorkbenchDocumentSummary[];
|
|
171
|
+
examples: WorkbenchExampleSummary[];
|
|
172
|
+
knowledge: WorkbenchKnowledgeSummary;
|
|
173
|
+
api: WorkbenchApiSummary;
|
|
174
|
+
migrations: string[];
|
|
175
|
+
routeModuleCount: number;
|
|
176
|
+
routeCount: number;
|
|
177
|
+
playgroundEntryCount: number;
|
|
178
|
+
recommendedCommands: SmrtWorkbenchRecommendedCommand[];
|
|
179
|
+
}
|
|
180
|
+
export interface SmrtWorkbenchProject {
|
|
181
|
+
generatedAt: string;
|
|
182
|
+
scope: WorkbenchScopeResolution;
|
|
183
|
+
packages: WorkbenchPackageSummary[];
|
|
184
|
+
}
|
|
185
|
+
export interface DiscoveredWorkbenchTarget {
|
|
186
|
+
packageName?: string;
|
|
187
|
+
source: 'workspace' | 'package' | 'app';
|
|
188
|
+
sourcePath?: string;
|
|
189
|
+
runtimePath?: string;
|
|
190
|
+
importSpecifier?: string;
|
|
191
|
+
}
|
|
192
|
+
export interface SmrtWorkbenchVitePluginOptions {
|
|
193
|
+
mode?: 'auto' | 'workspace' | 'consumer';
|
|
194
|
+
projectRoot?: string;
|
|
195
|
+
workspaceRoot?: string;
|
|
196
|
+
cwd?: string;
|
|
197
|
+
packageName?: string;
|
|
198
|
+
packagesPattern?: string;
|
|
199
|
+
localWorkbenchPath?: string;
|
|
200
|
+
localPlaygroundPath?: string;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
File without changes
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAWrE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAEzE"}
|
package/dist/vite.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
import { SmrtWorkbenchVitePluginOptions } from './types.js';
|
|
3
|
+
declare const VIRTUAL_WORKBENCH_PROJECT_MODULE_ID = "virtual:smrt-workbench/project";
|
|
4
|
+
export declare function smrtWorkbenchVitePlugin(options?: SmrtWorkbenchVitePluginOptions): Plugin;
|
|
5
|
+
export { VIRTUAL_WORKBENCH_PROJECT_MODULE_ID };
|
|
6
|
+
//# sourceMappingURL=vite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAQlD,OAAO,KAAK,EAEV,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AAEpB,QAAA,MAAM,mCAAmC,mCAAmC,CAAC;AA0L7E,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,MAAM,CAgGR;AAED,OAAO,EAAE,mCAAmC,EAAE,CAAC"}
|
package/dist/vite.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { a as discoverWorkbenchTargets, f as resolveWorkbenchScope, r as detectWorkbenchMode, t as buildWorkbenchProject, u as findWorkspaceRoot } from "./chunks/discovery-G9-foyW8.js";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import fg from "fast-glob";
|
|
5
|
+
import { normalizePath } from "vite";
|
|
6
|
+
//#region src/vite.ts
|
|
7
|
+
var VIRTUAL_WORKBENCH_PROJECT_MODULE_ID = "virtual:smrt-workbench/project";
|
|
8
|
+
var RESOLVED_VIRTUAL_WORKBENCH_PROJECT_MODULE_ID = `\0${VIRTUAL_WORKBENCH_PROJECT_MODULE_ID}`;
|
|
9
|
+
function toViteImportSpecifier(specifier) {
|
|
10
|
+
if (!isAbsolute(specifier)) return specifier;
|
|
11
|
+
return `/@fs/${normalizePath(specifier)}`;
|
|
12
|
+
}
|
|
13
|
+
function targetSpecifier(target) {
|
|
14
|
+
return target.importSpecifier || target.sourcePath || target.runtimePath || null;
|
|
15
|
+
}
|
|
16
|
+
function readJson(path) {
|
|
17
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
18
|
+
}
|
|
19
|
+
function exportKeys(exportsField) {
|
|
20
|
+
if (typeof exportsField === "string") return ["."];
|
|
21
|
+
if (exportsField && typeof exportsField === "object" && !Array.isArray(exportsField)) return Object.keys(exportsField).sort();
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
function dependencyNames(packageJson) {
|
|
25
|
+
return Object.keys({
|
|
26
|
+
...packageJson.dependencies,
|
|
27
|
+
...packageJson.devDependencies,
|
|
28
|
+
...packageJson.peerDependencies
|
|
29
|
+
}).sort();
|
|
30
|
+
}
|
|
31
|
+
async function discoverWorkspacePlaygroundSpecifiers(workspaceRoot, packageName) {
|
|
32
|
+
return (await fg("packages/*/src/svelte/playground.ts", {
|
|
33
|
+
cwd: workspaceRoot,
|
|
34
|
+
absolute: true,
|
|
35
|
+
onlyFiles: true
|
|
36
|
+
})).sort().map((sourcePath) => {
|
|
37
|
+
const packageJson = readJson(join(dirname(dirname(dirname(sourcePath))), "package.json"));
|
|
38
|
+
return {
|
|
39
|
+
packageName: typeof packageJson.name === "string" ? packageJson.name : void 0,
|
|
40
|
+
specifier: normalizePath(sourcePath)
|
|
41
|
+
};
|
|
42
|
+
}).filter((target) => packageName ? target.packageName === packageName : true);
|
|
43
|
+
}
|
|
44
|
+
async function discoverConsumerPlaygroundSpecifiers(projectRoot, localPlaygroundPath, packageName) {
|
|
45
|
+
const packageJsonPath = resolve(projectRoot, "package.json");
|
|
46
|
+
if (!existsSync(packageJsonPath)) return [];
|
|
47
|
+
const packageJson = readJson(packageJsonPath);
|
|
48
|
+
const specifiers = [];
|
|
49
|
+
for (const dependencyName of dependencyNames(packageJson)) {
|
|
50
|
+
if (!dependencyName.startsWith("@happyvertical/smrt-") || dependencyName === "@happyvertical/smrt-playground" || dependencyName === "@happyvertical/smrt-workbench") continue;
|
|
51
|
+
if (packageName && dependencyName !== packageName) continue;
|
|
52
|
+
const dependencyPackageJsonPath = resolve(projectRoot, "node_modules", dependencyName, "package.json");
|
|
53
|
+
if (!existsSync(dependencyPackageJsonPath)) continue;
|
|
54
|
+
if (exportKeys(readJson(dependencyPackageJsonPath).exports).includes("./playground")) specifiers.push({
|
|
55
|
+
packageName: dependencyName,
|
|
56
|
+
specifier: `${dependencyName}/playground`
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const localPlayground = resolve(projectRoot, localPlaygroundPath);
|
|
60
|
+
if (!packageName && existsSync(localPlayground)) specifiers.push({ specifier: normalizePath(localPlayground) });
|
|
61
|
+
return specifiers;
|
|
62
|
+
}
|
|
63
|
+
function buildVirtualModuleCode(projectJson, workbenchSpecifiers, playgroundSpecifiers) {
|
|
64
|
+
return `${workbenchSpecifiers.map((specifier, index) => `import workbench${index} from ${JSON.stringify(toViteImportSpecifier(specifier))};`).join("\n")}
|
|
65
|
+
${playgroundSpecifiers.map((specifier, index) => `import playground${index} from ${JSON.stringify(toViteImportSpecifier(specifier))};`).join("\n")}
|
|
66
|
+
|
|
67
|
+
const toModules = (value) => {
|
|
68
|
+
if (!value) return [];
|
|
69
|
+
if (Array.isArray(value)) return value.filter(Boolean);
|
|
70
|
+
if (Array.isArray(value.modules)) return value.modules.filter(Boolean);
|
|
71
|
+
return [value];
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export const workbenchProject = ${projectJson};
|
|
75
|
+
export const workbenchModules = [${workbenchSpecifiers.map((_, index) => `...toModules(workbench${index})`).join(", ")}].filter(Boolean);
|
|
76
|
+
export const playgroundModules = [${playgroundSpecifiers.map((_, index) => `...toModules(playground${index})`).join(", ")}].filter(Boolean);
|
|
77
|
+
export default { workbenchProject, workbenchModules, playgroundModules };
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
function envValue(name) {
|
|
81
|
+
const value = process.env[name];
|
|
82
|
+
return value && value.length > 0 ? value : void 0;
|
|
83
|
+
}
|
|
84
|
+
function addWatchFileIfExists(context, path) {
|
|
85
|
+
if (existsSync(path)) context.addWatchFile(path);
|
|
86
|
+
}
|
|
87
|
+
function smrtWorkbenchVitePlugin(options = {}) {
|
|
88
|
+
return {
|
|
89
|
+
name: "smrt-workbench-vite-plugin",
|
|
90
|
+
enforce: "pre",
|
|
91
|
+
resolveId(id) {
|
|
92
|
+
if (id === "virtual:smrt-workbench/project") return RESOLVED_VIRTUAL_WORKBENCH_PROJECT_MODULE_ID;
|
|
93
|
+
return null;
|
|
94
|
+
},
|
|
95
|
+
async load(id) {
|
|
96
|
+
if (id !== RESOLVED_VIRTUAL_WORKBENCH_PROJECT_MODULE_ID) return null;
|
|
97
|
+
const cwd = options.cwd || envValue("SMRT_WORKBENCH_CWD") || process.cwd();
|
|
98
|
+
const projectRoot = options.projectRoot || envValue("SMRT_WORKBENCH_PROJECT_ROOT") || cwd;
|
|
99
|
+
const packageName = options.packageName || envValue("SMRT_WORKBENCH_PACKAGE");
|
|
100
|
+
const scope = resolveWorkbenchScope(cwd, {
|
|
101
|
+
projectRoot,
|
|
102
|
+
workspaceRoot: options.workspaceRoot,
|
|
103
|
+
packageName
|
|
104
|
+
});
|
|
105
|
+
const effectiveMode = options.mode === "auto" || !options.mode ? detectWorkbenchMode(scope.projectRoot) : options.mode;
|
|
106
|
+
const project = await buildWorkbenchProject(scope);
|
|
107
|
+
const workbenchTargets = await discoverWorkbenchTargets(scope.projectRoot, effectiveMode, options.localWorkbenchPath || "src/workbench.ts", scope.packageName, options.packagesPattern);
|
|
108
|
+
const playgroundTargetSpecifiers = effectiveMode === "workspace" ? await discoverWorkspacePlaygroundSpecifiers(scope.projectRoot, scope.packageName) : await discoverConsumerPlaygroundSpecifiers(scope.projectRoot, options.localPlaygroundPath || "src/playground.ts", scope.packageName);
|
|
109
|
+
const workbenchSpecifiers = workbenchTargets.map(targetSpecifier).filter((specifier) => Boolean(specifier));
|
|
110
|
+
const playgroundSpecifiers = playgroundTargetSpecifiers.map((target) => target.specifier);
|
|
111
|
+
addWatchFileIfExists(this, resolve(scope.projectRoot, "package.json"));
|
|
112
|
+
addWatchFileIfExists(this, resolve(scope.projectRoot, "pnpm-workspace.yaml"));
|
|
113
|
+
const workspaceRoot = options.workspaceRoot || findWorkspaceRoot(scope.projectRoot);
|
|
114
|
+
if (workspaceRoot) addWatchFileIfExists(this, resolve(workspaceRoot, "pnpm-workspace.yaml"));
|
|
115
|
+
for (const packageSummary of project.packages) if (packageSummary.directory) addWatchFileIfExists(this, resolve(packageSummary.directory, "package.json"));
|
|
116
|
+
for (const specifier of [...workbenchSpecifiers, ...playgroundSpecifiers]) if (isAbsolute(specifier)) this.addWatchFile(specifier);
|
|
117
|
+
return buildVirtualModuleCode(JSON.stringify(project), workbenchSpecifiers, playgroundSpecifiers);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//#endregion
|
|
122
|
+
export { VIRTUAL_WORKBENCH_PROJECT_MODULE_ID, smrtWorkbenchVitePlugin };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","names":[],"sources":["../src/vite.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, isAbsolute, join, resolve } from 'node:path';\nimport fg from 'fast-glob';\nimport { normalizePath, type Plugin } from 'vite';\nimport {\n buildWorkbenchProject,\n detectWorkbenchMode,\n discoverWorkbenchTargets,\n findWorkspaceRoot,\n resolveWorkbenchScope,\n} from './discovery.js';\nimport type {\n DiscoveredWorkbenchTarget,\n SmrtWorkbenchVitePluginOptions,\n} from './types.js';\n\nconst VIRTUAL_WORKBENCH_PROJECT_MODULE_ID = 'virtual:smrt-workbench/project';\nconst RESOLVED_VIRTUAL_WORKBENCH_PROJECT_MODULE_ID = `\\0${VIRTUAL_WORKBENCH_PROJECT_MODULE_ID}`;\n\ninterface PlaygroundSpecifier {\n packageName?: string;\n specifier: string;\n}\n\nfunction toViteImportSpecifier(specifier: string): string {\n if (!isAbsolute(specifier)) {\n return specifier;\n }\n\n return `/@fs/${normalizePath(specifier)}`;\n}\n\nfunction targetSpecifier(target: DiscoveredWorkbenchTarget): string | null {\n return (\n target.importSpecifier || target.sourcePath || target.runtimePath || null\n );\n}\n\nfunction readJson(path: string): Record<string, unknown> {\n return JSON.parse(readFileSync(path, 'utf-8')) as Record<string, unknown>;\n}\n\nfunction exportKeys(exportsField: unknown): string[] {\n if (typeof exportsField === 'string') {\n return ['.'];\n }\n\n if (\n exportsField &&\n typeof exportsField === 'object' &&\n !Array.isArray(exportsField)\n ) {\n return Object.keys(exportsField).sort();\n }\n\n return [];\n}\n\nfunction dependencyNames(packageJson: Record<string, unknown>): string[] {\n return Object.keys({\n ...(packageJson.dependencies as Record<string, string> | undefined),\n ...(packageJson.devDependencies as Record<string, string> | undefined),\n ...(packageJson.peerDependencies as Record<string, string> | undefined),\n }).sort();\n}\n\nasync function discoverWorkspacePlaygroundSpecifiers(\n workspaceRoot: string,\n packageName?: string,\n): Promise<PlaygroundSpecifier[]> {\n const matches = await fg('packages/*/src/svelte/playground.ts', {\n cwd: workspaceRoot,\n absolute: true,\n onlyFiles: true,\n });\n\n return matches\n .sort()\n .map((sourcePath) => {\n const packageDir = dirname(dirname(dirname(sourcePath)));\n const packageJson = readJson(join(packageDir, 'package.json'));\n return {\n packageName:\n typeof packageJson.name === 'string' ? packageJson.name : undefined,\n specifier: normalizePath(sourcePath),\n };\n })\n .filter((target) =>\n packageName ? target.packageName === packageName : true,\n );\n}\n\nasync function discoverConsumerPlaygroundSpecifiers(\n projectRoot: string,\n localPlaygroundPath: string,\n packageName?: string,\n): Promise<PlaygroundSpecifier[]> {\n const packageJsonPath = resolve(projectRoot, 'package.json');\n if (!existsSync(packageJsonPath)) {\n return [];\n }\n\n const packageJson = readJson(packageJsonPath);\n const specifiers: PlaygroundSpecifier[] = [];\n\n for (const dependencyName of dependencyNames(packageJson)) {\n if (\n !dependencyName.startsWith('@happyvertical/smrt-') ||\n dependencyName === '@happyvertical/smrt-playground' ||\n dependencyName === '@happyvertical/smrt-workbench'\n ) {\n continue;\n }\n\n if (packageName && dependencyName !== packageName) {\n continue;\n }\n\n const dependencyPackageJsonPath = resolve(\n projectRoot,\n 'node_modules',\n dependencyName,\n 'package.json',\n );\n if (!existsSync(dependencyPackageJsonPath)) {\n continue;\n }\n\n const dependencyPackageJson = readJson(dependencyPackageJsonPath);\n if (exportKeys(dependencyPackageJson.exports).includes('./playground')) {\n specifiers.push({\n packageName: dependencyName,\n specifier: `${dependencyName}/playground`,\n });\n }\n }\n\n const localPlayground = resolve(projectRoot, localPlaygroundPath);\n if (!packageName && existsSync(localPlayground)) {\n specifiers.push({\n specifier: normalizePath(localPlayground),\n });\n }\n\n return specifiers;\n}\n\nfunction buildVirtualModuleCode(\n projectJson: string,\n workbenchSpecifiers: string[],\n playgroundSpecifiers: string[],\n): string {\n const workbenchImports = workbenchSpecifiers\n .map(\n (specifier, index) =>\n `import workbench${index} from ${JSON.stringify(toViteImportSpecifier(specifier))};`,\n )\n .join('\\n');\n const playgroundImports = playgroundSpecifiers\n .map(\n (specifier, index) =>\n `import playground${index} from ${JSON.stringify(toViteImportSpecifier(specifier))};`,\n )\n .join('\\n');\n const workbenchList = workbenchSpecifiers\n .map((_, index) => `...toModules(workbench${index})`)\n .join(', ');\n const playgroundList = playgroundSpecifiers\n .map((_, index) => `...toModules(playground${index})`)\n .join(', ');\n\n return `${workbenchImports}\n${playgroundImports}\n\nconst toModules = (value) => {\n if (!value) return [];\n if (Array.isArray(value)) return value.filter(Boolean);\n if (Array.isArray(value.modules)) return value.modules.filter(Boolean);\n return [value];\n};\n\nexport const workbenchProject = ${projectJson};\nexport const workbenchModules = [${workbenchList}].filter(Boolean);\nexport const playgroundModules = [${playgroundList}].filter(Boolean);\nexport default { workbenchProject, workbenchModules, playgroundModules };\n`;\n}\n\nfunction envValue(name: string): string | undefined {\n const value = process.env[name];\n return value && value.length > 0 ? value : undefined;\n}\n\nfunction addWatchFileIfExists(\n context: { addWatchFile(path: string): void },\n path: string,\n) {\n if (existsSync(path)) {\n context.addWatchFile(path);\n }\n}\n\nexport function smrtWorkbenchVitePlugin(\n options: SmrtWorkbenchVitePluginOptions = {},\n): Plugin {\n return {\n name: 'smrt-workbench-vite-plugin',\n enforce: 'pre',\n resolveId(id) {\n if (id === VIRTUAL_WORKBENCH_PROJECT_MODULE_ID) {\n return RESOLVED_VIRTUAL_WORKBENCH_PROJECT_MODULE_ID;\n }\n return null;\n },\n async load(id) {\n if (id !== RESOLVED_VIRTUAL_WORKBENCH_PROJECT_MODULE_ID) {\n return null;\n }\n\n const cwd =\n options.cwd || envValue('SMRT_WORKBENCH_CWD') || process.cwd();\n const projectRoot =\n options.projectRoot || envValue('SMRT_WORKBENCH_PROJECT_ROOT') || cwd;\n const packageName =\n options.packageName || envValue('SMRT_WORKBENCH_PACKAGE');\n const scope = resolveWorkbenchScope(cwd, {\n projectRoot,\n workspaceRoot: options.workspaceRoot,\n packageName,\n });\n const effectiveMode =\n options.mode === 'auto' || !options.mode\n ? detectWorkbenchMode(scope.projectRoot)\n : options.mode;\n const project = await buildWorkbenchProject(scope);\n const workbenchTargets = await discoverWorkbenchTargets(\n scope.projectRoot,\n effectiveMode,\n options.localWorkbenchPath || 'src/workbench.ts',\n scope.packageName,\n options.packagesPattern,\n );\n const playgroundTargetSpecifiers =\n effectiveMode === 'workspace'\n ? await discoverWorkspacePlaygroundSpecifiers(\n scope.projectRoot,\n scope.packageName,\n )\n : await discoverConsumerPlaygroundSpecifiers(\n scope.projectRoot,\n options.localPlaygroundPath || 'src/playground.ts',\n scope.packageName,\n );\n const workbenchSpecifiers = workbenchTargets\n .map(targetSpecifier)\n .filter((specifier): specifier is string => Boolean(specifier));\n const playgroundSpecifiers = playgroundTargetSpecifiers.map(\n (target) => target.specifier,\n );\n\n addWatchFileIfExists(this, resolve(scope.projectRoot, 'package.json'));\n addWatchFileIfExists(\n this,\n resolve(scope.projectRoot, 'pnpm-workspace.yaml'),\n );\n\n const workspaceRoot =\n options.workspaceRoot || findWorkspaceRoot(scope.projectRoot);\n if (workspaceRoot) {\n addWatchFileIfExists(\n this,\n resolve(workspaceRoot, 'pnpm-workspace.yaml'),\n );\n }\n\n for (const packageSummary of project.packages) {\n if (packageSummary.directory) {\n addWatchFileIfExists(\n this,\n resolve(packageSummary.directory, 'package.json'),\n );\n }\n }\n\n for (const specifier of [\n ...workbenchSpecifiers,\n ...playgroundSpecifiers,\n ]) {\n if (isAbsolute(specifier)) {\n this.addWatchFile(specifier);\n }\n }\n\n return buildVirtualModuleCode(\n JSON.stringify(project),\n workbenchSpecifiers,\n playgroundSpecifiers,\n );\n },\n };\n}\n\nexport { VIRTUAL_WORKBENCH_PROJECT_MODULE_ID };\n"],"mappings":"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"}
|
package/host/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# s-m-r-t Workbench Host
|
|
2
|
+
|
|
3
|
+
Private SvelteKit host bundled inside `@happyvertical/smrt-workbench`.
|
|
4
|
+
|
|
5
|
+
Run the public launcher from the s-m-r-t workspace or a consumer project:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
smrt workbench dev
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
The launcher binds to loopback by default. Remote binding requires the explicit
|
|
12
|
+
`--allow-remote` acknowledgement and should only be used on a trusted network.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "smrt-workbench-host",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "svelte-kit sync && vite dev",
|
|
8
|
+
"build": "svelte-kit sync && vite build",
|
|
9
|
+
"preview": "vite preview",
|
|
10
|
+
"test:e2e": "pnpm exec playwright test -c playwright.config.ts",
|
|
11
|
+
"test:e2e:headed": "pnpm exec playwright test -c playwright.config.ts --headed"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@happyvertical/smrt-workbench": "workspace:*",
|
|
15
|
+
"@sveltejs/adapter-static": "^3.0.10",
|
|
16
|
+
"@sveltejs/kit": "^2.69.1",
|
|
17
|
+
"@sveltejs/vite-plugin-svelte": "^7.1.2",
|
|
18
|
+
"svelte": "^5.56.4",
|
|
19
|
+
"vite": "^8.1.3"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
%sveltekit.head%
|
|
7
|
+
</head>
|
|
8
|
+
<body data-sveltekit-preload-data="hover">
|
|
9
|
+
<div style="display: contents">%sveltekit.body%</div>
|
|
10
|
+
</body>
|
|
11
|
+
</html>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { page } from '$app/state';
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<main class="workbench-error" data-testid="workbench-error">
|
|
6
|
+
<p>Workbench Error</p>
|
|
7
|
+
<h1>{page.status}</h1>
|
|
8
|
+
<pre>{page.error?.message ?? 'Unknown error'}</pre>
|
|
9
|
+
</main>
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
.workbench-error {
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
min-height: 100vh;
|
|
15
|
+
padding: 2rem;
|
|
16
|
+
font-family: system-ui, sans-serif;
|
|
17
|
+
background: #f5f7fb;
|
|
18
|
+
color: #121926;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
p {
|
|
22
|
+
margin: 0 0 0.5rem;
|
|
23
|
+
color: #5f6b7a;
|
|
24
|
+
font-size: 0.8rem;
|
|
25
|
+
font-weight: 700;
|
|
26
|
+
letter-spacing: 0.08em;
|
|
27
|
+
text-transform: uppercase;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
h1 {
|
|
31
|
+
margin: 0 0 1rem;
|
|
32
|
+
font-size: 2rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
pre {
|
|
36
|
+
max-width: 70rem;
|
|
37
|
+
overflow: auto;
|
|
38
|
+
padding: 1rem;
|
|
39
|
+
border: 1px solid #cfd7e3;
|
|
40
|
+
border-radius: 0.5rem;
|
|
41
|
+
background: #ffffff;
|
|
42
|
+
white-space: pre-wrap;
|
|
43
|
+
}
|
|
44
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import '@happyvertical/smrt-ui/themes/styles/fonts.css';
|
|
3
|
+
import { WorkbenchHost } from '@happyvertical/smrt-workbench/svelte';
|
|
4
|
+
import {
|
|
5
|
+
playgroundModules,
|
|
6
|
+
workbenchModules,
|
|
7
|
+
workbenchProject,
|
|
8
|
+
} from 'virtual:smrt-workbench/project';
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<WorkbenchHost
|
|
12
|
+
project={workbenchProject}
|
|
13
|
+
modules={workbenchModules}
|
|
14
|
+
{playgroundModules}
|
|
15
|
+
/>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import adapter from '@sveltejs/adapter-static';
|
|
2
|
+
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
|
3
|
+
|
|
4
|
+
/** @type {import('@sveltejs/kit').Config} */
|
|
5
|
+
const config = {
|
|
6
|
+
preprocess: vitePreprocess(),
|
|
7
|
+
kit: {
|
|
8
|
+
adapter: adapter({ strict: false }),
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default config;
|