@design.estate/wcctools 5.1.0 → 6.0.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.
Files changed (128) hide show
  1. package/.smartconfig.json +7 -3
  2. package/changelog.md +15 -0
  3. package/cli.js +3 -0
  4. package/dist_shell/bundle.js +2970 -0
  5. package/dist_shell/bundle.js.map +1 -0
  6. package/dist_shell/bundle.js.third-party-notices.json +1722 -0
  7. package/dist_shell/bundle.js.third-party-notices.txt +4195 -0
  8. package/dist_shell/index.html +21 -0
  9. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  10. package/dist_ts/00_commitinfo_data.js +9 -0
  11. package/dist_ts/classes.devapi.d.ts +11 -0
  12. package/dist_ts/classes.devapi.js +21 -0
  13. package/dist_ts/classes.devserver.d.ts +49 -0
  14. package/dist_ts/classes.devserver.js +142 -0
  15. package/dist_ts/cli.d.ts +6 -0
  16. package/dist_ts/cli.js +45 -0
  17. package/dist_ts/index.d.ts +3 -0
  18. package/dist_ts/index.js +4 -0
  19. package/dist_ts/paths.d.ts +4 -0
  20. package/dist_ts/paths.js +6 -0
  21. package/dist_ts/plugins.d.ts +15 -0
  22. package/dist_ts/plugins.js +21 -0
  23. package/dist_ts/shellcontent.d.ts +9 -0
  24. package/dist_ts/shellcontent.js +42 -0
  25. package/dist_ts_interfaces/bridge.d.ts +88 -0
  26. package/dist_ts_interfaces/bridge.js +2 -0
  27. package/dist_ts_interfaces/catalog.d.ts +32 -0
  28. package/dist_ts_interfaces/catalog.js +6 -0
  29. package/dist_ts_interfaces/index.d.ts +3 -0
  30. package/dist_ts_interfaces/index.js +4 -0
  31. package/dist_ts_interfaces/plugins.d.ts +2 -0
  32. package/dist_ts_interfaces/plugins.js +3 -0
  33. package/dist_ts_interfaces/requests.d.ts +15 -0
  34. package/dist_ts_interfaces/requests.js +2 -0
  35. package/dist_ts_shared/index.d.ts +1 -0
  36. package/dist_ts_shared/index.js +2 -0
  37. package/dist_ts_shared/plugins.d.ts +2 -0
  38. package/dist_ts_shared/plugins.js +3 -0
  39. package/dist_ts_shared/previewroute.d.ts +18 -0
  40. package/dist_ts_shared/previewroute.js +47 -0
  41. package/{dist_ts_web → dist_ts_shell}/elements/wcc-contextmenu.js +1 -1
  42. package/dist_ts_shell/elements/wcc-preview-frame.d.ts +23 -0
  43. package/dist_ts_shell/elements/wcc-preview-frame.js +197 -0
  44. package/dist_ts_shell/elements/wcc-properties.d.ts +49 -0
  45. package/{dist_ts_web → dist_ts_shell}/elements/wcc-properties.js +149 -216
  46. package/{dist_ts_web → dist_ts_shell}/elements/wcc-record-button.js +1 -1
  47. package/{dist_ts_web → dist_ts_shell}/elements/wcc-recording-panel.d.ts +2 -2
  48. package/{dist_ts_web → dist_ts_shell}/elements/wcc-recording-panel.js +12 -16
  49. package/dist_ts_shell/elements/wcc-shell.d.ts +87 -0
  50. package/dist_ts_shell/elements/wcc-shell.js +524 -0
  51. package/{dist_ts_web → dist_ts_shell}/elements/wcc-sidebar.d.ts +12 -10
  52. package/{dist_ts_web → dist_ts_shell}/elements/wcc-sidebar.js +137 -183
  53. package/dist_ts_shell/index.d.ts +4 -0
  54. package/dist_ts_shell/index.js +5 -0
  55. package/dist_ts_shell/plugins.d.ts +4 -0
  56. package/dist_ts_shell/plugins.js +5 -0
  57. package/dist_ts_shell/previewconnection.d.ts +30 -0
  58. package/dist_ts_shell/previewconnection.js +86 -0
  59. package/dist_ts_shell/services/recorder.service.js +353 -0
  60. package/dist_ts_web/00_commitinfo_data.js +2 -2
  61. package/dist_ts_web/catalog.d.ts +45 -0
  62. package/dist_ts_web/catalog.js +153 -0
  63. package/dist_ts_web/elementproperties.d.ts +15 -0
  64. package/dist_ts_web/elementproperties.js +89 -0
  65. package/dist_ts_web/elements/wcc-preview.d.ts +19 -0
  66. package/dist_ts_web/elements/wcc-preview.js +164 -0
  67. package/dist_ts_web/elements/wcc-standalone-notice.d.ts +14 -0
  68. package/dist_ts_web/elements/wcc-standalone-notice.js +110 -0
  69. package/dist_ts_web/elements/wcctools.helpers.d.ts +2 -6
  70. package/dist_ts_web/elements/wcctools.helpers.js +1 -7
  71. package/dist_ts_web/index.d.ts +2 -5
  72. package/dist_ts_web/index.js +38 -17
  73. package/dist_ts_web/previewbridge.d.ts +39 -0
  74. package/dist_ts_web/previewbridge.js +153 -0
  75. package/dist_ts_web/renderedtree.d.ts +5 -0
  76. package/dist_ts_web/renderedtree.js +37 -0
  77. package/dist_ts_web/wcctools.interfaces.d.ts +3 -6
  78. package/dist_ts_web/wcctools.interfaces.js +1 -1
  79. package/dist_ts_web/wcctools.plugins.d.ts +3 -1
  80. package/dist_ts_web/wcctools.plugins.js +4 -2
  81. package/package.json +16 -8
  82. package/readme.md +60 -28
  83. package/ts/00_commitinfo_data.ts +8 -0
  84. package/ts/classes.devapi.ts +25 -0
  85. package/ts/classes.devserver.ts +161 -0
  86. package/ts/cli.ts +46 -0
  87. package/ts/index.ts +3 -0
  88. package/ts/paths.ts +7 -0
  89. package/ts/plugins.ts +29 -0
  90. package/ts/shellcontent.ts +42 -0
  91. package/ts_web/00_commitinfo_data.ts +1 -1
  92. package/ts_web/catalog.ts +194 -0
  93. package/ts_web/elementproperties.ts +96 -0
  94. package/ts_web/elements/wcc-preview.ts +111 -0
  95. package/ts_web/elements/wcc-standalone-notice.ts +65 -0
  96. package/ts_web/elements/wcctools.helpers.ts +2 -10
  97. package/ts_web/index.ts +38 -19
  98. package/ts_web/previewbridge.ts +189 -0
  99. package/ts_web/readme.md +26 -85
  100. package/ts_web/renderedtree.ts +43 -0
  101. package/ts_web/wcctools.interfaces.ts +4 -7
  102. package/ts_web/wcctools.plugins.ts +6 -1
  103. package/dist_bundle/bundle.js +0 -92419
  104. package/dist_bundle/bundle.js.map +0 -1
  105. package/dist_ts_web/elements/wcc-dashboard.d.ts +0 -119
  106. package/dist_ts_web/elements/wcc-dashboard.js +0 -700
  107. package/dist_ts_web/elements/wcc-frame.d.ts +0 -22
  108. package/dist_ts_web/elements/wcc-frame.js +0 -256
  109. package/dist_ts_web/elements/wcc-properties.d.ts +0 -43
  110. package/dist_ts_web/pages/index.d.ts +0 -1
  111. package/dist_ts_web/pages/index.js +0 -2
  112. package/dist_ts_web/services/recorder.service.js +0 -353
  113. package/ts_web/elements/wcc-contextmenu.ts +0 -291
  114. package/ts_web/elements/wcc-dashboard.ts +0 -672
  115. package/ts_web/elements/wcc-frame.ts +0 -189
  116. package/ts_web/elements/wcc-properties.ts +0 -1089
  117. package/ts_web/elements/wcc-record-button.ts +0 -108
  118. package/ts_web/elements/wcc-recording-panel.ts +0 -1010
  119. package/ts_web/elements/wcc-sidebar.ts +0 -1470
  120. package/ts_web/pages/index.ts +0 -1
  121. package/ts_web/services/recorder.service.ts +0 -451
  122. package/ts_web/types/dom-mediacapture-stub/index.d.ts +0 -12
  123. package/ts_web/types/dom-mediacapture-stub/package.json +0 -6
  124. package/ts_web/types/dom-webcodecs-stub/index.d.ts +0 -2
  125. package/ts_web/types/dom-webcodecs-stub/package.json +0 -6
  126. /package/{dist_ts_web → dist_ts_shell}/elements/wcc-contextmenu.d.ts +0 -0
  127. /package/{dist_ts_web → dist_ts_shell}/elements/wcc-record-button.d.ts +0 -0
  128. /package/{dist_ts_web → dist_ts_shell}/services/recorder.service.d.ts +0 -0
