@oddkin/workbench 0.0.0-stage → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +66 -2
- package/dist/app/card-previews.d.ts +14 -0
- package/dist/app/card-previews.d.ts.map +1 -0
- package/dist/app/card-previews.js +140 -0
- package/dist/app/card-previews.js.map +1 -0
- package/dist/app/copy.d.ts +48 -0
- package/dist/app/copy.d.ts.map +1 -0
- package/dist/app/copy.js +52 -0
- package/dist/app/copy.js.map +1 -0
- package/dist/app/define.d.ts +3 -0
- package/dist/app/define.d.ts.map +1 -0
- package/dist/app/define.js +10 -0
- package/dist/app/define.js.map +1 -0
- package/dist/app/details.d.ts +22 -0
- package/dist/app/details.d.ts.map +1 -0
- package/dist/app/details.js +17 -0
- package/dist/app/details.js.map +1 -0
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +9 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/routes.d.ts +26 -0
- package/dist/app/routes.d.ts.map +1 -0
- package/dist/app/routes.js +96 -0
- package/dist/app/routes.js.map +1 -0
- package/dist/app/search.d.ts +17 -0
- package/dist/app/search.d.ts.map +1 -0
- package/dist/app/search.js +52 -0
- package/dist/app/search.js.map +1 -0
- package/dist/app/shell.d.ts +29 -0
- package/dist/app/shell.d.ts.map +1 -0
- package/dist/app/shell.js +478 -0
- package/dist/app/shell.js.map +1 -0
- package/dist/app/styles.d.ts +2 -0
- package/dist/app/styles.d.ts.map +1 -0
- package/dist/app/styles.js +356 -0
- package/dist/app/styles.js.map +1 -0
- package/dist/app/theme-studio.d.ts +12 -0
- package/dist/app/theme-studio.d.ts.map +1 -0
- package/dist/app/theme-studio.js +14 -0
- package/dist/app/theme-studio.js.map +1 -0
- package/dist/app/views.d.ts +38 -0
- package/dist/app/views.d.ts.map +1 -0
- package/dist/app/views.js +252 -0
- package/dist/app/views.js.map +1 -0
- package/dist/config/index.d.ts +170 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +148 -0
- package/dist/config/index.js.map +1 -0
- package/dist/conformance/button.d.ts +2 -0
- package/dist/conformance/button.d.ts.map +1 -0
- package/dist/conformance/button.js +233 -0
- package/dist/conformance/button.js.map +1 -0
- package/dist/conformance/index.d.ts +107 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +60 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/data/build.d.ts +36 -0
- package/dist/data/build.d.ts.map +1 -0
- package/dist/data/build.js +260 -0
- package/dist/data/build.js.map +1 -0
- package/dist/data/import-map.d.ts +59 -0
- package/dist/data/import-map.d.ts.map +1 -0
- package/dist/data/import-map.js +195 -0
- package/dist/data/import-map.js.map +1 -0
- package/dist/data/index.d.ts +14 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/theme-studio.d.ts +21 -0
- package/dist/data/theme-studio.d.ts.map +1 -0
- package/dist/data/theme-studio.js +112 -0
- package/dist/data/theme-studio.js.map +1 -0
- package/dist/data/types.d.ts +187 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +4 -0
- package/dist/data/types.js.map +1 -0
- package/dist/examples/index.d.ts +101 -0
- package/dist/examples/index.d.ts.map +1 -0
- package/dist/examples/index.js +106 -0
- package/dist/examples/index.js.map +1 -0
- package/dist/frame/index.d.ts +9 -0
- package/dist/frame/index.d.ts.map +1 -0
- package/dist/frame/index.js +482 -0
- package/dist/frame/index.js.map +1 -0
- package/dist/internal/diagnostics.d.ts +17 -0
- package/dist/internal/diagnostics.d.ts.map +1 -0
- package/dist/internal/diagnostics.js +19 -0
- package/dist/internal/diagnostics.js.map +1 -0
- package/dist/node/bin.d.ts +3 -0
- package/dist/node/bin.d.ts.map +1 -0
- package/dist/node/bin.js +12 -0
- package/dist/node/bin.js.map +1 -0
- package/dist/node/cli.d.ts +17 -0
- package/dist/node/cli.d.ts.map +1 -0
- package/dist/node/cli.js +198 -0
- package/dist/node/cli.js.map +1 -0
- package/dist/node/config.d.ts +28 -0
- package/dist/node/config.d.ts.map +1 -0
- package/dist/node/config.js +80 -0
- package/dist/node/config.js.map +1 -0
- package/dist/node/example-modules.d.ts +8 -0
- package/dist/node/example-modules.d.ts.map +1 -0
- package/dist/node/example-modules.js +28 -0
- package/dist/node/example-modules.js.map +1 -0
- package/dist/node/generated.d.ts +19 -0
- package/dist/node/generated.d.ts.map +1 -0
- package/dist/node/generated.js +109 -0
- package/dist/node/generated.js.map +1 -0
- package/dist/node/html.d.ts +35 -0
- package/dist/node/html.d.ts.map +1 -0
- package/dist/node/html.js +51 -0
- package/dist/node/html.js.map +1 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +15 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/inputs.d.ts +26 -0
- package/dist/node/inputs.d.ts.map +1 -0
- package/dist/node/inputs.js +282 -0
- package/dist/node/inputs.js.map +1 -0
- package/dist/node/packages.d.ts +35 -0
- package/dist/node/packages.d.ts.map +1 -0
- package/dist/node/packages.js +87 -0
- package/dist/node/packages.js.map +1 -0
- package/dist/node/preload.d.ts +10 -0
- package/dist/node/preload.d.ts.map +1 -0
- package/dist/node/preload.js +61 -0
- package/dist/node/preload.js.map +1 -0
- package/dist/node/server.d.ts +42 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +410 -0
- package/dist/node/server.js.map +1 -0
- package/dist/node/static.d.ts +43 -0
- package/dist/node/static.d.ts.map +1 -0
- package/dist/node/static.js +157 -0
- package/dist/node/static.js.map +1 -0
- package/dist/node/workbench.d.ts +43 -0
- package/dist/node/workbench.d.ts.map +1 -0
- package/dist/node/workbench.js +204 -0
- package/dist/node/workbench.js.map +1 -0
- package/dist/pages/build.d.ts +22 -0
- package/dist/pages/build.d.ts.map +1 -0
- package/dist/pages/build.js +363 -0
- package/dist/pages/build.js.map +1 -0
- package/dist/pages/defaults.d.ts +16 -0
- package/dist/pages/defaults.d.ts.map +1 -0
- package/dist/pages/defaults.js +88 -0
- package/dist/pages/defaults.js.map +1 -0
- package/dist/pages/index.d.ts +14 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/pages/index.js +10 -0
- package/dist/pages/index.js.map +1 -0
- package/dist/pages/navigation.d.ts +48 -0
- package/dist/pages/navigation.d.ts.map +1 -0
- package/dist/pages/navigation.js +83 -0
- package/dist/pages/navigation.js.map +1 -0
- package/dist/pages/types.d.ts +148 -0
- package/dist/pages/types.d.ts.map +1 -0
- package/dist/pages/types.js +3 -0
- package/dist/pages/types.js.map +1 -0
- package/dist/panels/catalog-define.d.ts +3 -0
- package/dist/panels/catalog-define.d.ts.map +1 -0
- package/dist/panels/catalog-define.js +7 -0
- package/dist/panels/catalog-define.js.map +1 -0
- package/dist/panels/catalog-layout-styles.d.ts +2 -0
- package/dist/panels/catalog-layout-styles.d.ts.map +1 -0
- package/dist/panels/catalog-layout-styles.js +54 -0
- package/dist/panels/catalog-layout-styles.js.map +1 -0
- package/dist/panels/catalog-styles.d.ts +2 -0
- package/dist/panels/catalog-styles.d.ts.map +1 -0
- package/dist/panels/catalog-styles.js +106 -0
- package/dist/panels/catalog-styles.js.map +1 -0
- package/dist/panels/catalog.d.ts +37 -0
- package/dist/panels/catalog.d.ts.map +1 -0
- package/dist/panels/catalog.js +74 -0
- package/dist/panels/catalog.js.map +1 -0
- package/dist/panels/component-define.d.ts +3 -0
- package/dist/panels/component-define.d.ts.map +1 -0
- package/dist/panels/component-define.js +6 -0
- package/dist/panels/component-define.js.map +1 -0
- package/dist/panels/component-detail.d.ts +49 -0
- package/dist/panels/component-detail.d.ts.map +1 -0
- package/dist/panels/component-detail.js +1352 -0
- package/dist/panels/component-detail.js.map +1 -0
- package/dist/panels/component.d.ts +17 -0
- package/dist/panels/component.d.ts.map +1 -0
- package/dist/panels/component.js +10 -0
- package/dist/panels/component.js.map +1 -0
- package/dist/panels/example-styles.d.ts +2 -0
- package/dist/panels/example-styles.d.ts.map +1 -0
- package/dist/panels/example-styles.js +343 -0
- package/dist/panels/example-styles.js.map +1 -0
- package/dist/panels/foundation-define.d.ts +3 -0
- package/dist/panels/foundation-define.d.ts.map +1 -0
- package/dist/panels/foundation-define.js +6 -0
- package/dist/panels/foundation-define.js.map +1 -0
- package/dist/panels/foundation-detail.d.ts +23 -0
- package/dist/panels/foundation-detail.d.ts.map +1 -0
- package/dist/panels/foundation-detail.js +216 -0
- package/dist/panels/foundation-detail.js.map +1 -0
- package/dist/panels/foundation.d.ts +15 -0
- package/dist/panels/foundation.d.ts.map +1 -0
- package/dist/panels/foundation.js +9 -0
- package/dist/panels/foundation.js.map +1 -0
- package/dist/panels/model.d.ts +184 -0
- package/dist/panels/model.d.ts.map +1 -0
- package/dist/panels/model.js +488 -0
- package/dist/panels/model.js.map +1 -0
- package/dist/panels/styles.d.ts +3 -0
- package/dist/panels/styles.d.ts.map +1 -0
- package/dist/panels/styles.js +265 -0
- package/dist/panels/styles.js.map +1 -0
- package/dist/panels/theme-model.d.ts +69 -0
- package/dist/panels/theme-model.d.ts.map +1 -0
- package/dist/panels/theme-model.js +166 -0
- package/dist/panels/theme-model.js.map +1 -0
- package/dist/panels/theme-studio.d.ts +32 -0
- package/dist/panels/theme-studio.d.ts.map +1 -0
- package/dist/panels/theme-studio.js +375 -0
- package/dist/panels/theme-studio.js.map +1 -0
- package/dist/preview/frame.d.ts +44 -0
- package/dist/preview/frame.d.ts.map +1 -0
- package/dist/preview/frame.js +260 -0
- package/dist/preview/frame.js.map +1 -0
- package/dist/preview/index.d.ts +26 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +58 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/preview/theme-generation.d.ts +33 -0
- package/dist/preview/theme-generation.d.ts.map +1 -0
- package/dist/preview/theme-generation.js +48 -0
- package/dist/preview/theme-generation.js.map +1 -0
- package/dist/protocol/index.d.ts +222 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +272 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/testing/index.d.ts +47 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +145 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +118 -4
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `oddkin workbench build`: the dev server's URL layout written as files for a static host
|
|
3
|
+
* (workbench.md §2.1, §10). The output directory maps to `hosting.basePath`: the shell at its
|
|
4
|
+
* root, data and the frame document under `_oddkin/`, and each package's published browser files
|
|
5
|
+
* under `_oddkin/m/<name>@<version>/`, copied as published. In history mode every page path, and
|
|
6
|
+
* every legacy path, gets a copy of the shell, so deep links and refreshes load on any static
|
|
7
|
+
* host; `404.html` is the shell too, for hosts that serve it for unknown paths. Legacy paths
|
|
8
|
+
* redirect in the app, which keeps their query (`/playground?component=…`). Hash mode writes
|
|
9
|
+
* the shell once. No Node or analyzer backend is needed to serve the result.
|
|
10
|
+
*/
|
|
11
|
+
import { readdir } from 'node:fs/promises';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { DiagnosticList } from '../internal/diagnostics.js';
|
|
14
|
+
import { writeGenerated } from './generated.js';
|
|
15
|
+
import { readPackage } from './packages.js';
|
|
16
|
+
import { ASSET_DIR, buildWorkbench } from './workbench.js';
|
|
17
|
+
/**
|
|
18
|
+
* Package files a browser loads. Type declarations, sources, and documents stay behind, and so
|
|
19
|
+
* do source maps: only developer tools read them, and they name sources packages do not publish.
|
|
20
|
+
*/
|
|
21
|
+
const BROWSER_FILE = /\.(m?js|css|json|svg|png|jpe?g|gif|webp|avif|ico|woff2?|ttf|otf)$/i;
|
|
22
|
+
const GLOB = /[*?[\]{}!]/;
|
|
23
|
+
/** Regular files below `dir` as sorted POSIX paths; links, `node_modules`, and dot entries skipped. */
|
|
24
|
+
async function walk(dir, prefix = '') {
|
|
25
|
+
let entries;
|
|
26
|
+
try {
|
|
27
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const files = [];
|
|
33
|
+
for (const entry of entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))) {
|
|
34
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
35
|
+
continue;
|
|
36
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
37
|
+
if (entry.isDirectory())
|
|
38
|
+
files.push(...(await walk(join(dir, entry.name), rel)));
|
|
39
|
+
else if (entry.isFile())
|
|
40
|
+
files.push(rel);
|
|
41
|
+
}
|
|
42
|
+
return files;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A package's published browser files: what its `files` field names (as npm packs it), or, for
|
|
46
|
+
* a package installed without one, everything in it.
|
|
47
|
+
*/
|
|
48
|
+
async function publishedFiles(dir, manifest, name, out) {
|
|
49
|
+
const field = manifest.files;
|
|
50
|
+
const listed = Array.isArray(field)
|
|
51
|
+
? field.filter((f) => typeof f === 'string')
|
|
52
|
+
: undefined;
|
|
53
|
+
let files;
|
|
54
|
+
if (!listed || listed.some((entry) => GLOB.test(entry))) {
|
|
55
|
+
if (listed)
|
|
56
|
+
out.warn('node.build.filesPattern', `${name}: "files" uses patterns; every file in the package is considered.`, `/packages/${name}/files`);
|
|
57
|
+
files = await walk(dir);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const all = await walk(dir);
|
|
61
|
+
const roots = listed.map((entry) => entry.replace(/^\.\//, '').replace(/\/+$/, ''));
|
|
62
|
+
files = all.filter((file) => file === 'package.json' ||
|
|
63
|
+
roots.some((root) => file === root || file.startsWith(`${root}/`)));
|
|
64
|
+
}
|
|
65
|
+
return files.filter((file) => BROWSER_FILE.test(file));
|
|
66
|
+
}
|
|
67
|
+
/** Every path the shell's router answers in history mode (app/routes.ts `shellRoutes`). */
|
|
68
|
+
export function shellPaths(build) {
|
|
69
|
+
const registry = build.data?.index.registry;
|
|
70
|
+
if (!registry)
|
|
71
|
+
return [];
|
|
72
|
+
const paths = new Set();
|
|
73
|
+
for (const page of registry.pages) {
|
|
74
|
+
if (!page.visible)
|
|
75
|
+
continue;
|
|
76
|
+
paths.add(page.route);
|
|
77
|
+
for (const legacy of page.legacyRoutes ?? [])
|
|
78
|
+
paths.add(legacy);
|
|
79
|
+
}
|
|
80
|
+
if (!registry.pages.some((p) => p.id === 'products' && p.visible))
|
|
81
|
+
paths.add('/foundations/products');
|
|
82
|
+
return [...paths]
|
|
83
|
+
.map((path) => path.split('/').filter(Boolean).join('/'))
|
|
84
|
+
.filter(Boolean)
|
|
85
|
+
.sort();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The files below `_oddkin/` (relative to the base path): data, the frame document and import
|
|
89
|
+
* maps, Theme Studio's worker, and the packages' published browser files. A site that serves its
|
|
90
|
+
* own pages and embeds the panels (apps/docs) needs these and no shell.
|
|
91
|
+
*/
|
|
92
|
+
export async function embedFiles(build) {
|
|
93
|
+
const out = new DiagnosticList();
|
|
94
|
+
const files = new Map();
|
|
95
|
+
if (!build.config)
|
|
96
|
+
return { files, diagnostics: out.items };
|
|
97
|
+
for (const [path, content] of build.files)
|
|
98
|
+
files.set(`${ASSET_DIR}${path}`, content);
|
|
99
|
+
const packages = [...build.packages].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
100
|
+
for (const [versioned, dir] of packages) {
|
|
101
|
+
const name = versioned.slice(0, versioned.lastIndexOf('@'));
|
|
102
|
+
for (const file of await publishedFiles(dir, readPackage(dir).manifest, name, out))
|
|
103
|
+
files.set(`${ASSET_DIR}m/${versioned}/${file}`, { source: join(dir, ...file.split('/')) });
|
|
104
|
+
}
|
|
105
|
+
// Every browser file each document's import map names is in the output.
|
|
106
|
+
const base = build.config.hosting.basePath;
|
|
107
|
+
const prefix = `${base}${ASSET_DIR}`;
|
|
108
|
+
for (const name of ['shell.importmap.json', 'frame.importmap.json']) {
|
|
109
|
+
const map = JSON.parse(build.files.get(name) ?? '{"imports":{}}');
|
|
110
|
+
for (const [specifier, url] of Object.entries(map.imports)) {
|
|
111
|
+
if (!url.startsWith(prefix) || !BROWSER_FILE.test(url))
|
|
112
|
+
continue;
|
|
113
|
+
if (!files.has(url.slice(base.length)))
|
|
114
|
+
out.warn('node.build.unpublished', `"${specifier}" maps to ${url}, which is not among its package's published files; importing it fails.`, `/${name}/imports/${specifier}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { files, diagnostics: out.items };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Build the Workbench and write it as a static app. Writes nothing when the configuration or
|
|
121
|
+
* metadata has errors. The output directory carries the generated-directory marker, so a later
|
|
122
|
+
* build replaces it and an unmarked directory is refused (`GeneratedDirectoryError`).
|
|
123
|
+
*/
|
|
124
|
+
export async function buildStatic(options = {}) {
|
|
125
|
+
const build = await buildWorkbench({
|
|
126
|
+
...(options.config ? { config: options.config } : {}),
|
|
127
|
+
...(options.hosting ? { hosting: options.hosting } : {}),
|
|
128
|
+
});
|
|
129
|
+
const out = new DiagnosticList();
|
|
130
|
+
out.items.push(...build.diagnostics);
|
|
131
|
+
const nothing = { build, out: undefined, files: [], written: [], removed: [] };
|
|
132
|
+
if (!build.config || !build.data || !build.shell || out.items.some((d) => d.severity === 'error'))
|
|
133
|
+
return { ...nothing, diagnostics: out.items };
|
|
134
|
+
const files = new Map();
|
|
135
|
+
files.set('index.html', build.shell);
|
|
136
|
+
if (build.config.hosting.routing === 'history') {
|
|
137
|
+
for (const path of shellPaths(build))
|
|
138
|
+
files.set(`${path}/index.html`, build.shell);
|
|
139
|
+
files.set('404.html', build.shell);
|
|
140
|
+
}
|
|
141
|
+
const embedded = await embedFiles(build);
|
|
142
|
+
for (const [path, content] of embedded.files)
|
|
143
|
+
files.set(path, content);
|
|
144
|
+
out.items.push(...embedded.diagnostics);
|
|
145
|
+
const target = options.out ?? join(build.root, '.oddkin', 'workbench-build');
|
|
146
|
+
const sorted = new Map([...files].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
|
|
147
|
+
const { written, removed } = await writeGenerated(target, sorted);
|
|
148
|
+
return {
|
|
149
|
+
build,
|
|
150
|
+
out: target,
|
|
151
|
+
files: [...sorted.keys()],
|
|
152
|
+
written,
|
|
153
|
+
removed,
|
|
154
|
+
diagnostics: out.items,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=static.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/node/static.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ResolvedWorkbenchConfig, Routing } from '../config/index.js';
|
|
2
|
+
import { type ImportMap } from '../data/import-map.js';
|
|
3
|
+
import type { WorkbenchData } from '../data/types.js';
|
|
4
|
+
import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
5
|
+
import { type WorkbenchInputs } from './inputs.js';
|
|
6
|
+
/** This package's root (two levels above `dist/node/` and `src/node/`). */
|
|
7
|
+
export declare const WORKBENCH_DIR: string;
|
|
8
|
+
/** Everything the Workbench serves besides the shell lives below `<base>_oddkin/`. */
|
|
9
|
+
export declare const ASSET_DIR = "_oddkin/";
|
|
10
|
+
export interface WorkbenchBuild {
|
|
11
|
+
readonly root: string;
|
|
12
|
+
readonly configFile: string | undefined;
|
|
13
|
+
readonly config: ResolvedWorkbenchConfig | undefined;
|
|
14
|
+
readonly data: WorkbenchData | undefined;
|
|
15
|
+
readonly inputs: WorkbenchInputs | undefined;
|
|
16
|
+
/** Generated files below `<base>_oddkin/` by relative path: index, page data, import maps. */
|
|
17
|
+
readonly files: ReadonlyMap<string, string>;
|
|
18
|
+
/** `name@version` → directory for every package the shell or a frame may load. */
|
|
19
|
+
readonly packages: ReadonlyMap<string, string>;
|
|
20
|
+
/** Import map of preview frames: the documented packages and their dependencies. */
|
|
21
|
+
readonly frameImportMap: ImportMap | undefined;
|
|
22
|
+
/** The shell page; undefined without a valid configuration. */
|
|
23
|
+
readonly shell: string | undefined;
|
|
24
|
+
readonly diagnostics: readonly WorkbenchDiagnostic[];
|
|
25
|
+
}
|
|
26
|
+
export interface BuildOptions {
|
|
27
|
+
/** A configuration file or the directory holding it. Default: the working directory. */
|
|
28
|
+
readonly config?: string;
|
|
29
|
+
/** Point the shell at the live-update stream (dev server). */
|
|
30
|
+
readonly events?: boolean;
|
|
31
|
+
/** Replaces the configuration's `hosting` values. */
|
|
32
|
+
readonly hosting?: {
|
|
33
|
+
readonly basePath?: string;
|
|
34
|
+
readonly routing?: Routing;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Theme Studio's generation worker, next to the data files. */
|
|
38
|
+
export declare const THEME_WORKER = "theme-studio.worker.js";
|
|
39
|
+
/** Build everything the Workbench serves or writes for one configuration. Never throws for bad input. */
|
|
40
|
+
export declare function buildWorkbench(options?: BuildOptions): Promise<WorkbenchBuild>;
|
|
41
|
+
/** A diagnostic as one line: `error code /path: message`. */
|
|
42
|
+
export declare function formatDiagnostic(d: WorkbenchDiagnostic): string;
|
|
43
|
+
//# sourceMappingURL=workbench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench.d.ts","sourceRoot":"","sources":["../../src/node/workbench.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAIhG,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D,2EAA2E;AAC3E,eAAO,MAAM,aAAa,QAAoD,CAAC;AAG/E,sFAAsF;AACtF,eAAO,MAAM,SAAS,aAAa,CAAC;AAMpC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,oFAAoF;IACpF,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/C,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,YAAY;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/E;AAID,gEAAgE;AAChE,eAAO,MAAM,YAAY,2BAA2B,CAAC;AAkFrD,yGAAyG;AACzG,wBAAsB,cAAc,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CA2HxF;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAE/D"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One Workbench build from a configuration: the data files, the import maps of the shell and of
|
|
3
|
+
* preview frames, the packages they load, and the shell page (workbench.md §2.1). Used by
|
|
4
|
+
* `workbench dev` now and by `workbench build` (M7).
|
|
5
|
+
*/
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { buildWorkbenchData, pageFile, serializeData } from '../data/build.js';
|
|
8
|
+
import { createImportMap, packageRoot, resolveExport, } from '../data/import-map.js';
|
|
9
|
+
import { DiagnosticList, isObject } from '../internal/diagnostics.js';
|
|
10
|
+
import { loadWorkbenchConfig } from './config.js';
|
|
11
|
+
import { exampleModule, registrationsByTag } from './example-modules.js';
|
|
12
|
+
import { frameHtml, shellHtml } from './html.js';
|
|
13
|
+
import { loadInputs } from './inputs.js';
|
|
14
|
+
import { packageGraph, readPackage } from './packages.js';
|
|
15
|
+
import { preloadGraph } from './preload.js';
|
|
16
|
+
/** This package's root (two levels above `dist/node/` and `src/node/`). */
|
|
17
|
+
export const WORKBENCH_DIR = fileURLToPath(new URL('../../', import.meta.url));
|
|
18
|
+
/** Node-only dependencies of `@oddkin/workbench`: never part of the shell's module graph. */
|
|
19
|
+
const NODE_ONLY = ['@oddkin/analyzer'];
|
|
20
|
+
/** Everything the Workbench serves besides the shell lives below `<base>_oddkin/`. */
|
|
21
|
+
export const ASSET_DIR = '_oddkin/';
|
|
22
|
+
/** The shell's own stylesheet: the default theme's tokens. */
|
|
23
|
+
const SHELL_STYLES = { package: '@oddkin/tokens', export: './css/default.css' };
|
|
24
|
+
/** The shell page's arrangement classes (`.odd-cluster`, `.odd-grid`, ?; layout-recipes.md ?12). */
|
|
25
|
+
const SHELL_LAYOUT = { package: '@oddkin/components', export: './css/layout.css' };
|
|
26
|
+
const versioned = (pkg) => `${pkg.name}@${pkg.version}`;
|
|
27
|
+
/** Theme Studio's generation worker, next to the data files. */
|
|
28
|
+
export const THEME_WORKER = 'theme-studio.worker.js';
|
|
29
|
+
/**
|
|
30
|
+
* Workers have no import map, so the generator is imported by URL (its graph has no bare
|
|
31
|
+
* specifiers). Requests are `{ id, draft }`; replies carry plain data only (theming ?8).
|
|
32
|
+
*/
|
|
33
|
+
const themeWorker = (generator) => `import { generate } from ${JSON.stringify(generator)};
|
|
34
|
+
|
|
35
|
+
self.addEventListener('message', (event) => {
|
|
36
|
+
const { id, draft } = event.data;
|
|
37
|
+
const start = performance.now();
|
|
38
|
+
try {
|
|
39
|
+
const result = generate(draft);
|
|
40
|
+
self.postMessage({ id, ok: result.ok, css: result.css, diagnostics: result.diagnostics, ms: performance.now() - start });
|
|
41
|
+
} catch (error) {
|
|
42
|
+
self.postMessage({ id, ok: false, diagnostics: [{ severity: 'error', code: 'generate.failed', path: '', message: String(error) }], ms: performance.now() - start });
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
`;
|
|
46
|
+
/** The manifest fields import maps read, under the name importers use. */
|
|
47
|
+
const manifests = (graph) => graph.map((pkg) => ({ ...pkg.manifest, name: pkg.name, version: pkg.version }));
|
|
48
|
+
const FONT = /\.(woff2?|ttf|otf)$/i;
|
|
49
|
+
/**
|
|
50
|
+
* Preview-frame assets (`assets` in the configuration): package export specifiers such as
|
|
51
|
+
* `@oddkin/tokens/css/default.css`, resolved through the package's `exports` to its versioned
|
|
52
|
+
* URL. Stylesheets are linked and fonts preloaded. Without configured assets, frames load the
|
|
53
|
+
* default token stylesheet when the frame graph has it.
|
|
54
|
+
*/
|
|
55
|
+
function frameAssets(config, graph, documented, base, out) {
|
|
56
|
+
const stylesheets = [];
|
|
57
|
+
const fonts = [];
|
|
58
|
+
const specifiers = config.assets.length
|
|
59
|
+
? config.assets
|
|
60
|
+
: documented.some((pkg) => pkg.name === SHELL_STYLES.package)
|
|
61
|
+
? [`${SHELL_STYLES.package}${SHELL_STYLES.export.slice(1)}`]
|
|
62
|
+
: [];
|
|
63
|
+
config.assets.forEach((specifier, i) => {
|
|
64
|
+
if (/^(\.{0,2}\/|[a-z]+:)/i.test(specifier))
|
|
65
|
+
out.warn('node.assets.unsupported', `Asset "${specifier}" is a path or URL; frames load package export specifiers (for example "@scope/pkg/theme.css") for now.`, `/assets/${i}`);
|
|
66
|
+
});
|
|
67
|
+
for (const specifier of specifiers) {
|
|
68
|
+
if (/^(\.{0,2}\/|[a-z]+:)/i.test(specifier))
|
|
69
|
+
continue;
|
|
70
|
+
const parts = specifier.split('/');
|
|
71
|
+
const name = specifier.startsWith('@') ? parts.slice(0, 2).join('/') : parts[0];
|
|
72
|
+
const subpath = `.${specifier.slice(name.length)}`;
|
|
73
|
+
const pkg = graph.find((p) => p.name === name);
|
|
74
|
+
const path = pkg ? resolveExport(pkg.manifest, subpath) : undefined;
|
|
75
|
+
const index = config.assets.indexOf(specifier);
|
|
76
|
+
if (!pkg || !path) {
|
|
77
|
+
out.warn('node.assets.unresolved', `Asset "${specifier}" does not resolve: ${pkg ? `${name} does not export "${subpath}"` : `${name} is not a documented package or one of their dependencies`}.`, index >= 0 ? `/assets/${index}` : '/assets');
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const url = `${packageRoot({ ...pkg.manifest, name: pkg.name, version: pkg.version }, { base, versioned: true })}${path.slice(2)}`;
|
|
81
|
+
if (FONT.test(path))
|
|
82
|
+
fonts.push(url);
|
|
83
|
+
else if (/\.css$/i.test(path))
|
|
84
|
+
stylesheets.push(url);
|
|
85
|
+
else
|
|
86
|
+
out.warn('node.assets.kind', `Asset "${specifier}" is neither a stylesheet nor a font; frames load only those.`, index >= 0 ? `/assets/${index}` : '/assets');
|
|
87
|
+
}
|
|
88
|
+
return { stylesheets, fonts };
|
|
89
|
+
}
|
|
90
|
+
/** Build everything the Workbench serves or writes for one configuration. Never throws for bad input. */
|
|
91
|
+
export async function buildWorkbench(options = {}) {
|
|
92
|
+
const loaded = await loadWorkbenchConfig(options.config, options.hosting);
|
|
93
|
+
const empty = {
|
|
94
|
+
root: loaded.root,
|
|
95
|
+
configFile: loaded.file,
|
|
96
|
+
data: undefined,
|
|
97
|
+
inputs: undefined,
|
|
98
|
+
files: new Map(),
|
|
99
|
+
packages: new Map(),
|
|
100
|
+
frameImportMap: undefined,
|
|
101
|
+
shell: undefined,
|
|
102
|
+
};
|
|
103
|
+
const config = loaded.config;
|
|
104
|
+
if (!config)
|
|
105
|
+
return { ...empty, config, diagnostics: loaded.diagnostics };
|
|
106
|
+
const out = new DiagnosticList();
|
|
107
|
+
const inputs = await loadInputs(loaded.root, config, out);
|
|
108
|
+
const base = `${config.hosting.basePath}${ASSET_DIR}m/`;
|
|
109
|
+
const self = readPackage(WORKBENCH_DIR, '@oddkin/workbench');
|
|
110
|
+
const graphs = new DiagnosticList();
|
|
111
|
+
const shellGraph = packageGraph([self], WORKBENCH_DIR, graphs, { skip: NODE_ONLY });
|
|
112
|
+
const shell = createImportMap(manifests(shellGraph), { base, versioned: true });
|
|
113
|
+
const frame = createImportMap(manifests([...inputs.graph, ...shellGraph]), {
|
|
114
|
+
base,
|
|
115
|
+
versioned: true,
|
|
116
|
+
});
|
|
117
|
+
// Theme Studio generates with the documented library's own generator, in a Worker.
|
|
118
|
+
const generator = frame.importMap.imports['@oddkin/tokens/generate'];
|
|
119
|
+
const worker = generator ? `${config.hosting.basePath}${ASSET_DIR}${THEME_WORKER}` : undefined;
|
|
120
|
+
const { data, diagnostics } = buildWorkbenchData({
|
|
121
|
+
config,
|
|
122
|
+
libraries: inputs.libraries,
|
|
123
|
+
...(inputs.docs ? { docs: inputs.docs } : {}),
|
|
124
|
+
...(inputs.tokens ? { tokens: inputs.tokens } : {}),
|
|
125
|
+
theme: { ...inputs.theme, ...(worker ? { worker } : {}) },
|
|
126
|
+
diagnostics: out.items,
|
|
127
|
+
});
|
|
128
|
+
const result = new DiagnosticList();
|
|
129
|
+
result.items.push(...diagnostics, ...graphs.items, ...shell.diagnostics, ...frame.diagnostics);
|
|
130
|
+
if (!data)
|
|
131
|
+
return { ...empty, config, inputs, diagnostics: result.items };
|
|
132
|
+
const packages = new Map();
|
|
133
|
+
for (const pkg of [...shellGraph, ...inputs.graph])
|
|
134
|
+
if (!packages.has(versioned(pkg)))
|
|
135
|
+
packages.set(versioned(pkg), pkg.dir);
|
|
136
|
+
const assets = `${config.hosting.basePath}${ASSET_DIR}`;
|
|
137
|
+
const roots = new Map([...packages].map(([name, dir]) => [`${base}${name}/`, dir]));
|
|
138
|
+
const files = new Map([['index.json', serializeData(data.index)]]);
|
|
139
|
+
// Frames run an example's fixture from its example module, which ships beside the page data.
|
|
140
|
+
const registrations = registrationsByTag(inputs.libraries);
|
|
141
|
+
const pages = { ...data.pages };
|
|
142
|
+
for (const [id, page] of Object.entries(pages)) {
|
|
143
|
+
const file = page.kind === 'component' ? inputs.exampleFiles.get(page.tag) : undefined;
|
|
144
|
+
if (page.kind !== 'component' ||
|
|
145
|
+
!file ||
|
|
146
|
+
!page.examples.some((example) => {
|
|
147
|
+
const definition = example['definition'];
|
|
148
|
+
return isObject(definition) && definition['hasFixture'] === true;
|
|
149
|
+
}))
|
|
150
|
+
continue;
|
|
151
|
+
try {
|
|
152
|
+
files.set(`examples/${page.tag}.js`, await exampleModule(file, registrations));
|
|
153
|
+
pages[id] = { ...page, exampleModule: `${assets}examples/${page.tag}.js` };
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
result.warn('node.examples.module', `${file}: ${error instanceof Error ? error.message : String(error)}; its fixtures do not run in previews.`, `/pages/${id}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
for (const [id, page] of Object.entries(pages))
|
|
160
|
+
files.set(pageFile(id), serializeData(page));
|
|
161
|
+
if (generator)
|
|
162
|
+
files.set(THEME_WORKER, themeWorker(generator));
|
|
163
|
+
files.set('frame.importmap.json', `${JSON.stringify(frame.importMap, null, 2)}\n`);
|
|
164
|
+
files.set('shell.importmap.json', `${JSON.stringify(shell.importMap, null, 2)}\n`);
|
|
165
|
+
const assetsForFrames = frameAssets(config, [...inputs.graph, ...shellGraph], inputs.graph, base, result);
|
|
166
|
+
files.set('frame.html', frameHtml({
|
|
167
|
+
title: `${data.index.branding.name} preview`,
|
|
168
|
+
importMap: frame.importMap,
|
|
169
|
+
module: '@oddkin/workbench/frame',
|
|
170
|
+
preload: preloadGraph(frame.importMap, '@oddkin/workbench/frame', roots),
|
|
171
|
+
...assetsForFrames,
|
|
172
|
+
}));
|
|
173
|
+
const shellStylesheets = [SHELL_STYLES, SHELL_LAYOUT].flatMap(({ package: name, export: path }) => {
|
|
174
|
+
const pkg = shellGraph.find((entry) => entry.name === name);
|
|
175
|
+
const file = pkg && resolveExport(pkg.manifest, path);
|
|
176
|
+
return pkg && file ? [`${packageRoot(pkg, { base, versioned: true })}${file.slice(2)}`] : [];
|
|
177
|
+
});
|
|
178
|
+
return {
|
|
179
|
+
root: loaded.root,
|
|
180
|
+
configFile: loaded.file,
|
|
181
|
+
config,
|
|
182
|
+
data: { ...data, pages },
|
|
183
|
+
inputs,
|
|
184
|
+
files,
|
|
185
|
+
packages,
|
|
186
|
+
frameImportMap: frame.importMap,
|
|
187
|
+
shell: shellHtml({
|
|
188
|
+
title: data.index.branding.name,
|
|
189
|
+
...(config.content.defaultLocale ? { lang: config.content.defaultLocale } : {}),
|
|
190
|
+
importMap: shell.importMap,
|
|
191
|
+
stylesheets: shellStylesheets,
|
|
192
|
+
index: `${assets}index.json`,
|
|
193
|
+
...(options.events ? { events: `${assets}events` } : {}),
|
|
194
|
+
module: '@oddkin/workbench/app/define',
|
|
195
|
+
preload: preloadGraph(shell.importMap, '@oddkin/workbench/app/define', roots),
|
|
196
|
+
}),
|
|
197
|
+
diagnostics: result.items,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** A diagnostic as one line: `error code /path: message`. */
|
|
201
|
+
export function formatDiagnostic(d) {
|
|
202
|
+
return `${d.severity} ${d.code}${d.path ? ` ${d.path}` : ''}: ${d.message}`;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=workbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench.js","sourceRoot":"","sources":["../../src/node/workbench.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the page registry from standard CEM, optional Oddkin enrichment, authored content, and
|
|
3
|
+
* configuration. Pure and deterministic; no build time enters the output.
|
|
4
|
+
*/
|
|
5
|
+
import { type DocsContent, type ResolvedWorkbenchConfig, type WorkbenchConfig } from '../config/index.js';
|
|
6
|
+
import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
7
|
+
import { type CemPackage, type OddkinMetadataLike, type PageRegistry } from './types.js';
|
|
8
|
+
export interface RegistryInput {
|
|
9
|
+
readonly config: WorkbenchConfig | ResolvedWorkbenchConfig;
|
|
10
|
+
/** Standard Custom Elements Manifest(s). Enough for the Components baseline. */
|
|
11
|
+
readonly cem?: CemPackage | readonly CemPackage[];
|
|
12
|
+
/** `oddkin.metadata.json` enrichment (foundations, categories, examples, products, docs). */
|
|
13
|
+
readonly metadata?: OddkinMetadataLike;
|
|
14
|
+
/** Authored content (`oddkin.docs.ts` / Markdown front matter). */
|
|
15
|
+
readonly docs?: DocsContent;
|
|
16
|
+
}
|
|
17
|
+
/** Build the registry. `registry` is undefined only when the configuration is invalid. */
|
|
18
|
+
export declare function buildPageRegistry(input: RegistryInput): {
|
|
19
|
+
registry: PageRegistry | undefined;
|
|
20
|
+
diagnostics: WorkbenchDiagnostic[];
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/pages/build.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,kBAAkB,EAGvB,KAAK,YAAY,EAElB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,uBAAuB,CAAC;IAC3D,gFAAgF;IAChF,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,CAAC;IAClD,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;CAC7B;AA0DD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG;IACvD,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC,CAgRA"}
|