@gtsx/core 0.0.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.
Files changed (86) hide show
  1. package/LICENSE +21 -0
  2. package/dist/analyzer.d.ts +31 -0
  3. package/dist/analyzer.d.ts.map +1 -0
  4. package/dist/analyzer.js +397 -0
  5. package/dist/analyzer.js.map +1 -0
  6. package/dist/boundary-rect.d.ts +3 -0
  7. package/dist/boundary-rect.d.ts.map +1 -0
  8. package/dist/boundary-rect.js +70 -0
  9. package/dist/boundary-rect.js.map +1 -0
  10. package/dist/browser-capture.d.ts +8 -0
  11. package/dist/browser-capture.d.ts.map +1 -0
  12. package/dist/browser-capture.js +47 -0
  13. package/dist/browser-capture.js.map +1 -0
  14. package/dist/cli.d.ts +19 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +666 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config-model.d.ts +6 -0
  19. package/dist/config-model.d.ts.map +1 -0
  20. package/dist/config-model.js +25 -0
  21. package/dist/config-model.js.map +1 -0
  22. package/dist/config-types.d.ts +32 -0
  23. package/dist/config-types.d.ts.map +1 -0
  24. package/dist/config-types.js +2 -0
  25. package/dist/config-types.js.map +1 -0
  26. package/dist/config.d.ts +10 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +79 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/define-config.d.ts +3 -0
  31. package/dist/define-config.d.ts.map +1 -0
  32. package/dist/define-config.js +4 -0
  33. package/dist/define-config.js.map +1 -0
  34. package/dist/index.d.ts +13 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/init.d.ts +11 -0
  39. package/dist/init.d.ts.map +1 -0
  40. package/dist/init.js +84 -0
  41. package/dist/init.js.map +1 -0
  42. package/dist/preview-protocol.d.ts +78 -0
  43. package/dist/preview-protocol.d.ts.map +1 -0
  44. package/dist/preview-protocol.js +95 -0
  45. package/dist/preview-protocol.js.map +1 -0
  46. package/dist/project-index.d.ts +35 -0
  47. package/dist/project-index.d.ts.map +1 -0
  48. package/dist/project-index.js +289 -0
  49. package/dist/project-index.js.map +1 -0
  50. package/dist/project-scope.d.ts +8 -0
  51. package/dist/project-scope.d.ts.map +1 -0
  52. package/dist/project-scope.js +56 -0
  53. package/dist/project-scope.js.map +1 -0
  54. package/dist/react-transform.d.ts +15 -0
  55. package/dist/react-transform.d.ts.map +1 -0
  56. package/dist/react-transform.js +138 -0
  57. package/dist/react-transform.js.map +1 -0
  58. package/dist/runtime-values.d.ts +73 -0
  59. package/dist/runtime-values.d.ts.map +1 -0
  60. package/dist/runtime-values.js +124 -0
  61. package/dist/runtime-values.js.map +1 -0
  62. package/dist/runtime.d.ts +44 -0
  63. package/dist/runtime.d.ts.map +1 -0
  64. package/dist/runtime.js +218 -0
  65. package/dist/runtime.js.map +1 -0
  66. package/dist/script-adapter.d.ts +22 -0
  67. package/dist/script-adapter.d.ts.map +1 -0
  68. package/dist/script-adapter.js +80 -0
  69. package/dist/script-adapter.js.map +1 -0
  70. package/dist/studio-client.d.ts +112 -0
  71. package/dist/studio-client.d.ts.map +1 -0
  72. package/dist/studio-client.js +1342 -0
  73. package/dist/studio-client.js.map +1 -0
  74. package/dist/studio-manifest-model.d.ts +41 -0
  75. package/dist/studio-manifest-model.d.ts.map +1 -0
  76. package/dist/studio-manifest-model.js +24 -0
  77. package/dist/studio-manifest-model.js.map +1 -0
  78. package/dist/studio-manifest.d.ts +23 -0
  79. package/dist/studio-manifest.d.ts.map +1 -0
  80. package/dist/studio-manifest.js +57 -0
  81. package/dist/studio-manifest.js.map +1 -0
  82. package/dist/types.d.ts +35 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/dist/types.js.map +1 -0
  86. package/package.json +84 -0