@@ -0,0 +1,21 @@
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
+ <title>wcctools</title>
7
+ <link rel="icon" href="data:," />
8
+ <link rel="preconnect" href="https://assetbroker.lossless.one/" crossorigin>
9
+ <link rel="stylesheet" href="https://assetbroker.lossless.one/fonts/fonts.css">
10
+ <style>
11
+ body {
12
+ margin: 0px;
13
+ background: #0a0a0a;
14
+ }
15
+ </style>
16
+ <script type="module" src="/wcctools/bundle.js"></script>
17
+ </head>
18
+ <body>
19
+ <wcc-shell preview-path="/wcctools-preview"></wcc-shell>
20
+ </body>
21
+ </html>
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
+ */
4
+ export const commitinfo = {
5
+ name: '@design.estate/wcctools',
6
+ version: '6.0.0',
7
+ description: 'A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.'
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLG1KQUFtSjtDQUNqSyxDQUFBIn0=
@@ -0,0 +1,11 @@
1
+ import * as plugins from './plugins.js';
2
+ /**
3
+ * The typed API the shell reaches on `/wcctools/typedrequest`. Later features register their
4
+ * handlers on `typedrouter`.
5
+ */
6
+ export declare class WccDevApi {
7
+ readonly typedrouter: plugins.typedrequest.TypedRouter<import("@api.global/typedrequest-interfaces").ITypedRequest>;
8
+ private serverInfo;
9
+ constructor();
10
+ setServerInfo(infoArg: plugins.interfaces.IWccDevServerInfo): void;
11
+ }
@@ -0,0 +1,21 @@
1
+ import * as plugins from './plugins.js';
2
+ /**
3
+ * The typed API the shell reaches on `/wcctools/typedrequest`. Later features register their
4
+ * handlers on `typedrouter`.
5
+ */
6
+ export class WccDevApi {
7
+ typedrouter = new plugins.typedrequest.TypedRouter();
8
+ serverInfo = null;
9
+ constructor() {
10
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getDevServerInfo', async () => {
11
+ if (!this.serverInfo) {
12
+ throw new Error('The dev server has not started.');
13
+ }
14
+ return { ...this.serverInfo };
15
+ }));
16
+ }
17
+ setServerInfo(infoArg) {
18
+ this.serverInfo = { ...infoArg };
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kZXZhcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jbGFzc2VzLmRldmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNKLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0QsVUFBVSxHQUFnRCxJQUFJLENBQUM7SUFFdkU7UUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBMkMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0csSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBNkM7UUFDaEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDbkMsQ0FBQztDQUNGIn0=
@@ -0,0 +1,49 @@
1
+ import { WccDevApi } from './classes.devapi.js';
2
+ export interface IWccDevServerOptions {
3
+ /** Port to listen on; overrides the tswatch configuration. 0 picks a free port. */
4
+ port?: number;
5
+ }
6
+ export interface IWccDevServerAddress {
7
+ port: number;
8
+ /** The shell's address. */
9
+ url: string;
10
+ }
11
+ /**
12
+ * `wcctools dev`: bundles the catalog of the current project with tswatch, as its
13
+ * `@git.zone/tswatch` configuration (or the `element` preset) describes, and serves on one port:
14
+ *
15
+ * - the shell on `/wcctools/` (`/` redirects there) and its routes `/wcctools-route/...`,
16
+ * - the typed API on `/wcctools/typedrequest`,
17
+ * - the catalog's preview document and bundle from the tswatch serve directory on every other
18
+ * path, with live reload that reloads only the preview document.
19
+ *
20
+ * tswatch resolves its paths against the process's working directory, so the server serves the
21
+ * project the process runs in.
22
+ */
23
+ export declare class WccDevServer {
24
+ private readonly options;
25
+ /** The typed API on `/wcctools/typedrequest`; register further handlers before `start()`. */
26
+ readonly api: WccDevApi;
27
+ private tsWatch;
28
+ private typedServer;
29
+ private readonly smartExit;
30
+ constructor(options?: IWccDevServerOptions);
31
+ start(): Promise<IWccDevServerAddress>;
32
+ /** Stops the server, then tswatch's bundling and watching. */
33
+ stop(): Promise<void>;
34
+ /**
35
+ * The shell: the prebuilt shell bundle and the typed API.
36
+ *
37
+ * Seam for side-effecting APIs (assistant, capture, standards fixes): before any handler with
38
+ * side effects is registered here, add a `websocketAdmission`/`requestAdmission` that accepts
39
+ * only the shell's own origin, and keep surface mode's strict authority validation.
40
+ */
41
+ private createShellSurface;
42
+ /**
43
+ * The preview: the catalog's own document and bundle from the tswatch serve directory, on
44
+ * the root paths it was written for. Its live reload client is injected into its document
45
+ * only, so a rebuilt bundle reloads the preview frame and never the shell.
46
+ */
47
+ private createPreviewSurface;
48
+ private readProjectName;
49
+ }
@@ -0,0 +1,142 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+ import { commitinfo } from './00_commitinfo_data.js';
4
+ import { WccDevApi } from './classes.devapi.js';
5
+ import { loadShellContent, shellPathPrefix } from './shellcontent.js';
6
+ /** tswatch's default port and serve directory, used when the configuration names none. */
7
+ const defaultPort = 3002;
8
+ const defaultServeDir = './dist_watch/';
9
+ /** The development headers tswatch serves catalogs with: a cross-origin isolated document. */
10
+ const securityHeaders = {
11
+ crossOriginOpenerPolicy: 'same-origin',
12
+ crossOriginEmbedderPolicy: 'require-corp',
13
+ };
14
+ const acceptAnyHostname = () => true;
15
+ /**
16
+ * `wcctools dev`: bundles the catalog of the current project with tswatch, as its
17
+ * `@git.zone/tswatch` configuration (or the `element` preset) describes, and serves on one port:
18
+ *
19
+ * - the shell on `/wcctools/` (`/` redirects there) and its routes `/wcctools-route/...`,
20
+ * - the typed API on `/wcctools/typedrequest`,
21
+ * - the catalog's preview document and bundle from the tswatch serve directory on every other
22
+ * path, with live reload that reloads only the preview document.
23
+ *
24
+ * tswatch resolves its paths against the process's working directory, so the server serves the
25
+ * project the process runs in.
26
+ */
27
+ export class WccDevServer {
28
+ options;
29
+ /** The typed API on `/wcctools/typedrequest`; register further handlers before `start()`. */
30
+ api = new WccDevApi();
31
+ tsWatch = null;
32
+ typedServer = null;
33
+ smartExit = new plugins.smartexit.SmartExit({ silent: true });
34
+ constructor(options = {}) {
35
+ this.options = options;
36
+ this.smartExit.addCleanupFunction(() => this.stop());
37
+ }
38
+ async start() {
39
+ if (this.typedServer) {
40
+ throw new Error('wcctools: the dev server is already started.');
41
+ }
42
+ const cwd = process.cwd();
43
+ const configHandler = new plugins.tswatch.ConfigHandler(cwd);
44
+ const config = configHandler.loadConfig() ?? configHandler.getPreset('element');
45
+ const serveDir = plugins.path.resolve(cwd, config.server?.serveDir ?? defaultServeDir);
46
+ const port = this.options.port ?? config.server?.port ?? defaultPort;
47
+ // The preview surface watches the serve directory, which must exist before the first bundle
48
+ await plugins.fs.mkdir(serveDir, { recursive: true });
49
+ this.api.setServerInfo({
50
+ wcctoolsVersion: commitinfo.version,
51
+ projectName: await this.readProjectName(cwd),
52
+ });
53
+ const typedServer = new plugins.typedserver.TypedServer({
54
+ cors: false,
55
+ port,
56
+ surfaces: [
57
+ await this.createShellSurface(),
58
+ this.createPreviewSurface(serveDir),
59
+ ],
60
+ });
61
+ this.typedServer = typedServer;
62
+ // Bundling and watching stay tswatch's; its own server stays off
63
+ this.tsWatch = new plugins.tswatch.TsWatch({ ...config, server: { enabled: false } });
64
+ try {
65
+ await this.tsWatch.start();
66
+ await typedServer.start();
67
+ }
68
+ catch (error) {
69
+ await this.stop();
70
+ throw error;
71
+ }
72
+ const boundPort = typedServer.listeningPort ?? port;
73
+ return { port: boundPort, url: `http://localhost:${boundPort}${shellPathPrefix}/` };
74
+ }
75
+ /** Stops the server, then tswatch's bundling and watching. */
76
+ async stop() {
77
+ const typedServer = this.typedServer;
78
+ const tsWatch = this.tsWatch;
79
+ this.typedServer = null;
80
+ this.tsWatch = null;
81
+ this.smartExit.deregister();
82
+ await typedServer?.stop();
83
+ await tsWatch?.stop();
84
+ }
85
+ /**
86
+ * The shell: the prebuilt shell bundle and the typed API.
87
+ *
88
+ * Seam for side-effecting APIs (assistant, capture, standards fixes): before any handler with
89
+ * side effects is registered here, add a `websocketAdmission`/`requestAdmission` that accepts
90
+ * only the shell's own origin, and keep surface mode's strict authority validation.
91
+ */
92
+ async createShellSurface() {
93
+ return {
94
+ name: 'shell',
95
+ match: {
96
+ hostnameResolver: acceptAnyHostname,
97
+ pathPrefixes: [shellPathPrefix, '/wcctools-route'],
98
+ },
99
+ bundledContent: await loadShellContent(paths.distShellDir),
100
+ spaFallback: true,
101
+ httpTypedRouter: this.api.typedrouter,
102
+ typedRequestPath: `${shellPathPrefix}/typedrequest`,
103
+ noCache: true,
104
+ securityHeaders,
105
+ };
106
+ }
107
+ /**
108
+ * The preview: the catalog's own document and bundle from the tswatch serve directory, on
109
+ * the root paths it was written for. Its live reload client is injected into its document
110
+ * only, so a rebuilt bundle reloads the preview frame and never the shell.
111
+ */
112
+ createPreviewSurface(serveDirArg) {
113
+ return {
114
+ name: 'preview',
115
+ match: {
116
+ hostnameResolver: acceptAnyHostname,
117
+ pathPrefixes: ['/'],
118
+ },
119
+ serveDir: serveDirArg,
120
+ spaFallback: true,
121
+ injectReload: true,
122
+ watch: true,
123
+ // Lets the reload client get pushed changes instead of polling
124
+ websocketTypedRouter: new plugins.typedrequest.TypedRouter(),
125
+ // As tswatch serves catalogs
126
+ cors: true,
127
+ httpHandler: async (contextArg) => {
128
+ if (contextArg.path === '/' && (contextArg.method === 'GET' || contextArg.method === 'HEAD')) {
129
+ return new Response(null, { status: 302, headers: { Location: `${shellPathPrefix}/` } });
130
+ }
131
+ return null;
132
+ },
133
+ noCache: true,
134
+ securityHeaders,
135
+ };
136
+ }
137
+ async readProjectName(cwdArg) {
138
+ const packageJson = JSON.parse(await plugins.fs.readFile(plugins.path.join(cwdArg, 'package.json'), 'utf8'));
139
+ return packageJson.name ?? plugins.path.basename(cwdArg);
140
+ }
141
+ }
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kZXZzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jbGFzc2VzLmRldnNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWF0RSwwRkFBMEY7QUFDMUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUV4Qyw4RkFBOEY7QUFDOUYsTUFBTSxlQUFlLEdBQXlDO0lBQzVELHVCQUF1QixFQUFFLGFBQWE7SUFDdEMseUJBQXlCLEVBQUUsY0FBYztDQUMxQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFFckM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQU9NO0lBTjdCLDZGQUE2RjtJQUM3RSxHQUFHLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUM5QixPQUFPLEdBQW1DLElBQUksQ0FBQztJQUMvQyxXQUFXLEdBQTJDLElBQUksQ0FBQztJQUNsRCxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRS9FLFlBQTZCLFVBQWdDLEVBQUU7UUFBbEMsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMs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
@@ -0,0 +1,6 @@
1
+ import * as plugins from './plugins.js';
2
+ /**
3
+ * Registers the wcctools commands on the given console.
4
+ */
5
+ export declare const registerCommands: (out: plugins.smartconsole.SmartConsole) => void;
6
+ export declare const runCli: () => Promise<void>;
package/dist_ts/cli.js ADDED
@@ -0,0 +1,45 @@
1
+ import * as plugins from './plugins.js';
2
+ import { commitinfo } from './00_commitinfo_data.js';
3
+ import { WccDevServer } from './classes.devserver.js';
4
+ /**
5
+ * Registers the wcctools commands on the given console.
6
+ */
7
+ export const registerCommands = (out) => {
8
+ out.cli.configure({
9
+ name: 'wcctools',
10
+ version: commitinfo.version,
11
+ description: 'Develop a web component catalog in the wcctools shell',
12
+ });
13
+ out.cli.command({
14
+ name: 'dev',
15
+ description: 'Bundle the catalog with live reload and serve it in the wcctools shell',
16
+ options: {
17
+ port: {
18
+ type: 'number',
19
+ description: 'Port to listen on (0 picks a free port); overrides the tswatch configuration',
20
+ },
21
+ },
22
+ }, async ({ options }) => {
23
+ const devServer = new WccDevServer({ port: options.port });
24
+ const address = await devServer.start();
25
+ await out.log(`wcctools dev: ${address.url}`);
26
+ });
27
+ out.cli.default({}, async () => {
28
+ await out.log(out.cli.renderHelp());
29
+ });
30
+ };
31
+ export const runCli = async () => {
32
+ const out = new plugins.smartconsole.SmartConsole();
33
+ try {
34
+ registerCommands(out);
35
+ await out.cli.run();
36
+ }
37
+ catch (error) {
38
+ await out.error(error instanceof Error ? error.message : String(error));
39
+ process.exitCode = 1;
40
+ }
41
+ finally {
42
+ await out.dispose();
43
+ }
44
+ };
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQXNDLEVBQVEsRUFBRTtJQUMvRSxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNoQixJQUFJLEVBQUUsVUFBVTtRQUNoQixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87UUFDM0IsV0FBVyxFQUFFLHVEQUF1RDtLQUNyRSxDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNkLElBQUksRUFBRSxLQUFLO1FBQ1gsV0FBVyxFQUFFLHdFQUF3RTtRQUNyRixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDhFQUE4RTthQUM1RjtTQUNGO0tBQ0YsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0IsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRTtJQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEQsSUFBSSxDQUFDO1FBQ0gsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUMsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export { runCli } from './cli.js';
2
+ export { WccDevServer, type IWccDevServerOptions, type IWccDevServerAddress } from './classes.devserver.js';
3
+ export { WccDevApi } from './classes.devapi.js';
@@ -0,0 +1,4 @@
1
+ export { runCli } from './cli.js';
2
+ export { WccDevServer } from './classes.devserver.js';
3
+ export { WccDevApi } from './classes.devapi.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQXdELE1BQU0sd0JBQXdCLENBQUM7QUFDNUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDIn0=
@@ -0,0 +1,4 @@
1
+ /** The root of the installed wcctools package. */
2
+ export declare const packageDir: string;
3
+ /** The prebuilt shell bundle the package ships. */
4
+ export declare const distShellDir: string;
@@ -0,0 +1,6 @@
1
+ import * as plugins from './plugins.js';
2
+ /** The root of the installed wcctools package. */
3
+ export const packageDir = plugins.path.resolve(plugins.path.dirname(plugins.url.fileURLToPath(import.meta.url)), '..');
4
+ /** The prebuilt shell bundle the package ships. */
5
+ export const distShellDir = plugins.path.join(packageDir, 'dist_shell');
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUV2SCxtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyJ9
@@ -0,0 +1,15 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import * as url from 'node:url';
4
+ export { fs, path, url };
5
+ import * as typedrequest from '@api.global/typedrequest';
6
+ import * as typedserver from '@api.global/typedserver';
7
+ export { typedrequest, typedserver };
8
+ import * as tswatch from '@git.zone/tswatch';
9
+ export { tswatch };
10
+ import * as smartconsole from '@push.rocks/smartconsole';
11
+ import * as smartexit from '@push.rocks/smartexit';
12
+ export { smartconsole, smartexit };
13
+ import * as interfaces from '../dist_ts_interfaces/index.js';
14
+ import * as shared from '../dist_ts_shared/index.js';
15
+ export { interfaces, shared };
@@ -0,0 +1,21 @@
1
+ // node native scope
2
+ import * as fs from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ import * as url from 'node:url';
5
+ export { fs, path, url };
6
+ // @api.global scope
7
+ import * as typedrequest from '@api.global/typedrequest';
8
+ import * as typedserver from '@api.global/typedserver';
9
+ export { typedrequest, typedserver };
10
+ // @git.zone scope
11
+ import * as tswatch from '@git.zone/tswatch';
12
+ export { tswatch };
13
+ // @push.rocks scope
14
+ import * as smartconsole from '@push.rocks/smartconsole';
15
+ import * as smartexit from '@push.rocks/smartexit';
16
+ export { smartconsole, smartexit };
17
+ // project scope
18
+ import * as interfaces from '../dist_ts_interfaces/index.js';
19
+ import * as shared from '../dist_ts_shared/index.js';
20
+ export { interfaces, shared };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFekIsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBRXJDLGtCQUFrQjtBQUNsQixPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUVuQixvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFFbkMsZ0JBQWdCO0FBQ2hCLE9BQU8sS0FBSyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDIn0=
@@ -0,0 +1,9 @@
1
+ import * as plugins from './plugins.js';
2
+ /** The path below which the shell surface serves the shell bundle. */
3
+ export declare const shellPathPrefix = "/wcctools";
4
+ /**
5
+ * The prebuilt shell bundle as in-memory content of the shell surface. A surface serves files
6
+ * by their full request path, so every file is keyed below `wcctools/`; the shell page is
7
+ * also keyed as `index.html`, which the surface's SPA fallback answers `/wcctools-route/...` with.
8
+ */
9
+ export declare const loadShellContent: (distShellDirArg: string) => Promise<plugins.typedserver.IBundledContentItem[]>;
@@ -0,0 +1,42 @@
1
+ import * as plugins from './plugins.js';
2
+ /** The path below which the shell surface serves the shell bundle. */
3
+ export const shellPathPrefix = '/wcctools';
4
+ const collectFiles = async (dirArg, relativeDirArg = '') => {
5
+ const entries = await plugins.fs.readdir(plugins.path.join(dirArg, relativeDirArg), { withFileTypes: true });
6
+ const files = [];
7
+ for (const entry of entries) {
8
+ const relativePath = relativeDirArg ? `${relativeDirArg}/${entry.name}` : entry.name;
9
+ if (entry.isDirectory()) {
10
+ files.push(...await collectFiles(dirArg, relativePath));
11
+ }
12
+ else if (entry.isFile()) {
13
+ files.push(relativePath);
14
+ }
15
+ }
16
+ return files;
17
+ };
18
+ /**
19
+ * The prebuilt shell bundle as in-memory content of the shell surface. A surface serves files
20
+ * by their full request path, so every file is keyed below `wcctools/`; the shell page is
21
+ * also keyed as `index.html`, which the surface's SPA fallback answers `/wcctools-route/...` with.
22
+ */
23
+ export const loadShellContent = async (distShellDirArg) => {
24
+ const indexPath = plugins.path.join(distShellDirArg, 'index.html');
25
+ try {
26
+ await plugins.fs.access(indexPath);
27
+ }
28
+ catch {
29
+ throw new Error(`wcctools: the shell bundle is missing (${indexPath}); build the package with "pnpm build".`);
30
+ }
31
+ const prefix = shellPathPrefix.slice(1);
32
+ const content = [];
33
+ for (const relativePath of await collectFiles(distShellDirArg)) {
34
+ const contentBase64 = (await plugins.fs.readFile(plugins.path.join(distShellDirArg, relativePath))).toString('base64');
35
+ content.push({ path: `${prefix}/${relativePath}`, contentBase64 });
36
+ if (relativePath === 'index.html') {
37
+ content.push({ path: 'index.html', contentBase64 });
38
+ }
39
+ }
40
+ return content;
41
+ };
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGxjb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvc2hlbGxjb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDO0FBRTNDLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsY0FBYyxHQUFHLEVBQUUsRUFBcUIsRUFBRTtJQUNwRixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdHLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3JGLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsZUFBdUIsRUFBc0QsRUFBRTtJQUNwSCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsU0FBUyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUE4QyxFQUFFLENBQUM7SUFDOUQsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2SCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxZQUFZLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyJ9
@@ -0,0 +1,88 @@
1
+ import type { IWccCatalogManifest } from './catalog.js';
2
+ /**
3
+ * The bridge between the shell and the preview document. The preview runtime installs it as
4
+ * `window.wccPreview` in the preview document; the shell reaches it through the same-origin
5
+ * iframe. Every argument and result is plain, structured-cloneable data: values never carry
6
+ * objects of the other document's realm.
7
+ */
8
+ export type TWccTheme = 'dark' | 'bright';
9
+ /** One demo (or page) of the catalog. */
10
+ export interface IWccSelection {
11
+ sectionName: string;
12
+ itemName: string;
13
+ /** 0-based; always 0 for a page. */
14
+ demoIndex: number;
15
+ }
16
+ /** What the preview shows instead of a demo. */
17
+ export interface IWccEmptyState {
18
+ title: string;
19
+ detail: string;
20
+ }
21
+ export type TWccEmptyReason = 'nothing-selected' | 'no-demo' | 'ignored' | 'missing' | 'no-such-demo' | 'failed';
22
+ export type TWccRenderOutcome = {
23
+ kind: 'rendered';
24
+ type: 'element' | 'page';
25
+ } | {
26
+ kind: 'empty';
27
+ reason: TWccEmptyReason;
28
+ emptyState: IWccEmptyState;
29
+ };
30
+ export type TWccPropertyKind = 'String' | 'Number' | 'Boolean' | 'Enum' | 'Object' | 'Array';
31
+ /** A scalar property value the properties panel can show and set directly. */
32
+ export type TWccPropertyScalar = string | number | boolean | null;
33
+ export interface IWccPropertyDescriptor {
34
+ name: string;
35
+ kind: TWccPropertyKind;
36
+ /** The values of an `Enum` property. */
37
+ enumValues?: string[];
38
+ /** The current value of a String, Number, Boolean or Enum property. */
39
+ value?: TWccPropertyScalar;
40
+ /** The current value of an Object or Array property, as formatted JSON. */
41
+ json?: string;
42
+ }
43
+ export type TWccPropertyListing = {
44
+ kind: 'properties';
45
+ elementName: string;
46
+ properties: IWccPropertyDescriptor[];
47
+ } | {
48
+ kind: 'unavailable';
49
+ reason: string;
50
+ };
51
+ export type TWccPropertyEditResult = {
52
+ ok: true;
53
+ } | {
54
+ ok: false;
55
+ error: string;
56
+ };
57
+ export interface IWccRenderedEvent {
58
+ type: 'rendered';
59
+ selection: IWccSelection | null;
60
+ outcome: TWccRenderOutcome;
61
+ }
62
+ export type TWccPreviewEvent = IWccRenderedEvent;
63
+ export interface IWccPreviewBridge {
64
+ getManifest(): IWccCatalogManifest;
65
+ /** The selection rendered last, or null before the first render. */
66
+ getSelection(): IWccSelection | null;
67
+ getTheme(): TWccTheme;
68
+ /** Render a demo or page into the preview document, without reloading it. */
69
+ render(selectionArg: IWccSelection): Promise<TWccRenderOutcome>;
70
+ setTheme(themeArg: TWccTheme): Promise<void>;
71
+ /** The editable properties of the selected element's rendered instance, once it has rendered. */
72
+ getProperties(): Promise<TWccPropertyListing>;
73
+ setProperty(nameArg: string, valueArg: TWccPropertyScalar): TWccPropertyEditResult;
74
+ /** Parse JSON in the preview document and assign it to an Object or Array property. */
75
+ setPropertyJson(nameArg: string, jsonArg: string): TWccPropertyEditResult;
76
+ /** The rendered instance of the selected element, for same-origin tooling. */
77
+ findRenderedInstance(): HTMLElement | null;
78
+ subscribe(listenerArg: (eventArg: TWccPreviewEvent) => void): () => void;
79
+ }
80
+ /** The message a preview document posts to its parent once its bridge is installed. */
81
+ export interface IWccPreviewReadyMessage {
82
+ type: 'wcctools-preview-ready';
83
+ }
84
+ declare global {
85
+ interface Window {
86
+ wccPreview?: IWccPreviewBridge;
87
+ }
88
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfaW50ZXJmYWNlcy9icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The data-only description of a catalog that the preview runtime hands to the shell.
3
+ * Element classes and template factories stay in the preview document.
4
+ */
5
+ /** How the entries of a section are rendered: element demos or page factories. */
6
+ export type TWccSectionType = 'elements' | 'pages';
7
+ /** A navigable catalog entry. */
8
+ export interface IWccManifestEntry {
9
+ name: string;
10
+ /** The registered tag of an element; null for pages and unregistered element classes. */
11
+ tagName: string | null;
12
+ /** Number of demos (always 1 for a page). */
13
+ demoCount: number;
14
+ demoGroups: string[];
15
+ }
16
+ /** A registered element without a usable demo; listed, never navigable. */
17
+ export interface IWccManifestEntryWithoutDemo {
18
+ name: string;
19
+ tagName: string | null;
20
+ }
21
+ export interface IWccManifestSection {
22
+ name: string;
23
+ type: TWccSectionType;
24
+ icon?: string;
25
+ collapsed?: boolean;
26
+ /** Classified, filtered and sorted as the section configures it. */
27
+ entries: IWccManifestEntry[];
28
+ entriesWithoutDemo: IWccManifestEntryWithoutDemo[];
29
+ }
30
+ export interface IWccCatalogManifest {
31
+ sections: IWccManifestSection[];
32
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The data-only description of a catalog that the preview runtime hands to the shell.
3
+ * Element classes and template factories stay in the preview document.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2ludGVyZmFjZXMvY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0cifQ==
@@ -0,0 +1,3 @@
1
+ export * from './catalog.js';
2
+ export * from './bridge.js';
3
+ export * from './requests.js';
@@ -0,0 +1,4 @@
1
+ export * from './catalog.js';
2
+ export * from './bridge.js';
3
+ export * from './requests.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces';
2
+ export { typedrequestInterfaces };
@@ -0,0 +1,3 @@
1
+ import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces';
2
+ export { typedrequestInterfaces };
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2ludGVyZmFjZXMvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssc0JBQXNCLE1BQU0scUNBQXFDLENBQUM7QUFFOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUMifQ==
@@ -0,0 +1,15 @@
1
+ import * as plugins from './plugins.js';
2
+ /**
3
+ * Typed requests the shell sends to the `wcctools dev` server on `/wcctools/typedrequest`.
4
+ */
5
+ export interface IWccDevServerInfo {
6
+ /** Version of the wcctools package that serves the shell. */
7
+ wcctoolsVersion: string;
8
+ /** Name of the served project's package. */
9
+ projectName: string;
10
+ }
11
+ export interface IReq_GetDevServerInfo extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetDevServerInfo> {
12
+ method: 'getDevServerInfo';
13
+ request: {};
14
+ response: IWccDevServerInfo;
15
+ }
@@ -0,0 +1,2 @@
1
+ import * as plugins from './plugins.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19pbnRlcmZhY2VzL3JlcXVlc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export * from './previewroute.js';
@@ -0,0 +1,2 @@
1
+ export * from './previewroute.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQyJ9