@powerhousedao/builder-tools 0.2.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 (189) hide show
  1. package/dist/connect-studio/helpers.d.ts +5 -0
  2. package/dist/connect-studio/helpers.d.ts.map +1 -0
  3. package/dist/connect-studio/helpers.js +43 -0
  4. package/dist/connect-studio/hmr.d.ts +12 -0
  5. package/dist/connect-studio/hmr.d.ts.map +1 -0
  6. package/dist/connect-studio/hmr.js +8 -0
  7. package/dist/connect-studio/index.d.ts +9 -0
  8. package/dist/connect-studio/index.d.ts.map +1 -0
  9. package/dist/connect-studio/index.js +7 -0
  10. package/dist/connect-studio/server.d.ts +3 -0
  11. package/dist/connect-studio/server.d.ts.map +1 -0
  12. package/dist/connect-studio/server.js +175 -0
  13. package/dist/connect-studio/studio.d.ts +3 -0
  14. package/dist/connect-studio/studio.d.ts.map +1 -0
  15. package/dist/connect-studio/studio.js +65 -0
  16. package/dist/connect-studio/types.d.ts +25 -0
  17. package/dist/connect-studio/types.d.ts.map +1 -0
  18. package/dist/connect-studio/types.js +1 -0
  19. package/dist/connect-studio/vite-plugins/base.d.ts +19 -0
  20. package/dist/connect-studio/vite-plugins/base.d.ts.map +1 -0
  21. package/dist/connect-studio/vite-plugins/base.js +162 -0
  22. package/dist/connect-studio/vite-plugins/external-packages.d.ts +6 -0
  23. package/dist/connect-studio/vite-plugins/external-packages.d.ts.map +1 -0
  24. package/dist/connect-studio/vite-plugins/external-packages.js +74 -0
  25. package/dist/connect-studio/vite-plugins/hmr.d.ts +3 -0
  26. package/dist/connect-studio/vite-plugins/hmr.d.ts.map +1 -0
  27. package/dist/connect-studio/vite-plugins/hmr.js +57 -0
  28. package/dist/connect-studio/vite-plugins/importmap.d.ts +20 -0
  29. package/dist/connect-studio/vite-plugins/importmap.d.ts.map +1 -0
  30. package/dist/connect-studio/vite-plugins/importmap.js +174 -0
  31. package/dist/connect-studio/vite-plugins/studio.d.ts +4 -0
  32. package/dist/connect-studio/vite-plugins/studio.d.ts.map +1 -0
  33. package/dist/connect-studio/vite-plugins/studio.js +112 -0
  34. package/dist/document-model-editor/components/button.d.ts +4 -0
  35. package/dist/document-model-editor/components/button.d.ts.map +1 -0
  36. package/dist/document-model-editor/components/button.js +7 -0
  37. package/dist/document-model-editor/components/code-editors/graphql-editor.d.ts +10 -0
  38. package/dist/document-model-editor/components/code-editors/graphql-editor.d.ts.map +1 -0
  39. package/dist/document-model-editor/components/code-editors/graphql-editor.js +75 -0
  40. package/dist/document-model-editor/components/code-editors/json-editor.d.ts +8 -0
  41. package/dist/document-model-editor/components/code-editors/json-editor.d.ts.map +1 -0
  42. package/dist/document-model-editor/components/code-editors/json-editor.js +43 -0
  43. package/dist/document-model-editor/components/code-editors/utils.d.ts +32 -0
  44. package/dist/document-model-editor/components/code-editors/utils.d.ts.map +1 -0
  45. package/dist/document-model-editor/components/code-editors/utils.js +191 -0
  46. package/dist/document-model-editor/components/divider.d.ts +8 -0
  47. package/dist/document-model-editor/components/divider.d.ts.map +1 -0
  48. package/dist/document-model-editor/components/divider.js +21 -0
  49. package/dist/document-model-editor/components/errors.d.ts +6 -0
  50. package/dist/document-model-editor/components/errors.d.ts.map +1 -0
  51. package/dist/document-model-editor/components/errors.js +4 -0
  52. package/dist/document-model-editor/components/form.d.ts +12 -0
  53. package/dist/document-model-editor/components/form.d.ts.map +1 -0
  54. package/dist/document-model-editor/components/form.js +42 -0
  55. package/dist/document-model-editor/components/input.d.ts +6 -0
  56. package/dist/document-model-editor/components/input.d.ts.map +1 -0
  57. package/dist/document-model-editor/components/input.js +8 -0
  58. package/dist/document-model-editor/components/label.d.ts +6 -0
  59. package/dist/document-model-editor/components/label.d.ts.map +1 -0
  60. package/dist/document-model-editor/components/label.js +9 -0
  61. package/dist/document-model-editor/components/model-metadata-form.d.ts +45 -0
  62. package/dist/document-model-editor/components/model-metadata-form.d.ts.map +1 -0
  63. package/dist/document-model-editor/components/model-metadata-form.js +69 -0
  64. package/dist/document-model-editor/components/module-form.d.ts +10 -0
  65. package/dist/document-model-editor/components/module-form.d.ts.map +1 -0
  66. package/dist/document-model-editor/components/module-form.js +21 -0
  67. package/dist/document-model-editor/components/module.d.ts +21 -0
  68. package/dist/document-model-editor/components/module.d.ts.map +1 -0
  69. package/dist/document-model-editor/components/module.js +9 -0
  70. package/dist/document-model-editor/components/modules.d.ts +19 -0
  71. package/dist/document-model-editor/components/modules.d.ts.map +1 -0
  72. package/dist/document-model-editor/components/modules.js +16 -0
  73. package/dist/document-model-editor/components/operation-description-form.d.ts +9 -0
  74. package/dist/document-model-editor/components/operation-description-form.d.ts.map +1 -0
  75. package/dist/document-model-editor/components/operation-description-form.js +12 -0
  76. package/dist/document-model-editor/components/operation-error-form.d.ts +13 -0
  77. package/dist/document-model-editor/components/operation-error-form.d.ts.map +1 -0
  78. package/dist/document-model-editor/components/operation-error-form.js +39 -0
  79. package/dist/document-model-editor/components/operation-errors.d.ts +10 -0
  80. package/dist/document-model-editor/components/operation-errors.d.ts.map +1 -0
  81. package/dist/document-model-editor/components/operation-errors.js +16 -0
  82. package/dist/document-model-editor/components/operation-form.d.ts +13 -0
  83. package/dist/document-model-editor/components/operation-form.d.ts.map +1 -0
  84. package/dist/document-model-editor/components/operation-form.js +36 -0
  85. package/dist/document-model-editor/components/operation.d.ts +22 -0
  86. package/dist/document-model-editor/components/operation.d.ts.map +1 -0
  87. package/dist/document-model-editor/components/operation.js +21 -0
  88. package/dist/document-model-editor/components/operations.d.ts +17 -0
  89. package/dist/document-model-editor/components/operations.d.ts.map +1 -0
  90. package/dist/document-model-editor/components/operations.js +19 -0
  91. package/dist/document-model-editor/components/state-schemas.d.ts +13 -0
  92. package/dist/document-model-editor/components/state-schemas.d.ts.map +1 -0
  93. package/dist/document-model-editor/components/state-schemas.js +34 -0
  94. package/dist/document-model-editor/components/tabs.d.ts +8 -0
  95. package/dist/document-model-editor/components/tabs.d.ts.map +1 -0
  96. package/dist/document-model-editor/components/tabs.js +12 -0
  97. package/dist/document-model-editor/components/text-area.d.ts +9 -0
  98. package/dist/document-model-editor/components/text-area.d.ts.map +1 -0
  99. package/dist/document-model-editor/components/text-area.js +26 -0
  100. package/dist/document-model-editor/components/text-field.d.ts +21 -0
  101. package/dist/document-model-editor/components/text-field.d.ts.map +1 -0
  102. package/dist/document-model-editor/components/text-field.js +78 -0
  103. package/dist/document-model-editor/constants/documents.d.ts +12 -0
  104. package/dist/document-model-editor/constants/documents.d.ts.map +1 -0
  105. package/dist/document-model-editor/constants/documents.js +16 -0
  106. package/dist/document-model-editor/context/form-context.d.ts +11 -0
  107. package/dist/document-model-editor/context/form-context.d.ts.map +1 -0
  108. package/dist/document-model-editor/context/form-context.js +3 -0
  109. package/dist/document-model-editor/context/schema-context.d.ts +11 -0
  110. package/dist/document-model-editor/context/schema-context.d.ts.map +1 -0
  111. package/dist/document-model-editor/context/schema-context.js +116 -0
  112. package/dist/document-model-editor/document-model-editor.stories.d.ts +48 -0
  113. package/dist/document-model-editor/document-model-editor.stories.d.ts.map +1 -0
  114. package/dist/document-model-editor/document-model-editor.stories.js +252 -0
  115. package/dist/document-model-editor/editor.d.ts +3 -0
  116. package/dist/document-model-editor/editor.d.ts.map +1 -0
  117. package/dist/document-model-editor/editor.js +186 -0
  118. package/dist/document-model-editor/hooks/useFormField.d.ts +13 -0
  119. package/dist/document-model-editor/hooks/useFormField.d.ts.map +1 -0
  120. package/dist/document-model-editor/hooks/useFormField.js +21 -0
  121. package/dist/document-model-editor/index.d.ts +3 -0
  122. package/dist/document-model-editor/index.d.ts.map +1 -0
  123. package/dist/document-model-editor/index.js +2 -0
  124. package/dist/document-model-editor/module.d.ts +4 -0
  125. package/dist/document-model-editor/module.d.ts.map +1 -0
  126. package/dist/document-model-editor/module.js +10 -0
  127. package/dist/document-model-editor/schemas/inputs.d.ts +31 -0
  128. package/dist/document-model-editor/schemas/inputs.d.ts.map +1 -0
  129. package/dist/document-model-editor/schemas/inputs.js +70 -0
  130. package/dist/document-model-editor/schemas/utils.d.ts +3 -0
  131. package/dist/document-model-editor/schemas/utils.d.ts.map +1 -0
  132. package/dist/document-model-editor/schemas/utils.js +2 -0
  133. package/dist/document-model-editor/types/documents.d.ts +27 -0
  134. package/dist/document-model-editor/types/documents.d.ts.map +1 -0
  135. package/dist/document-model-editor/types/documents.js +1 -0
  136. package/dist/document-model-editor/utils/helpers.d.ts +39 -0
  137. package/dist/document-model-editor/utils/helpers.d.ts.map +1 -0
  138. package/dist/document-model-editor/utils/helpers.js +293 -0
  139. package/dist/document-model-editor/utils/linting.d.ts +7 -0
  140. package/dist/document-model-editor/utils/linting.d.ts.map +1 -0
  141. package/dist/document-model-editor/utils/linting.js +47 -0
  142. package/dist/document-model-editor/utils/style.d.ts +3 -0
  143. package/dist/document-model-editor/utils/style.d.ts.map +1 -0
  144. package/dist/document-model-editor/utils/style.js +5 -0
  145. package/dist/editor-utils/components/documentEditor.d.ts +7 -0
  146. package/dist/editor-utils/components/documentEditor.d.ts.map +1 -0
  147. package/dist/editor-utils/components/documentEditor.js +5 -0
  148. package/dist/editor-utils/components/editorToolbar.d.ts +11 -0
  149. package/dist/editor-utils/components/editorToolbar.d.ts.map +1 -0
  150. package/dist/editor-utils/components/editorToolbar.js +5 -0
  151. package/dist/editor-utils/components/editorWorksheet.d.ts +7 -0
  152. package/dist/editor-utils/components/editorWorksheet.d.ts.map +1 -0
  153. package/dist/editor-utils/components/editorWorksheet.js +4 -0
  154. package/dist/editor-utils/components/index.d.ts +9 -0
  155. package/dist/editor-utils/components/index.d.ts.map +1 -0
  156. package/dist/editor-utils/components/index.js +9 -0
  157. package/dist/editor-utils/components/styles.d.ts +40 -0
  158. package/dist/editor-utils/components/styles.d.ts.map +1 -0
  159. package/dist/editor-utils/components/styles.js +78 -0
  160. package/dist/editor-utils/components/stylesVariant.d.ts +40 -0
  161. package/dist/editor-utils/components/stylesVariant.d.ts.map +1 -0
  162. package/dist/editor-utils/components/stylesVariant.js +88 -0
  163. package/dist/editor-utils/components/textInput.d.ts +20 -0
  164. package/dist/editor-utils/components/textInput.d.ts.map +1 -0
  165. package/dist/editor-utils/components/textInput.js +83 -0
  166. package/dist/editor-utils/components/textInputVariant.d.ts +21 -0
  167. package/dist/editor-utils/components/textInputVariant.d.ts.map +1 -0
  168. package/dist/editor-utils/components/textInputVariant.js +92 -0
  169. package/dist/editor-utils/components/toolbarButton.d.ts +7 -0
  170. package/dist/editor-utils/components/toolbarButton.d.ts.map +1 -0
  171. package/dist/editor-utils/components/toolbarButton.js +8 -0
  172. package/dist/editor-utils/hooks/index.d.ts +2 -0
  173. package/dist/editor-utils/hooks/index.d.ts.map +1 -0
  174. package/dist/editor-utils/hooks/index.js +1 -0
  175. package/dist/editor-utils/hooks/useEnsInfo.d.ts +15 -0
  176. package/dist/editor-utils/hooks/useEnsInfo.d.ts.map +1 -0
  177. package/dist/editor-utils/hooks/useEnsInfo.js +63 -0
  178. package/dist/editor-utils/index.d.ts +5 -0
  179. package/dist/editor-utils/index.d.ts.map +1 -0
  180. package/dist/editor-utils/index.js +4 -0
  181. package/dist/editor-utils/reducer.d.ts +3 -0
  182. package/dist/editor-utils/reducer.d.ts.map +1 -0
  183. package/dist/editor-utils/reducer.js +24 -0
  184. package/dist/editor-utils/storybook.d.ts +25 -0
  185. package/dist/editor-utils/storybook.d.ts.map +1 -0
  186. package/dist/editor-utils/storybook.js +118 -0
  187. package/dist/styles.css +786 -0
  188. package/dist/tsconfig.tsbuildinfo +1 -0
  189. package/package.json +102 -0