@@ -0,0 +1,124 @@
1
+ import React from "react";
2
+ const DEFAULT_MAX_DEPTH = 6;
3
+ const DEFAULT_MAX_ENTRIES = 50;
4
+ export function serializeGRuntimeValue(value, options = {}) {
5
+ return serializeValue(value, {
6
+ maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,
7
+ maxEntries: options.maxEntries ?? DEFAULT_MAX_ENTRIES,
8
+ seen: new WeakMap(),
9
+ }, "$", 0);
10
+ }
11
+ function serializeValue(value, context, path, depth) {
12
+ if (value === null)
13
+ return { type: "null", value: null };
14
+ if (typeof value === "undefined")
15
+ return { type: "undefined" };
16
+ if (typeof value === "string")
17
+ return { type: "string", value };
18
+ if (typeof value === "number")
19
+ return { type: "number", value };
20
+ if (typeof value === "boolean")
21
+ return { type: "boolean", value };
22
+ if (typeof value === "bigint")
23
+ return { type: "bigint", value: value.toString() };
24
+ if (typeof value === "symbol") {
25
+ return {
26
+ type: "symbol",
27
+ ...((value.description ?? "") !== "" ? { description: value.description } : {}),
28
+ displayName: String(value),
29
+ };
30
+ }
31
+ if (typeof value === "function") {
32
+ const name = value.name;
33
+ return {
34
+ type: "function",
35
+ ...(name ? { name } : {}),
36
+ displayName: name ? `[Function ${name}]` : "[Function anonymous]",
37
+ };
38
+ }
39
+ const objectValue = value;
40
+ const circularPath = context.seen.get(objectValue);
41
+ if (circularPath)
42
+ return { type: "circular", path: circularPath };
43
+ if (depth >= context.maxDepth)
44
+ return { type: "truncated", reason: "max-depth" };
45
+ context.seen.set(objectValue, path);
46
+ if (value instanceof Date) {
47
+ return {
48
+ type: "date",
49
+ value: Number.isNaN(value.getTime()) ? "Invalid Date" : value.toISOString(),
50
+ };
51
+ }
52
+ if (value instanceof Error) {
53
+ return {
54
+ type: "error",
55
+ name: value.name,
56
+ message: value.message,
57
+ };
58
+ }
59
+ if (React.isValidElement(value)) {
60
+ return {
61
+ type: "react-element",
62
+ elementType: displayReactElementType(value.type),
63
+ props: serializeValue(value.props, context, `${path}.props`, depth + 1),
64
+ };
65
+ }
66
+ if (Array.isArray(value)) {
67
+ const values = value
68
+ .slice(0, context.maxEntries)
69
+ .map((item, index) => serializeValue(item, context, `${path}[${index}]`, depth + 1));
70
+ return {
71
+ type: "array",
72
+ values,
73
+ ...truncationFor(value.length, values.length),
74
+ };
75
+ }
76
+ if (value instanceof Map) {
77
+ const entries = [...value.entries()];
78
+ const serializedEntries = entries.slice(0, context.maxEntries).map(([entryKey, entryValue], index) => [
79
+ serializeValue(entryKey, context, `${path}.<map:${index}>.key`, depth + 1),
80
+ serializeValue(entryValue, context, `${path}.<map:${index}>.value`, depth + 1),
81
+ ]);
82
+ return {
83
+ type: "map",
84
+ entries: serializedEntries,
85
+ ...truncationFor(entries.length, serializedEntries.length),
86
+ };
87
+ }
88
+ if (value instanceof Set) {
89
+ const values = [...value.values()];
90
+ const serializedValues = values
91
+ .slice(0, context.maxEntries)
92
+ .map((item, index) => serializeValue(item, context, `${path}.<set:${index}>`, depth + 1));
93
+ return {
94
+ type: "set",
95
+ values: serializedValues,
96
+ ...truncationFor(values.length, serializedValues.length),
97
+ };
98
+ }
99
+ const entries = Object.entries(objectValue);
100
+ const serializedEntries = entries.slice(0, context.maxEntries).map(([entryKey, entryValue]) => ({
101
+ key: entryKey,
102
+ value: serializeValue(entryValue, context, `${path}.${entryKey}`, depth + 1),
103
+ }));
104
+ return {
105
+ type: "object",
106
+ constructorName: objectValue.constructor?.name || "Object",
107
+ entries: serializedEntries,
108
+ ...truncationFor(entries.length, serializedEntries.length),
109
+ };
110
+ }
111
+ function truncationFor(total, serialized) {
112
+ const remaining = total - serialized;
113
+ return remaining > 0 ? { truncated: { reason: "max-entries", remaining } } : {};
114
+ }
115
+ function displayReactElementType(type) {
116
+ if (typeof type === "string")
117
+ return type;
118
+ if (typeof type === "function") {
119
+ const component = type;
120
+ return component.displayName || component.name || "anonymous";
121
+ }
122
+ return "ReactElement";
123
+ }
124
+ //# sourceMappingURL=runtime-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-values.js","sourceRoot":"","sources":["../src/runtime-values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+ import type { GRuntimeValuesSnapshot } from "./preview-protocol.js";
3
+ import type { AnyGProvider, GCase, GProvider, GProviderStates, GProviderUpdate, GProviderUpdateFn, GProviderUseValue } from "./types.js";
4
+ type AnyComponentCases<Props> = Record<string, GCase<Props> | GCase<Props, unknown>>;
5
+ export type GBoundaryRect = {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ };
11
+ export type GBoundaryTreeNode = {
12
+ id: string;
13
+ coordinate: string;
14
+ rect?: GBoundaryRect;
15
+ children: GBoundaryTreeNode[];
16
+ };
17
+ export type GBoundaryCollector = {
18
+ reset(): void;
19
+ registerBoundary(coordinate: string, parentId: string | null, id?: string): string;
20
+ updateBoundaryRect(id: string, rect: GBoundaryRect): void;
21
+ updateBoundaryValues(id: string, values: Omit<GRuntimeValuesSnapshot, "boundaryId">): void;
22
+ getValues(id: string): GRuntimeValuesSnapshot | undefined;
23
+ getTree(): GBoundaryTreeNode[];
24
+ };
25
+ export type GPreviewProviderProps = {
26
+ scope?: unknown;
27
+ providerValues?: Map<AnyGProvider, unknown>;
28
+ caseOverrides?: Map<string, string>;
29
+ boundaryCollector?: GBoundaryCollector;
30
+ children: React.ReactNode;
31
+ };
32
+ export declare function GPreviewProvider(props: GPreviewProviderProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function createGBoundaryCollector(): GBoundaryCollector;
34
+ export declare function createGProvider<Props extends object, State, Update extends GProviderUpdateFn>(useValue: GProviderUseValue<Props, State, Update>): GProvider<State, Update, Props>;
35
+ export declare function useGContextUpdate<Provider extends GProvider<any, any, any>>(provider: Provider): GProviderUpdate<Provider>;
36
+ export declare function createGScopeHook<Scope>(useRealScope: () => Scope): () => Scope;
37
+ export declare function createGScopeHook<Props, Scope>(useRealScope: (props: Props) => Scope): (props: Props) => Scope;
38
+ export declare function createGScopeHook<Props, Providers extends readonly GProvider<any, any, any>[], Scope>(useRealScope: (props: Props, providers: GProviderStates<Providers>) => Scope, providers: Providers): (props: Props) => Scope;
39
+ export declare function useGContext<Value>(provider: GProvider<Value> | AnyGProvider): Value;
40
+ export declare function defineGComponent<Props extends object>(coordinate: string, Component: React.ComponentType<Props>): React.ComponentType<Props> & {
41
+ cases?: AnyComponentCases<Props>;
42
+ };
43
+ export {};
44
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { createContainer } from "react-tracked";
4
+ import { serializeGRuntimeValue } from "./runtime-values.js";
5
+ const PreviewRuntimeContext = React.createContext(null);
6
+ const ActiveComponentCaseContext = React.createContext(null);
7
+ const BoundaryParentContext = React.createContext(null);
8
+ const noopUpdate = () => { };
9
+ export function GPreviewProvider(props) {
10
+ props.boundaryCollector?.reset();
11
+ const previewValue = {
12
+ ...(Object.prototype.hasOwnProperty.call(props, "scope") ? { scope: props.scope } : {}),
13
+ providerValues: props.providerValues ?? new Map(),
14
+ caseOverrides: props.caseOverrides ?? new Map(),
15
+ boundaryCollector: props.boundaryCollector,
16
+ };
17
+ return (_jsx(PreviewRuntimeContext.Provider, { value: previewValue, children: props.children }));
18
+ }
19
+ export function createGBoundaryCollector() {
20
+ let nodes = [];
21
+ let valuesByBoundaryId = new Map();
22
+ return {
23
+ reset() {
24
+ nodes = [];
25
+ valuesByBoundaryId = new Map();
26
+ },
27
+ registerBoundary(coordinate, parentId, requestedId) {
28
+ const id = requestedId ?? `gtsx-boundary:${nodes.length}`;
29
+ const existing = nodes.find((candidate) => candidate.id === id);
30
+ if (existing) {
31
+ existing.coordinate = coordinate;
32
+ existing.parentId = parentId;
33
+ return id;
34
+ }
35
+ nodes.push({ id, coordinate, parentId });
36
+ return id;
37
+ },
38
+ updateBoundaryRect(id, rect) {
39
+ const node = nodes.find((candidate) => candidate.id === id);
40
+ if (node) {
41
+ node.rect = rect;
42
+ }
43
+ },
44
+ updateBoundaryValues(id, values) {
45
+ valuesByBoundaryId.set(id, values);
46
+ },
47
+ getValues(id) {
48
+ const values = valuesByBoundaryId.get(id);
49
+ return values ? { boundaryId: id, ...values } : undefined;
50
+ },
51
+ getTree() {
52
+ const nodesById = new Map();
53
+ for (const node of nodes) {
54
+ nodesById.set(node.id, {
55
+ id: node.id,
56
+ coordinate: node.coordinate,
57
+ ...(node.rect ? { rect: node.rect } : {}),
58
+ children: [],
59
+ });
60
+ }
61
+ const roots = [];
62
+ for (const node of nodes) {
63
+ const treeNode = nodesById.get(node.id);
64
+ if (!treeNode)
65
+ continue;
66
+ const parent = node.parentId ? nodesById.get(node.parentId) : undefined;
67
+ if (parent) {
68
+ parent.children.push(treeNode);
69
+ }
70
+ else {
71
+ roots.push(treeNode);
72
+ }
73
+ }
74
+ return roots;
75
+ },
76
+ };
77
+ }
78
+ export function createGProvider(useValue) {
79
+ const PresenceContext = React.createContext(false);
80
+ const container = createContainer(useValue);
81
+ const TrackedProvider = container.Provider;
82
+ const Provider = ((props) => {
83
+ return (_jsx(PresenceContext.Provider, { value: true, children: _jsx(TrackedProvider, { ...props, children: props.children }) }));
84
+ });
85
+ Provider.useUpdate = () => useGContextUpdate(Provider);
86
+ Object.defineProperties(Provider, {
87
+ __gtsxPresenceContext: { value: PresenceContext },
88
+ __gtsxUseTrackedState: { value: container.useTrackedState },
89
+ __gtsxUseUpdate: { value: container.useUpdate },
90
+ });
91
+ return Provider;
92
+ }
93
+ export function useGContextUpdate(provider) {
94
+ if (isManagedGProvider(provider)) {
95
+ const hasProvider = React.useContext(provider.__gtsxPresenceContext);
96
+ if (hasProvider) {
97
+ return provider.__gtsxUseUpdate();
98
+ }
99
+ }
100
+ const preview = React.useContext(PreviewRuntimeContext);
101
+ const activeCase = React.useContext(ActiveComponentCaseContext);
102
+ if (preview && readCaseProviderValue(activeCase, provider).found) {
103
+ return noopUpdate;
104
+ }
105
+ throw new Error(`No GTSX provider update is active for ${provider.name || "anonymous provider"}.`);
106
+ }
107
+ export function createGScopeHook(useRealScope, providers) {
108
+ return ((props) => {
109
+ const providerStates = providers?.map((provider) => useGContext(provider));
110
+ const activeCase = React.useContext(ActiveComponentCaseContext);
111
+ if (activeCase && "scope" in activeCase) {
112
+ return activeCase.scope;
113
+ }
114
+ const preview = React.useContext(PreviewRuntimeContext);
115
+ if (preview && "scope" in preview) {
116
+ return preview.scope;
117
+ }
118
+ if (providers) {
119
+ return useRealScope(props, providerStates);
120
+ }
121
+ return useRealScope(props);
122
+ });
123
+ }
124
+ export function useGContext(provider) {
125
+ if (isManagedGProvider(provider)) {
126
+ const hasProvider = React.useContext(provider.__gtsxPresenceContext);
127
+ if (hasProvider) {
128
+ return provider.__gtsxUseTrackedState();
129
+ }
130
+ }
131
+ const preview = React.useContext(PreviewRuntimeContext);
132
+ if (preview?.providerValues.has(provider)) {
133
+ return preview.providerValues.get(provider);
134
+ }
135
+ const activeCase = React.useContext(ActiveComponentCaseContext);
136
+ const caseValue = readCaseProviderValue(activeCase, provider);
137
+ if (caseValue.found) {
138
+ return caseValue.value;
139
+ }
140
+ throw new Error(`No GTSX provider value is active for ${provider.name || "anonymous provider"}.`);
141
+ }
142
+ function isManagedGProvider(provider) {
143
+ return "__gtsxPresenceContext" in provider && "__gtsxUseTrackedState" in provider && "__gtsxUseUpdate" in provider;
144
+ }
145
+ function readCaseProviderValue(activeCase, provider) {
146
+ if (!activeCase || !Array.isArray(activeCase.providers)) {
147
+ return { found: false };
148
+ }
149
+ for (const [entryProvider, value] of activeCase.providers) {
150
+ if (entryProvider === provider) {
151
+ return { found: true, value };
152
+ }
153
+ }
154
+ return { found: false };
155
+ }
156
+ export function defineGComponent(coordinate, Component) {
157
+ const GComponentBoundary = ((props) => {
158
+ const stableBoundaryId = `gtsx-boundary:${React.useId()}`;
159
+ const preview = React.useContext(PreviewRuntimeContext);
160
+ const parentBoundaryId = React.useContext(BoundaryParentContext);
161
+ const boundaryId = preview?.boundaryCollector?.registerBoundary(coordinate, parentBoundaryId, stableBoundaryId) ?? null;
162
+ const activeCase = preview ? resolveComponentCase(coordinate, GComponentBoundary.cases, preview) : null;
163
+ if (preview && boundaryId) {
164
+ preview.boundaryCollector?.updateBoundaryValues(boundaryId, {
165
+ props: serializeGRuntimeValue(props),
166
+ scope: serializeGRuntimeValue(readScopeSnapshot(activeCase, preview)),
167
+ providerValues: serializeProviderValues(preview.providerValues),
168
+ });
169
+ }
170
+ const rendered = activeCase ? (_jsx(ActiveComponentCaseContext.Provider, { value: activeCase, children: _jsx(Component, { ...props }) })) : (_jsx(Component, { ...props }));
171
+ if (!boundaryId)
172
+ return rendered;
173
+ return (_jsx(BoundaryParentContext.Provider, { value: boundaryId, children: _jsx("div", { "data-gtsx-boundary-id": boundaryId, style: { display: "contents" }, children: rendered }) }));
174
+ });
175
+ GComponentBoundary.displayName = Component.displayName || Component.name;
176
+ return GComponentBoundary;
177
+ }
178
+ function readScopeSnapshot(activeCase, preview) {
179
+ if (activeCase && "scope" in activeCase)
180
+ return activeCase.scope;
181
+ return preview.scope;
182
+ }
183
+ function serializeProviderValues(providerValues) {
184
+ return [...providerValues.entries()].map(([provider, value]) => ({
185
+ providerName: provider.displayName || provider.name || "anonymous provider",
186
+ value: serializeGRuntimeValue(value),
187
+ }));
188
+ }
189
+ function readPreviewContextIfRendering() {
190
+ try {
191
+ return React.useContext(PreviewRuntimeContext);
192
+ }
193
+ catch {
194
+ return null;
195
+ }
196
+ }
197
+ function readActiveComponentCaseIfRendering() {
198
+ try {
199
+ return React.useContext(ActiveComponentCaseContext);
200
+ }
201
+ catch {
202
+ return null;
203
+ }
204
+ }
205
+ function resolveComponentCase(coordinate, cases, preview) {
206
+ if (!cases)
207
+ return null;
208
+ const overrideName = preview.caseOverrides.get(coordinate);
209
+ if (overrideName) {
210
+ const overrideCase = cases[overrideName];
211
+ if (!overrideCase) {
212
+ throw new Error(`Unknown GTSX case "${overrideName}" for ${coordinate}.`);
213
+ }
214
+ return overrideCase;
215
+ }
216
+ return Object.values(cases)[0] ?? null;
217
+ }
218
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { GTSXDiagnostic } from "./analyzer.js";
2
+ import type { GTSXScriptConfig } from "./config-types.js";
3
+ export type ScriptAdapterAction = "serve" | "capture" | "strip" | "diagnose";
4
+ export type ScriptAdapterParams = {
5
+ cwd: string;
6
+ entry?: string;
7
+ caseName?: string;
8
+ gcases?: string[];
9
+ port?: string;
10
+ viewport?: string;
11
+ out?: string;
12
+ check?: boolean;
13
+ };
14
+ export type ScriptAdapterResult = {
15
+ exitCode: number;
16
+ stdout: string;
17
+ stderr: string;
18
+ diagnostics: GTSXDiagnostic[];
19
+ };
20
+ export declare function runScriptAdapter(config: GTSXScriptConfig, action: ScriptAdapterAction, params: ScriptAdapterParams): Promise<ScriptAdapterResult>;
21
+ export declare function expandCommand(template: string, params: ScriptAdapterParams): string;
22
+ //# sourceMappingURL=script-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-adapter.d.ts","sourceRoot":"","sources":["../src/script-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAIzD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAA;AAE5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,cAAc,EAAE,CAAA;CAC9B,CAAA;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAiD9B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAgBnF"}
@@ -0,0 +1,80 @@
1
+ import { exec } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execAsync = promisify(exec);
4
+ export async function runScriptAdapter(config, action, params) {
5
+ const template = action === "serve" ? config.preview.serve : undefined;
6
+ if (!template) {
7
+ return {
8
+ exitCode: action === "strip" ? 0 : 1,
9
+ stdout: "",
10
+ stderr: "",
11
+ diagnostics: [
12
+ {
13
+ stage: "adapter-configuration",
14
+ code: `missing-${action}-script`,
15
+ message: action === "strip"
16
+ ? "No strip script is configured; preview metadata may ship in production bundles."
17
+ : `No ${action} script is configured in gtsx.config.ts.`,
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ const command = expandCommand(template, params);
23
+ try {
24
+ const result = await execAsync(command, { cwd: params.cwd });
25
+ return {
26
+ exitCode: 0,
27
+ stdout: result.stdout,
28
+ stderr: result.stderr,
29
+ diagnostics: [],
30
+ };
31
+ }
32
+ catch (error) {
33
+ const processError = error;
34
+ return {
35
+ exitCode: typeof processError.code === "number" ? processError.code : 1,
36
+ stdout: processError.stdout ?? "",
37
+ stderr: processError.stderr ?? processError.message,
38
+ diagnostics: [
39
+ {
40
+ stage: stageForAction(action),
41
+ code: `${action}-script-failed`,
42
+ message: processError.stderr || processError.message,
43
+ ...(params.caseName ? { caseName: params.caseName } : {}),
44
+ },
45
+ ],
46
+ };
47
+ }
48
+ }
49
+ export function expandCommand(template, params) {
50
+ const replacements = {
51
+ entry: params.entry ?? "",
52
+ case: params.caseName ?? "",
53
+ gcase: params.gcases?.join(",") ?? "",
54
+ gcases: params.gcases?.map((gcase) => `--gcase ${shellQuote(gcase)}`).join(" ") ?? "",
55
+ port: params.port ?? "",
56
+ viewport: params.viewport ?? "",
57
+ out: params.out ?? "",
58
+ check: params.check ? "true" : "false",
59
+ };
60
+ return template.replace(/\{([a-z]+)\}/g, (_match, key) => {
61
+ if (key === "gcases")
62
+ return replacements.gcases;
63
+ return shellQuote(replacements[key] ?? "");
64
+ });
65
+ }
66
+ function shellQuote(value) {
67
+ if (/^[A-Za-z0-9_./:-]*$/.test(value))
68
+ return value;
69
+ return `'${value.replaceAll("'", "'\\''")}'`;
70
+ }
71
+ function stageForAction(action) {
72
+ if (action === "capture")
73
+ return "browser-capture";
74
+ if (action === "serve")
75
+ return "preview-environment-loading";
76
+ if (action === "strip")
77
+ return "project-compilation";
78
+ return "adapter-configuration";
79
+ }
80
+ //# sourceMappingURL=script-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-adapter.js","sourceRoot":"","sources":["../src/script-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { type GRuntimeValuesSnapshot, type GPreviewProtocolMessage, type GPreviewRequestValuesMessage } from "./preview-protocol.js";
2
+ import type { StudioManifest, StudioManifestComponent } from "./studio-manifest-model.js";
3
+ import type { GBoundaryRect, GBoundaryTreeNode } from "./runtime.js";
4
+ export type StudioShellProps = {
5
+ manifest: StudioManifest;
6
+ selection?: string;
7
+ urlSearch?: string;
8
+ };
9
+ export type StudioPreviewFrameState = {
10
+ expectedSessionId: string;
11
+ ready: boolean;
12
+ tree?: GBoundaryTreeNode[];
13
+ size?: {
14
+ width: number;
15
+ height: number;
16
+ };
17
+ error?: {
18
+ message: string;
19
+ stack?: string;
20
+ };
21
+ valuesByBoundaryId?: Record<string, GRuntimeValuesSnapshot>;
22
+ };
23
+ export type StudioWorkspaceColumn = {
24
+ components: StudioManifestComponent[];
25
+ };
26
+ export type StudioWorkspaceState = {
27
+ canvasViewportPreset?: StudioViewportPreset;
28
+ columns: StudioWorkspaceColumn[];
29
+ selectedCaseByCoordinate: Record<string, string>;
30
+ selectedCoordinatePath: string[];
31
+ selectedRuntimeInstanceByCoordinate: Record<string, string>;
32
+ selectedViewportPresetByCoordinate: Record<string, StudioViewportPreset>;
33
+ };
34
+ export type StudioCanvasTransform = {
35
+ x: number;
36
+ y: number;
37
+ scale: number;
38
+ };
39
+ export type StudioCanvasWheelInput = {
40
+ clientX: number;
41
+ clientY: number;
42
+ ctrlKey: boolean;
43
+ deltaMode: number;
44
+ deltaX: number;
45
+ deltaY: number;
46
+ metaKey: boolean;
47
+ viewportLeft: number;
48
+ viewportTop: number;
49
+ };
50
+ export type StudioCardSelectionSource = "keyboard" | "pointer";
51
+ export type StudioCardSelectionAction = {
52
+ type: "activate-card";
53
+ coordinate: string;
54
+ source: StudioCardSelectionSource;
55
+ } | {
56
+ type: "clear";
57
+ };
58
+ export type StudioViewportPreset = "phone" | "tablet" | "desktop";
59
+ export type StudioWorkspaceViewProps = {
60
+ manifest: StudioManifest;
61
+ workspace: StudioWorkspaceState;
62
+ selection?: string;
63
+ frameStates?: Record<string, StudioPreviewFrameState>;
64
+ onChangeSelection?: (selection: string) => void;
65
+ onChangeCase?: (component: StudioManifestComponent, caseName: string, options?: {
66
+ keepDrilldown?: boolean;
67
+ }) => void;
68
+ onChangeCanvasViewportPreset?: (preset: StudioViewportPreset) => void;
69
+ onChangeViewportPreset?: (component: StudioManifestComponent, preset: StudioViewportPreset) => void;
70
+ onPreviewFrameMount?: (sessionId: string, frame: HTMLIFrameElement | null) => void;
71
+ onRequestValues?: (request: StudioRuntimeValuesRequest) => void;
72
+ onSelectComponent?: (component: StudioManifestComponent, frameState: StudioPreviewFrameState | undefined) => void;
73
+ onSelectRuntimeInstance?: (component: StudioManifestComponent, boundaryId: string) => void;
74
+ urlWarning?: string;
75
+ };
76
+ export type StudioRuntimeInstance = {
77
+ boundaryId: string;
78
+ coordinate: string;
79
+ parentPath: string[];
80
+ rect?: GBoundaryRect;
81
+ };
82
+ export type StudioRuntimeValuesRequest = {
83
+ sessionId: string;
84
+ message: GPreviewRequestValuesMessage;
85
+ };
86
+ export type StudioWorkspaceUrlState = {
87
+ selection: string;
88
+ workspace: StudioWorkspaceState;
89
+ warning?: string;
90
+ };
91
+ export declare function applyStudioPreviewMessage(state: StudioPreviewFrameState, message: GPreviewProtocolMessage): StudioPreviewFrameState;
92
+ export declare function applyStudioPreviewMessageToFrameStates(frameStates: Record<string, StudioPreviewFrameState>, message: GPreviewProtocolMessage, activeSessionIds: Set<string>): Record<string, StudioPreviewFrameState>;
93
+ export declare function createStudioWorkspaceState(manifest: StudioManifest, selection?: string): StudioWorkspaceState;
94
+ export declare function selectStudioComponent(state: StudioWorkspaceState, manifest: StudioManifest, coordinate: string, tree: GBoundaryTreeNode[]): StudioWorkspaceState;
95
+ export declare function selectedStudioCaseName(state: Pick<StudioWorkspaceState, "selectedCaseByCoordinate">, component: StudioManifestComponent): string;
96
+ export declare function changeStudioComponentCase(state: StudioWorkspaceState, coordinate: string, caseName: string, options?: {
97
+ keepDrilldown?: boolean;
98
+ }): StudioWorkspaceState;
99
+ export declare function selectStudioRuntimeInstance(state: StudioWorkspaceState, coordinate: string, boundaryId: string): StudioWorkspaceState;
100
+ export declare function changeStudioViewportPreset(state: StudioWorkspaceState, coordinate: string, preset: StudioViewportPreset): StudioWorkspaceState;
101
+ export declare function changeStudioCanvasViewportPreset(state: StudioWorkspaceState, preset: StudioViewportPreset): StudioWorkspaceState;
102
+ export declare function createStudioWorkspaceUrlSearchParams(selection: string | undefined, workspace: StudioWorkspaceState): URLSearchParams;
103
+ export declare function createStudioWorkspaceStateFromUrl(manifest: StudioManifest, params: URLSearchParams): StudioWorkspaceUrlState;
104
+ export declare function createStudioRuntimeValuesRequest(manifest: StudioManifest, workspace: StudioWorkspaceState, boundaryId: string): StudioRuntimeValuesRequest | undefined;
105
+ export declare function StudioShell(props: StudioShellProps): import("react/jsx-runtime").JSX.Element;
106
+ export declare function applyStudioCanvasWheel(current: StudioCanvasTransform, input: StudioCanvasWheelInput): StudioCanvasTransform;
107
+ export declare function applyStudioCardSelectionAction(current: string | undefined, action: StudioCardSelectionAction): string | undefined;
108
+ export declare function StudioWorkspaceView(props: StudioWorkspaceViewProps): import("react/jsx-runtime").JSX.Element;
109
+ export declare function componentCardLayoutWidth(displaySize: {
110
+ width: number | string;
111
+ }, tree: GBoundaryTreeNode[] | undefined, coordinate: string): number;
112
+ //# sourceMappingURL=studio-client.d.ts.map