@base44-preview/vite-plugin 1.0.44-pr.129.61a8371 → 1.0.44-pr.131.04821df
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/base44-runtime-plugin.d.ts.map +1 -1
- package/dist/base44-runtime-plugin.js +12 -2
- package/dist/base44-runtime-plugin.js.map +1 -1
- package/dist/jsx-processor.d.ts.map +1 -1
- package/dist/jsx-processor.js +3 -3
- package/dist/jsx-processor.js.map +1 -1
- package/dist/visual-edit-plugin.d.ts.map +1 -1
- package/dist/visual-edit-plugin.js +4 -1
- package/dist/visual-edit-plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/base44-runtime-plugin.ts +12 -2
- package/src/jsx-processor.ts +2 -2
- package/src/visual-edit-plugin.md +5 -6
- package/src/visual-edit-plugin.ts +4 -1
package/README.md
CHANGED
|
@@ -191,6 +191,27 @@ npm run build # TypeScript compilation (plugin)
|
|
|
191
191
|
npm run build:bridge # tsup bundle (bridge ES module for browsers)
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
+
## Server-side static-egress TCP
|
|
195
|
+
|
|
196
|
+
The server-only `base44:runtime` module exports `staticEgress.connect(address,
|
|
197
|
+
options?)`. It delegates to the TCP helper installed by Base44's full-stack
|
|
198
|
+
upload wrapper; Vite does not open sockets or read workspace configuration at
|
|
199
|
+
build time. A deployment missing that helper rejects with a rebuild/redeploy
|
|
200
|
+
error. Local development without the injected helper does not fall back to
|
|
201
|
+
direct TCP.
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
import { staticEgress } from "base44:runtime";
|
|
205
|
+
const socket = await staticEgress.connect({ hostname: "sftp.example.com", port: 2222 });
|
|
206
|
+
// Use the streams with a compatible SSH client; preserve host-key verification.
|
|
207
|
+
await socket.close();
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Requires the companion platform TCP runtime and an enabled workspace static-egress
|
|
211
|
+
configuration. Rebuild after upgrading this plugin. Currently only raw TCP
|
|
212
|
+
(`secureTransport: "off"`, the default) is supported; SSH provides its own
|
|
213
|
+
encryption. TLS and STARTTLS options reject until explicitly supported.
|
|
214
|
+
|
|
194
215
|
## License
|
|
195
216
|
|
|
196
217
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base44-runtime-plugin.d.ts","sourceRoot":"","sources":["../src/base44-runtime-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"base44-runtime-plugin.d.ts","sourceRoot":"","sources":["../src/base44-runtime-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAsFnC,wBAAgB,mBAAmB,IAAI,MAAM,CA0B5C"}
|
|
@@ -12,13 +12,15 @@
|
|
|
12
12
|
* is no runtime path to it, and no amount of wrapping the deployed entry creates
|
|
13
13
|
* one.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* SECRETS AND BACKGROUND WORK NEED NO EXTRA WRAPPER. Cloudflare now ships both
|
|
16
16
|
* primitives ambiently from `cloudflare:workers` (`env` since 2025-03-17,
|
|
17
17
|
* `waitUntil` since 2025-08-08), backed by workerd's own AsyncContextFrame and
|
|
18
18
|
* IoContext. The backend-function bundler predates that and threads a context
|
|
19
19
|
* through `globalThis.Base44` because it owns the generated entry; here the
|
|
20
20
|
* framework owns the entry, and borrowing the platform's ambient accessors means
|
|
21
|
-
* we never have to.
|
|
21
|
+
* we never have to for those APIs. Static-egress TCP delegates to the helper
|
|
22
|
+
* installed by Base44's deployed entry wrapper; this module only adapts the
|
|
23
|
+
* public import. Without that wrapper (including local dev), TCP fails closed.
|
|
22
24
|
*/
|
|
23
25
|
const SPECIFIER = "base44:runtime";
|
|
24
26
|
// Rollup convention: a resolved virtual id starts with NUL so no other plugin
|
|
@@ -66,6 +68,14 @@ export const secrets = {
|
|
|
66
68
|
return typeof value === "string" ? value : undefined;
|
|
67
69
|
},
|
|
68
70
|
};
|
|
71
|
+
|
|
72
|
+
export const staticEgress = Object.freeze({
|
|
73
|
+
async connect(address, options) {
|
|
74
|
+
const api = globalThis.Base44?.staticEgress;
|
|
75
|
+
if (!api) throw new Error("Static egress TCP is unavailable; rebuild and redeploy with a supported runtime");
|
|
76
|
+
return api.connect(address, options);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
69
79
|
`;
|
|
70
80
|
export function base44RuntimePlugin() {
|
|
71
81
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base44-runtime-plugin.js","sourceRoot":"","sources":["../src/base44-runtime-plugin.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"base44-runtime-plugin.js","sourceRoot":"","sources":["../src/base44-runtime-plugin.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,8EAA8E;AAC9E,gDAAgD;AAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC,+EAA+E;AAC/E,iFAAiF;AACjF,sEAAsE;AACtE,MAAM,aAAa,GACjB,8EAA8E,CAAC;AAEjF,SAAS,iBAAiB,CAAC,EAAU;IACnC,IAAI,EAAE,KAAK,uBAAuB;QAAE,OAAO,aAAa,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBtB,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,0EAA0E;QAC1E,+BAA+B;QAC/B,OAAO,EAAE,KAAK;QAEd,SAAS,CAAC,EAAE;YACV,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,wCAAwC,MAAM,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YAElC,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,yDAAyD,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,EAAE;YACL,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-processor.d.ts","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jsx-processor.d.ts","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAOvC,qBAAa,YAAY;IAOrB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAPlB,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,oBAAoB,CAAuB;gBAGzC,KAAK,EAAE,OAAO,CAAC,EACf,QAAQ,EAAE,MAAM;IAQ1B,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAe5D,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,+BAA+B;CAgFxC"}
|
package/dist/jsx-processor.js
CHANGED
|
@@ -3,7 +3,6 @@ import { DataItemIdProcessor } from "./processors/collection-item-id-processor.j
|
|
|
3
3
|
import { DataItemFieldProcessor } from "./processors/collection-item-field-processor.js";
|
|
4
4
|
import { StaticArrayProcessor } from "./processors/static-array-processor.js";
|
|
5
5
|
import { DOCUMENT_ELEMENTS } from "./consts.js";
|
|
6
|
-
import { JSXUtils } from "./jsx-utils.js";
|
|
7
6
|
export class JSXProcessor {
|
|
8
7
|
types;
|
|
9
8
|
filename;
|
|
@@ -20,10 +19,11 @@ export class JSXProcessor {
|
|
|
20
19
|
this.staticArrayProcessor = new StaticArrayProcessor(types);
|
|
21
20
|
}
|
|
22
21
|
processJSXElement(path) {
|
|
23
|
-
if (DOCUMENT_ELEMENTS.includes(JSXUtils.getElementName(path.node) ?? ""))
|
|
24
|
-
return;
|
|
25
22
|
if (this.hasAttribute(path, "data-source-location"))
|
|
26
23
|
return;
|
|
24
|
+
const { name } = path.node;
|
|
25
|
+
if (this.types.isJSXIdentifier(name) && DOCUMENT_ELEMENTS.includes(name.name))
|
|
26
|
+
return;
|
|
27
27
|
this.addSourceLocationAttribute(path);
|
|
28
28
|
this.addDynamicContentAttribute(path);
|
|
29
29
|
this.collectionIdProcessor.process(path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-processor.js","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jsx-processor.js","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,OAAO,YAAY;IAOb;IACA;IAPF,qBAAqB,CAAwB;IAC7C,mBAAmB,CAAsB;IACzC,sBAAsB,CAAyB;IAC/C,oBAAoB,CAAuB;IAEnD,YACU,KAAe,EACf,QAAgB;QADhB,UAAK,GAAL,KAAK,CAAU;QACf,aAAQ,GAAR,QAAQ,CAAQ;QAExB,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,iBAAiB,CAAC,IAAmC;QACnD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,sBAAsB,CAAC;YAAE,OAAO;QAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAEtF,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEO,0BAA0B,CAChC,IAAmC;QAEnC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAC1B,IAAI,CAAC,KAAK,CAAC,YAAY,CACrB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAChD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAChC,CACF,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAChC,IAAmC;QAEnC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE;YAAE,OAAO;QAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,+BAA+B,CACpD,aAAa,CAAC,IAAoB,CACnC,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CACjD,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAC5C,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CACzB,YAAY,GAAG,CAAC,EAChB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,YAAY,CACrB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAChD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CACvD,CACF,CAAC;IACJ,CAAC;IAEO,YAAY,CAClB,IAAmC,EACnC,IAAY;QAEZ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAC9B,CAAC,IAA2C,EAAE,EAAE,CAC9C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAC1B,CAAC;IACJ,CAAC;IAEO,+BAA+B,CAAC,UAAwB;QAC9D,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,MAAM,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE;YAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAI,IAAiC,CAAC,UAAU,CAAC;gBACjE,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;oBAAE,OAAO,IAAI,CAAC;YACrD,CAAC;YAED,IACE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBACjC,IAA0B,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAClD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrD,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnD,IAAI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE1D,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG;oBACnB,OAAO;oBACP,OAAO;oBACP,MAAM;oBACN,MAAM;oBACN,OAAO;oBACP,MAAM;oBACN,SAAS;iBACV,CAAC;gBACF,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAE,IAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC5E,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,IAA6B,EAAQ,EAAE;YAC3D,IAAI,iBAAiB;gBAAE,OAAO;YAC9B,IAAI,SAAS,CAAC,IAAyB,CAAC,EAAE,CAAC;gBACzC,iBAAiB,GAAG,IAAI,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,iBAAiB;oBAAE,OAAO;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBAExB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;wBAC1B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;4BAC1D,YAAY,CAAC,KAAgC,CAAC,CAAC;wBACjD,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oBACjE,YAAY,CAAC,KAAgC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,EAAE,UAAU,IAAI,EAAE,CAAC;QAC/D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,iBAAiB;gBAAE,MAAM;YAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClD,YAAY,CAAC,IAAI,CAAC,KAA2C,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,iBAAiB;gBAAE,MAAM;YAC7B,YAAY,CAAC,KAA2C,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-edit-plugin.d.ts","sourceRoot":"","sources":["../src/visual-edit-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,MAAM,EAAc,MAAM,MAAM,CAAC;AAK1D,wBAAgB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"visual-edit-plugin.d.ts","sourceRoot":"","sources":["../src/visual-edit-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,MAAM,EAAc,MAAM,MAAM,CAAC;AAK1D,wBAAgB,gBAAgB,IAkFzB,MAAM,CACZ"}
|
|
@@ -25,7 +25,10 @@ export function visualEditPlugin() {
|
|
|
25
25
|
if (id.includes("node_modules") || id.includes("visual-edit-agent")) {
|
|
26
26
|
return null;
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
// TanStack Router serves route components as `route.jsx?tsr-split=...` modules;
|
|
29
|
+
// other queries (?raw, ?url, ?worker) aren't JSX source.
|
|
30
|
+
const [idPath, idQuery] = id.split("?");
|
|
31
|
+
if (!/\.(jsx?|tsx?)$/.test(idPath) || (idQuery && !/tsr-(split|shared)/.test(idQuery))) {
|
|
29
32
|
return null;
|
|
30
33
|
}
|
|
31
34
|
const filename = extractFilename(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-edit-plugin.js","sourceRoot":"","sources":["../src/visual-edit-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,mEAAmE;QACnE,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,oEAAoE;QACpE,mCAAmC;QACnC,KAAK,EAAE,CAAC,MAAkB,EAAE,GAAc,EAAE,EAAE,CAC5C,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;QAC1D,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,kBAAkB,CAAC,IAAS;YAC1B,MAAM,cAAc,GAAG,sEAAsE,gBAAgB,iBAAiB,CAAC;YAC/H,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,SAAS,CAAC,IAAS,EAAE,EAAO;YAC1B,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,
|
|
1
|
+
{"version":3,"file":"visual-edit-plugin.js","sourceRoot":"","sources":["../src/visual-edit-plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -14,13 +14,15 @@ import type { Plugin } from "vite";
|
|
|
14
14
|
* is no runtime path to it, and no amount of wrapping the deployed entry creates
|
|
15
15
|
* one.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
17
|
+
* SECRETS AND BACKGROUND WORK NEED NO EXTRA WRAPPER. Cloudflare now ships both
|
|
18
18
|
* primitives ambiently from `cloudflare:workers` (`env` since 2025-03-17,
|
|
19
19
|
* `waitUntil` since 2025-08-08), backed by workerd's own AsyncContextFrame and
|
|
20
20
|
* IoContext. The backend-function bundler predates that and threads a context
|
|
21
21
|
* through `globalThis.Base44` because it owns the generated entry; here the
|
|
22
22
|
* framework owns the entry, and borrowing the platform's ambient accessors means
|
|
23
|
-
* we never have to.
|
|
23
|
+
* we never have to for those APIs. Static-egress TCP delegates to the helper
|
|
24
|
+
* installed by Base44's deployed entry wrapper; this module only adapts the
|
|
25
|
+
* public import. Without that wrapper (including local dev), TCP fails closed.
|
|
24
26
|
*/
|
|
25
27
|
|
|
26
28
|
const SPECIFIER = "base44:runtime";
|
|
@@ -72,6 +74,14 @@ export const secrets = {
|
|
|
72
74
|
return typeof value === "string" ? value : undefined;
|
|
73
75
|
},
|
|
74
76
|
};
|
|
77
|
+
|
|
78
|
+
export const staticEgress = Object.freeze({
|
|
79
|
+
async connect(address, options) {
|
|
80
|
+
const api = globalThis.Base44?.staticEgress;
|
|
81
|
+
if (!api) throw new Error("Static egress TCP is unavailable; rebuild and redeploy with a supported runtime");
|
|
82
|
+
return api.connect(address, options);
|
|
83
|
+
},
|
|
84
|
+
});
|
|
75
85
|
`;
|
|
76
86
|
|
|
77
87
|
export function base44RuntimePlugin(): Plugin {
|
package/src/jsx-processor.ts
CHANGED
|
@@ -5,7 +5,6 @@ import { DataItemIdProcessor } from "./processors/collection-item-id-processor.j
|
|
|
5
5
|
import { DataItemFieldProcessor } from "./processors/collection-item-field-processor.js";
|
|
6
6
|
import { StaticArrayProcessor } from "./processors/static-array-processor.js";
|
|
7
7
|
import { DOCUMENT_ELEMENTS } from "./consts.js";
|
|
8
|
-
import { JSXUtils } from "./jsx-utils.js";
|
|
9
8
|
|
|
10
9
|
export class JSXProcessor {
|
|
11
10
|
private collectionIdProcessor: CollectionIdProcessor;
|
|
@@ -24,8 +23,9 @@ export class JSXProcessor {
|
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
processJSXElement(path: NodePath<t.JSXOpeningElement>): void {
|
|
27
|
-
if (DOCUMENT_ELEMENTS.includes(JSXUtils.getElementName(path.node) ?? "")) return;
|
|
28
26
|
if (this.hasAttribute(path, "data-source-location")) return;
|
|
27
|
+
const { name } = path.node;
|
|
28
|
+
if (this.types.isJSXIdentifier(name) && DOCUMENT_ELEMENTS.includes(name.name)) return;
|
|
29
29
|
|
|
30
30
|
this.addSourceLocationAttribute(path);
|
|
31
31
|
this.addDynamicContentAttribute(path);
|
|
@@ -108,13 +108,12 @@ Uses `@babel/parser` with 15 syntax plugins to handle any modern TypeScript/Reac
|
|
|
108
108
|
Visits every `JSXElement` node. For each one:
|
|
109
109
|
|
|
110
110
|
1. **Skip JSX Fragments** (`<>...</>`) - they have no opening tag to attach attributes to
|
|
111
|
-
2. **Skip
|
|
112
|
-
3. **
|
|
113
|
-
4. **
|
|
114
|
-
5. **
|
|
115
|
-
6. **Insert BOTH attributes** at position 0 of the attributes array (appear first in output)
|
|
111
|
+
2. **Skip already-instrumented elements** - checks if `data-source-location` already exists (idempotent)
|
|
112
|
+
3. **Extract location** from AST node: `openingElement.loc.start` gives `{ line, column }`
|
|
113
|
+
4. **Detect dynamic content** via `checkIfElementHasDynamicContent()` (see below)
|
|
114
|
+
5. **Insert BOTH attributes** at position 0 of the attributes array (appear first in output)
|
|
116
115
|
|
|
117
|
-
**`data-dynamic-content` is added to
|
|
116
|
+
**`data-dynamic-content` is added to EVERY JSX element unconditionally** — it is always present alongside `data-source-location`. The only thing that changes is the value: `"true"` if the element's own attributes OR children contain any dynamic patterns (expressions, props, function calls, spread attributes, etc.), or `"false"` if everything is purely static. This means every element in the DOM carries both attributes, so the visual editor can always check any element's dynamic status without extra logic.
|
|
118
117
|
|
|
119
118
|
### Step 4: Dynamic Content Detection (lines 8-98)
|
|
120
119
|
|
|
@@ -29,7 +29,10 @@ export function visualEditPlugin() {
|
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
// TanStack Router serves route components as `route.jsx?tsr-split=...` modules;
|
|
33
|
+
// other queries (?raw, ?url, ?worker) aren't JSX source.
|
|
34
|
+
const [idPath, idQuery] = id.split("?");
|
|
35
|
+
if (!/\.(jsx?|tsx?)$/.test(idPath!) || (idQuery && !/tsr-(split|shared)/.test(idQuery))) {
|
|
33
36
|
return null;
|
|
34
37
|
}
|
|
35
38
|
|