@@ -0,0 +1,5 @@
1
+ import { PowerhouseConfig } from "@powerhousedao/config/powerhouse";
2
+ export declare function backupIndexHtml(appPath: string, restore?: boolean): void;
3
+ export declare function removeBase64EnvValues(appPath: string): void;
4
+ export declare function readJsonFile(filePath: string): PowerhouseConfig | null;
5
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../connect-studio/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,UAAQ,QAS/D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,QA+BpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAStE"}
@@ -0,0 +1,43 @@
1
+ import fs from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ export function backupIndexHtml(appPath, restore = false) {
4
+ const filePath = join(appPath, "index.html");
5
+ const backupPath = join(appPath, "index.html.bak");
6
+ const paths = restore ? [backupPath, filePath] : [filePath, backupPath];
7
+ if (fs.existsSync(paths[0])) {
8
+ fs.copyFileSync(paths[0], paths[1]);
9
+ }
10
+ }
11
+ export function removeBase64EnvValues(appPath) {
12
+ backupIndexHtml(appPath);
13
+ const filePath = join(appPath, "index.html");
14
+ // Read the HTML file
15
+ fs.readFile(filePath, "utf-8", (err, data) => {
16
+ if (err) {
17
+ console.error("Error reading file:", err);
18
+ return;
19
+ }
20
+ // Use regex to replace the dynamic Base64 values with empty strings
21
+ const modifiedData = data
22
+ .replace(/"LOCAL_DOCUMENT_MODELS":\s*".*?",/, `"LOCAL_DOCUMENT_MODELS": "",`)
23
+ .replace(/"LOCAL_DOCUMENT_EDITORS":\s*".*?"/, `"LOCAL_DOCUMENT_EDITORS": ""`);
24
+ // Write the modified content back to the file
25
+ fs.writeFile(filePath, modifiedData, "utf-8", (err) => {
26
+ if (err) {
27
+ console.error("Error writing file:", err);
28
+ return;
29
+ }
30
+ });
31
+ });
32
+ }
33
+ export function readJsonFile(filePath) {
34
+ try {
35
+ const absolutePath = resolve(filePath);
36
+ const fileContents = fs.readFileSync(absolutePath, "utf-8");
37
+ return JSON.parse(fileContents);
38
+ }
39
+ catch (error) {
40
+ console.error(`Error reading file: ${filePath}`);
41
+ return null;
42
+ }
43
+ }
@@ -0,0 +1,12 @@
1
+ export declare const hmr: {
2
+ on: <T extends string>(event: T, cb: (payload: import("vite").InferCustomEventPayload<T>) => void) => void;
3
+ off: <T extends string>(event: T, cb: (payload: import("vite").InferCustomEventPayload<T>) => void) => void;
4
+ send: <T extends string>(event: T, data?: import("vite").InferCustomEventPayload<T>) => void;
5
+ accept: {
6
+ (): void;
7
+ (cb: (mod: import("vite/types/hot.js").ModuleNamespace | undefined) => void): void;
8
+ (dep: string, cb: (mod: import("vite/types/hot.js").ModuleNamespace | undefined) => void): void;
9
+ (deps: readonly string[], cb: (mods: Array<import("vite/types/hot.js").ModuleNamespace | undefined>) => void): void;
10
+ };
11
+ } | undefined;
12
+ //# sourceMappingURL=hmr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../../connect-studio/hmr.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG;;;;;;;;;;aAOH,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const hmr = import.meta.hot
2
+ ? {
3
+ on: import.meta.hot.on.bind(import.meta.hot),
4
+ off: import.meta.hot.off.bind(import.meta.hot),
5
+ send: import.meta.hot.send.bind(import.meta.hot),
6
+ accept: import.meta.hot.accept.bind(import.meta.hot),
7
+ }
8
+ : undefined;
@@ -0,0 +1,9 @@
1
+ export { backupIndexHtml, removeBase64EnvValues } from "./helpers.js";
2
+ export { hmr } from "./hmr.js";
3
+ export { startConnectStudio } from "./studio.js";
4
+ export type { ConnectStudioOptions } from "./types.js";
5
+ export { getStudioConfig } from "./vite-plugins/base.js";
6
+ export { viteLoadExternalPackages } from "./vite-plugins/external-packages.js";
7
+ export { generateImportMapPlugin } from "./vite-plugins/importmap.js";
8
+ export { viteConnectDevStudioPlugin } from "./vite-plugins/studio.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../connect-studio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { backupIndexHtml, removeBase64EnvValues } from "./helpers.js";
2
+ export { hmr } from "./hmr.js";
3
+ export { startConnectStudio } from "./studio.js";
4
+ export { getStudioConfig } from "./vite-plugins/base.js";
5
+ export { viteLoadExternalPackages } from "./vite-plugins/external-packages.js";
6
+ export { generateImportMapPlugin } from "./vite-plugins/importmap.js";
7
+ export { viteConnectDevStudioPlugin } from "./vite-plugins/studio.js";
@@ -0,0 +1,3 @@
1
+ import { StartServerOptions } from "./types.js";
2
+ export declare function startServer(options?: StartServerOptions): Promise<void>;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../connect-studio/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkEhD,wBAAsB,WAAW,CAC/B,OAAO,GAAE,kBAER,iBA8HF"}
@@ -0,0 +1,175 @@
1
+ import basicSsl from "@vitejs/plugin-basic-ssl";
2
+ import { exec } from "node:child_process";
3
+ import fs from "node:fs";
4
+ import { createRequire } from "node:module";
5
+ import { join, resolve } from "node:path";
6
+ import { createLogger, createServer } from "vite";
7
+ import { viteEnvs } from "vite-envs";
8
+ import { backupIndexHtml, removeBase64EnvValues } from "./helpers.js";
9
+ import { getStudioConfig } from "./vite-plugins/base.js";
10
+ import { viteLoadExternalPackages } from "./vite-plugins/external-packages.js";
11
+ import { generateImportMapPlugin } from "./vite-plugins/importmap.js";
12
+ import { viteConnectDevStudioPlugin } from "./vite-plugins/studio.js";
13
+ function resolvePackage(packageName, root = process.cwd()) {
14
+ // find connect installation
15
+ const require = createRequire(root);
16
+ return require.resolve(packageName, { paths: [root] });
17
+ }
18
+ function resolveConnect(root = process.cwd()) {
19
+ const connectHTMLPath = resolvePackage("@powerhousedao/connect", root);
20
+ return resolve(connectHTMLPath, "..");
21
+ }
22
+ // silences dynamic import warnings
23
+ const logger = createLogger();
24
+ // eslint-disable-next-line @typescript-eslint/unbound-method
25
+ const loggerWarn = logger.warn;
26
+ /**
27
+ * @param {string} msg
28
+ * @param {import('vite').LogOptions} options
29
+ */
30
+ logger.warn = (msg, options) => {
31
+ if (msg.includes("The above dynamic import cannot be analyzed by Vite.")) {
32
+ return;
33
+ }
34
+ loggerWarn(msg, options);
35
+ };
36
+ function ensureNodeVersion(minVersion = "20") {
37
+ const version = process.versions.node;
38
+ if (!version) {
39
+ return;
40
+ }
41
+ if (version < minVersion) {
42
+ console.error(`Node version ${minVersion} or higher is required. Current version: ${version}`);
43
+ process.exit(1);
44
+ }
45
+ }
46
+ function runShellScriptPlugin(scriptName, connectPath) {
47
+ return {
48
+ name: "vite-plugin-run-shell-script",
49
+ buildStart() {
50
+ const scriptPath = join(connectPath, scriptName);
51
+ if (fs.existsSync(scriptPath)) {
52
+ exec(`sh ${scriptPath}`, (error, stdout, stderr) => {
53
+ if (error) {
54
+ console.error(`Error executing the script: ${error.message}`);
55
+ removeBase64EnvValues(connectPath);
56
+ return;
57
+ }
58
+ if (stderr) {
59
+ console.error(stderr);
60
+ }
61
+ });
62
+ }
63
+ },
64
+ };
65
+ }
66
+ export async function startServer(options = {
67
+ logLevel: "debug",
68
+ }) {
69
+ // set from options, as they are dynamically loaded
70
+ process.env.LOG_LEVEL = options.logLevel;
71
+ // exits if node version is not compatible
72
+ ensureNodeVersion();
73
+ const connectPath = options.connectPath ?? resolveConnect();
74
+ const projectRoot = process.cwd();
75
+ // backups index html if running on windows
76
+ backupIndexHtml(connectPath, true);
77
+ const PORT = process.env.PORT ? parseInt(process.env.PORT) : 3000;
78
+ const HOST = process.env.HOST ? process.env.HOST : "0.0.0.0";
79
+ const OPEN_BROWSER = typeof process.env.OPEN_BROWSER === "string"
80
+ ? process.env.OPEN_BROWSER === "true"
81
+ : false;
82
+ const studioConfig = getStudioConfig();
83
+ // needed for viteEnvs
84
+ if (!fs.existsSync(join(connectPath, "src"))) {
85
+ fs.mkdirSync(join(connectPath, "src"));
86
+ }
87
+ process.env.PH_CONNECT_STUDIO_MODE = "true";
88
+ process.env.PH_CONNECT_CLI_VERSION = options.phCliVersion;
89
+ const computedEnv = { ...studioConfig, LOG_LEVEL: options.logLevel };
90
+ const config = {
91
+ customLogger: logger,
92
+ configFile: false,
93
+ root: connectPath,
94
+ server: {
95
+ port: PORT,
96
+ open: options.open ?? OPEN_BROWSER,
97
+ host: HOST,
98
+ },
99
+ resolve: {
100
+ alias: [
101
+ { find: "jszip", replacement: "jszip/dist/jszip.min.js" },
102
+ {
103
+ find: "react",
104
+ replacement: join(projectRoot, "node_modules", "react"),
105
+ },
106
+ {
107
+ find: "react-dom",
108
+ replacement: join(projectRoot, "node_modules", "react-dom"),
109
+ },
110
+ {
111
+ find: "@powerhousedao/reactor-browser",
112
+ replacement: join(projectRoot, "node_modules", "@powerhousedao", "reactor-browser", "dist/src"),
113
+ },
114
+ ],
115
+ // Resolve to the node_modules in the project root
116
+ // "@powerhousedao/design-system/scalars": join(
117
+ // projectRoot,
118
+ // "node_modules",
119
+ // "@powerhousedao",
120
+ // "design-system",
121
+ // "dist",
122
+ // "scalars",
123
+ // ),
124
+ // "@powerhousedao/design-system": join(
125
+ // projectRoot,
126
+ // "node_modules",
127
+ // "@powerhousedao",
128
+ // "design-system",
129
+ // ),
130
+ // "@powerhousedao/scalars": join(
131
+ // projectRoot,
132
+ // "node_modules",
133
+ // "@powerhousedao",
134
+ // "scalars",
135
+ // ),
136
+ // "@powerhousedao/reactor-browser/hooks/useUiNodesContext": join(
137
+ // projectRoot,
138
+ // "node_modules",
139
+ // "@powerhousedao",
140
+ // "reactor-browser",
141
+ // "dist/src/hooks",
142
+ // ),
143
+ // react: join(projectRoot, "node_modules", "react"),
144
+ // "react-dom": join(projectRoot, "node_modules", "react-dom"),
145
+ // },
146
+ },
147
+ plugins: [
148
+ viteConnectDevStudioPlugin(true, connectPath),
149
+ viteLoadExternalPackages(options.packages, true),
150
+ viteEnvs({
151
+ declarationFile: join(connectPath, ".env"),
152
+ computedEnv,
153
+ }),
154
+ runShellScriptPlugin("vite-envs.sh", connectPath),
155
+ options.https &&
156
+ basicSsl({
157
+ name: "Powerhouse Connect Studio",
158
+ }),
159
+ generateImportMapPlugin(connectPath, [
160
+ { name: "react", provider: "esm.sh" },
161
+ { name: "react-dom", provider: "esm.sh" },
162
+ "@powerhousedao/reactor-browser",
163
+ ]),
164
+ ],
165
+ build: {
166
+ rollupOptions: {
167
+ input: "index.html",
168
+ },
169
+ },
170
+ };
171
+ const server = await createServer(config);
172
+ await server.listen();
173
+ server.printUrls();
174
+ server.bindCLIShortcuts({ print: true });
175
+ }
@@ -0,0 +1,3 @@
1
+ import { ConnectStudioOptions } from "./types.js";
2
+ export declare function startConnectStudio(options: ConnectStudioOptions): Promise<void> | undefined;
3
+ //# sourceMappingURL=studio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../connect-studio/studio.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,YAAY,CAAC;AAEtE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,6BA8E/D"}
@@ -0,0 +1,65 @@
1
+ import { dirname, isAbsolute, join } from "path";
2
+ import { readJsonFile } from "./helpers.js";
3
+ import { startServer } from "./server.js";
4
+ export function startConnectStudio(options) {
5
+ const serverOptions = {};
6
+ if (options.port) {
7
+ process.env.PORT = options.port;
8
+ }
9
+ if (options.host) {
10
+ process.env.HOST = options.host.toString();
11
+ }
12
+ if (typeof options.open === "boolean") {
13
+ serverOptions.open = options.open;
14
+ }
15
+ if (options.configFile) {
16
+ const config = readJsonFile(options.configFile);
17
+ if (!config)
18
+ return;
19
+ const configFileDir = dirname(options.configFile);
20
+ if (config.packages && config.packages.length > 0) {
21
+ serverOptions.packages = config.packages.map((p) => p.packageName);
22
+ }
23
+ if (config.documentModelsDir) {
24
+ process.env.LOCAL_DOCUMENT_MODELS = isAbsolute(config.documentModelsDir)
25
+ ? config.documentModelsDir
26
+ : join(configFileDir, config.documentModelsDir);
27
+ }
28
+ if (config.editorsDir) {
29
+ process.env.LOCAL_DOCUMENT_EDITORS = isAbsolute(config.editorsDir)
30
+ ? config.editorsDir
31
+ : join(configFileDir, config.editorsDir);
32
+ }
33
+ if (config.studio?.port) {
34
+ process.env.PORT = config.studio.port.toString();
35
+ }
36
+ if (typeof config.studio?.openBrowser === "boolean") {
37
+ process.env.OPEN_BROWSER = config.studio.openBrowser.toString();
38
+ }
39
+ if (config.studio?.host) {
40
+ process.env.HOST = config.studio.host;
41
+ }
42
+ }
43
+ if (options.packages && options.packages.length > 0) {
44
+ serverOptions.packages = options.packages.map((p) => p.packageName);
45
+ }
46
+ if (options.localEditors) {
47
+ process.env.LOCAL_DOCUMENT_EDITORS = options.localEditors;
48
+ }
49
+ if (options.localDocuments) {
50
+ process.env.LOCAL_DOCUMENT_MODELS = options.localDocuments;
51
+ }
52
+ if (options.https) {
53
+ serverOptions.https = options.https;
54
+ }
55
+ if (options.phCliVersion) {
56
+ serverOptions.phCliVersion = options.phCliVersion;
57
+ }
58
+ if (options.logLevel) {
59
+ process.env.LOG_LEVEL = options.logLevel;
60
+ serverOptions.logLevel = options.logLevel;
61
+ }
62
+ return startServer(serverOptions).catch((error) => {
63
+ throw error;
64
+ });
65
+ }
@@ -0,0 +1,25 @@
1
+ export type ConnectStudioOptions = {
2
+ connectPath?: string;
3
+ port?: string;
4
+ host?: boolean;
5
+ https?: boolean;
6
+ configFile?: string;
7
+ localEditors?: string;
8
+ localDocuments?: string;
9
+ open?: boolean;
10
+ packages?: {
11
+ packageName: string;
12
+ }[];
13
+ phCliVersion?: string;
14
+ logLevel?: "verbose" | "debug" | "info" | "warn" | "error" | "silent";
15
+ };
16
+ export type StartServerOptions = {
17
+ connectPath?: string;
18
+ configFile?: string;
19
+ packages?: string[];
20
+ https?: boolean;
21
+ open?: boolean;
22
+ phCliVersion?: string;
23
+ logLevel?: "verbose" | "debug" | "info" | "warn" | "error" | "silent";
24
+ };
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../connect-studio/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACvE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { Package } from "resolve.exports";
2
+ import { Plugin, PluginOption } from "vite";
3
+ export declare const externalIds: RegExp[];
4
+ export declare const LOCAL_DOCUMENT_MODELS_IMPORT = "LOCAL_DOCUMENT_MODELS";
5
+ export declare const LOCAL_DOCUMENT_EDITORS_IMPORT = "LOCAL_DOCUMENT_EDITORS";
6
+ export declare const HMR_MODULE_IMPORT = "PH:HMR_MODULE";
7
+ export declare const STUDIO_IMPORTS: readonly ["LOCAL_DOCUMENT_MODELS", "LOCAL_DOCUMENT_EDITORS", "PH:HMR_MODULE"];
8
+ export declare function getStudioConfig(env?: Record<string, string>): {
9
+ [LOCAL_DOCUMENT_MODELS_IMPORT]?: string;
10
+ [LOCAL_DOCUMENT_EDITORS_IMPORT]?: string;
11
+ LOAD_EXTERNAL_PACKAGES?: string;
12
+ };
13
+ export declare function viteIgnoreStaticImport(_importKeys: (string | RegExp | false | undefined)[]): Plugin;
14
+ export declare function viteReplaceImports(imports: Record<string, string>): PluginOption;
15
+ export declare function findPackageJson(packageName: string): Promise<{
16
+ packageJson: Package;
17
+ path: string;
18
+ }>;
19
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../connect-studio/vite-plugins/base.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAuB,MAAM,EAAE,YAAY,EAAiB,MAAM,MAAM,CAAC;AAGhF,eAAO,MAAM,WAAW,UAGvB,CAAC;AAEF,eAAO,MAAM,4BAA4B,0BAA0B,CAAC;AACpE,eAAO,MAAM,6BAA6B,2BAA2B,CAAC;AACtE,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,eAAO,MAAM,cAAc,+EAIjB,CAAC;AAEX,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAC7D,CAAC,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC;IACxC,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,CAAC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CA8BA;AAKD,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,EAAE,GACnD,MAAM,CAgER;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,YAAY,CAgDd;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM;iBAsBT,OAAO;;GAOtD"}
@@ -0,0 +1,162 @@
1
+ import fs from "fs/promises";
2
+ import MagicString from "magic-string";
3
+ import { createRequire } from "node:module";
4
+ import path, { basename, dirname } from "node:path";
5
+ import { normalizePath } from "vite";
6
+ // matches @powerhousedao/connect, react, react-dom and all their sub-imports like react-dom/client
7
+ export const externalIds = [
8
+ /^react(-dom)?(\/.*)?$/,
9
+ /^@powerhousedao\/reactor-browser(\/.*)?$/,
10
+ ];
11
+ export const LOCAL_DOCUMENT_MODELS_IMPORT = "LOCAL_DOCUMENT_MODELS";
12
+ export const LOCAL_DOCUMENT_EDITORS_IMPORT = "LOCAL_DOCUMENT_EDITORS";
13
+ export const HMR_MODULE_IMPORT = "PH:HMR_MODULE";
14
+ export const STUDIO_IMPORTS = [
15
+ LOCAL_DOCUMENT_MODELS_IMPORT,
16
+ LOCAL_DOCUMENT_EDITORS_IMPORT,
17
+ HMR_MODULE_IMPORT,
18
+ ];
19
+ export function getStudioConfig(env) {
20
+ const config = {};
21
+ const LOCAL_DOCUMENT_MODELS = process.env.LOCAL_DOCUMENT_MODELS ?? env?.LOCAL_DOCUMENT_MODELS;
22
+ const LOCAL_DOCUMENT_EDITORS = process.env.LOCAL_DOCUMENT_EDITORS ?? env?.LOCAL_DOCUMENT_EDITORS;
23
+ const LOCAL_DOCUMENT_MODELS_PATH = LOCAL_DOCUMENT_MODELS
24
+ ? path.resolve(process.cwd(), LOCAL_DOCUMENT_MODELS)
25
+ : undefined;
26
+ const LOCAL_DOCUMENT_EDITORS_PATH = LOCAL_DOCUMENT_EDITORS
27
+ ? path.resolve(process.cwd(), LOCAL_DOCUMENT_EDITORS)
28
+ : undefined;
29
+ if (LOCAL_DOCUMENT_MODELS_PATH) {
30
+ config[LOCAL_DOCUMENT_MODELS_IMPORT] = normalizePath(LOCAL_DOCUMENT_MODELS_PATH);
31
+ }
32
+ if (LOCAL_DOCUMENT_EDITORS_PATH) {
33
+ config[LOCAL_DOCUMENT_EDITORS_IMPORT] = normalizePath(LOCAL_DOCUMENT_EDITORS_PATH);
34
+ }
35
+ if (typeof process.env.LOAD_EXTERNAL_PACKAGES !== "undefined") {
36
+ config.LOAD_EXTERNAL_PACKAGES = process.env.LOAD_EXTERNAL_PACKAGES;
37
+ }
38
+ return config;
39
+ }
40
+ // https://github.com/vitejs/vite/issues/6393#issuecomment-1006819717
41
+ // vite dev server doesn't support setting dependencies as external
42
+ // as when building the app.
43
+ export function viteIgnoreStaticImport(_importKeys) {
44
+ const importKeys = _importKeys.filter((key) => typeof key === "string" || key instanceof RegExp);
45
+ return {
46
+ name: "vite-plugin-ignore-static-import",
47
+ enforce: "pre",
48
+ // vite will still append /@id/ to an external import
49
+ // so this will rewrite the 'vite:import-analysis' prefix
50
+ configResolved(resolvedConfig) {
51
+ const values = importKeys.map((key) => typeof key === "string" ? key : key.source);
52
+ const reg = new RegExp(`("|')\\/@id\\/(${values.join("|")})(\\/[^"'\\\\]*)?\\1`, "g");
53
+ resolvedConfig.plugins.push({
54
+ name: "vite-plugin-ignore-static-import-replace-idprefix",
55
+ transform: (code) => {
56
+ const s = new MagicString(code);
57
+ const matches = code.matchAll(reg);
58
+ let modified = false;
59
+ for (const match of matches) {
60
+ s.overwrite(match.index, match.index + match[0].length, match[0].replace("/@id/", ""));
61
+ modified = true;
62
+ }
63
+ if (!modified)
64
+ return null;
65
+ return {
66
+ code: s.toString(),
67
+ map: s.generateMap({ hires: true }), // Generate an accurate source map
68
+ };
69
+ },
70
+ });
71
+ },
72
+ // prevents the external import from being transformed to 'node_modules/...'
73
+ resolveId: (id) => {
74
+ if (importKeys.some((key) => typeof key === "string" ? key === id : key.test(id))) {
75
+ return { id, external: true };
76
+ }
77
+ },
78
+ // returns empty string to prevent "Pre-transform error: Failed to load url"
79
+ load(id) {
80
+ if (importKeys.some((key) => typeof key === "string" ? key === id : key.test(id))) {
81
+ return "";
82
+ }
83
+ },
84
+ };
85
+ }
86
+ export function viteReplaceImports(imports) {
87
+ const importKeys = Object.keys(imports);
88
+ return {
89
+ name: "vite-plugin-connect-replace-imports",
90
+ enforce: "pre",
91
+ config(config) {
92
+ // adds the provided paths to be resolved by vite
93
+ const resolve = config.resolve ?? {};
94
+ const alias = resolve.alias;
95
+ let resolvedAlias;
96
+ if (Array.isArray(alias)) {
97
+ const arrayAlias = [...alias];
98
+ arrayAlias.push(...Object.entries(imports).map(([find, replacement]) => ({
99
+ find,
100
+ replacement,
101
+ })));
102
+ resolvedAlias = arrayAlias;
103
+ }
104
+ else if (typeof alias === "object") {
105
+ resolvedAlias = {
106
+ ...alias,
107
+ ...imports,
108
+ };
109
+ }
110
+ else if (typeof alias === "undefined") {
111
+ resolvedAlias = { ...imports };
112
+ }
113
+ else {
114
+ console.error("resolve.alias was not recognized");
115
+ }
116
+ if (resolvedAlias) {
117
+ resolve.alias = resolvedAlias;
118
+ config.resolve = resolve;
119
+ }
120
+ },
121
+ resolveId: (id) => {
122
+ // if the path was not provided then declares the local
123
+ // imports as external so that vite ignores them
124
+ if (importKeys.includes(id)) {
125
+ return {
126
+ id,
127
+ external: true,
128
+ };
129
+ }
130
+ },
131
+ };
132
+ }
133
+ export async function findPackageJson(packageName) {
134
+ let packagePath;
135
+ try {
136
+ // Locate the package entry point
137
+ const require = createRequire(process.cwd());
138
+ packagePath = require.resolve(packageName, { paths: [process.cwd()] });
139
+ }
140
+ catch (err) {
141
+ throw new Error(`Failed to resolve package: ${packageName}`, {
142
+ cause: err,
143
+ });
144
+ }
145
+ // Walk up the directory tree to find package.json
146
+ let dir = dirname(packagePath);
147
+ while (dir !== "/" && dir !== "." && dir !== "node_modules") {
148
+ if (basename(dir) === "dist") {
149
+ dir = dirname(dir);
150
+ }
151
+ const pkgJsonPath = `${dir}/package.json`;
152
+ try {
153
+ await fs.access(pkgJsonPath);
154
+ const file = await fs.readFile(pkgJsonPath, "utf-8");
155
+ return { packageJson: JSON.parse(file), path: dir };
156
+ }
157
+ catch {
158
+ dir = dirname(dir); // Move up one level
159
+ }
160
+ }
161
+ throw new Error(`package.json not found for ${packageName}`);
162
+ }
@@ -0,0 +1,6 @@
1
+ import { PluginOption } from "vite";
2
+ export declare const EXTERNAL_PACKAGES_IMPORT = "PH:EXTERNAL_PACKAGES";
3
+ export declare const IMPORT_SCRIPT_FILE: string;
4
+ export declare function generateImportScript(packages: string[]): string;
5
+ export declare const viteLoadExternalPackages: (packages: string[] | undefined, hmr?: boolean) => PluginOption;
6
+ //# sourceMappingURL=external-packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-packages.d.ts","sourceRoot":"","sources":["../../../connect-studio/vite-plugins/external-packages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,YAAY,EAAE,MAAM,MAAM,CAAC;AAOnD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAiCtD;AAED,eAAO,MAAM,wBAAwB,aACzB,MAAM,EAAE,GAAG,SAAS,oBAE7B,YA4CF,CAAC"}