@base44-preview/vite-plugin 1.0.48-pr.142.9fcc12e → 1.0.49-pr.143.ec93a38
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/dist/jsx-processor.d.ts +1 -0
- package/dist/jsx-processor.d.ts.map +1 -1
- package/dist/jsx-processor.js +8 -0
- package/dist/jsx-processor.js.map +1 -1
- package/dist/private-data-sources/manifest.d.ts.map +1 -1
- package/dist/private-data-sources/manifest.js +15 -10
- package/dist/private-data-sources/manifest.js.map +1 -1
- package/dist/private-data-sources/mongodb.d.ts +1 -1
- package/dist/private-data-sources/mongodb.d.ts.map +1 -1
- package/dist/private-data-sources/mongodb.js +9 -3
- package/dist/private-data-sources/mongodb.js.map +1 -1
- package/dist/private-data-sources/oracle.d.ts.map +1 -1
- package/dist/private-data-sources/oracle.js +3 -0
- package/dist/private-data-sources/oracle.js.map +1 -1
- package/dist/private-data-sources/tcp.js +1 -1
- package/dist/private-data-sources/tcp.js.map +1 -1
- package/dist/private-data-sources-plugin.d.ts +1 -1
- package/dist/private-data-sources-plugin.d.ts.map +1 -1
- package/dist/private-data-sources-plugin.js +36 -12
- package/dist/private-data-sources-plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/jsx-processor.ts +7 -0
- package/src/private-data-sources/manifest.ts +17 -13
- package/src/private-data-sources/mongodb.ts +10 -9
- package/src/private-data-sources/oracle.ts +4 -1
- package/src/private-data-sources/tcp.ts +1 -1
- package/src/private-data-sources-plugin.ts +35 -13
package/dist/jsx-processor.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class JSXProcessor {
|
|
|
11
11
|
processJSXElement(path: NodePath<t.JSXOpeningElement>): void;
|
|
12
12
|
private addSourceLocationAttribute;
|
|
13
13
|
private addDynamicContentAttribute;
|
|
14
|
+
private isFragment;
|
|
14
15
|
private hasAttribute;
|
|
15
16
|
private checkIfElementHasDynamicContent;
|
|
16
17
|
}
|
|
@@ -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;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;
|
|
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;IAiB5D,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,+BAA+B;CAgFxC"}
|
package/dist/jsx-processor.js
CHANGED
|
@@ -24,6 +24,9 @@ export class JSXProcessor {
|
|
|
24
24
|
const { name } = path.node;
|
|
25
25
|
if (this.types.isJSXIdentifier(name) && DOCUMENT_ELEMENTS.includes(name.name))
|
|
26
26
|
return;
|
|
27
|
+
// React rejects any Fragment prop but key/children ("Invalid prop supplied to React.Fragment").
|
|
28
|
+
if (this.isFragment(name))
|
|
29
|
+
return;
|
|
27
30
|
this.addSourceLocationAttribute(path);
|
|
28
31
|
this.addDynamicContentAttribute(path);
|
|
29
32
|
this.collectionIdProcessor.process(path);
|
|
@@ -47,6 +50,11 @@ export class JSXProcessor {
|
|
|
47
50
|
attr.name.name === "data-source-location");
|
|
48
51
|
path.node.attributes.splice(sourceLocIdx + 1, 0, this.types.jsxAttribute(this.types.jsxIdentifier("data-dynamic-content"), this.types.stringLiteral(isDynamic ? "true" : "false")));
|
|
49
52
|
}
|
|
53
|
+
isFragment(name) {
|
|
54
|
+
if (this.types.isJSXIdentifier(name))
|
|
55
|
+
return name.name === "Fragment";
|
|
56
|
+
return this.types.isJSXMemberExpression(name) && name.property.name === "Fragment";
|
|
57
|
+
}
|
|
50
58
|
hasAttribute(path, name) {
|
|
51
59
|
return path.node.attributes.some((attr) => this.types.isJSXAttribute(attr) &&
|
|
52
60
|
this.types.isJSXIdentifier(attr.name) &&
|
|
@@ -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;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;
|
|
1
|
+
{"version":3,"file":"jsx-processor.js","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAiCjE,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMpE;AAED,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,MAAM,GACnB,8BAA8B,CAEhC;AAkCD,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,OAAO,EACtB,YAAY,CAAC,EAAE,MAAM,GACpB,8BAA8B,CA2BhC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAWvF;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,8BAA8B,GACpC,8BAA8B,CAEhC"}
|
|
@@ -4,22 +4,28 @@ function readStringVar(key) {
|
|
|
4
4
|
const value = workerEnvironment()[key];
|
|
5
5
|
return typeof value === "string" ? value : undefined;
|
|
6
6
|
}
|
|
7
|
+
let parsedManifest;
|
|
7
8
|
// The manifest is a Worker binding frozen with the script's Hyperdrive/VPC bindings,
|
|
8
|
-
// so every entry it lists has its binding on this worker.
|
|
9
|
+
// so every entry it lists has its binding on this worker, and one parse per raw value is enough.
|
|
9
10
|
function parsePrivateDataSourceManifest() {
|
|
10
11
|
const raw = readStringVar(PRIVATE_DATA_SOURCES_MANIFEST_ENV);
|
|
11
12
|
if (!raw)
|
|
12
13
|
return [];
|
|
14
|
+
if (parsedManifest?.raw === raw)
|
|
15
|
+
return parsedManifest.entries;
|
|
13
16
|
let parsed;
|
|
14
17
|
try {
|
|
15
18
|
parsed = JSON.parse(raw);
|
|
16
19
|
}
|
|
17
20
|
catch {
|
|
18
|
-
|
|
21
|
+
throw new Error(`${PRIVATE_DATA_SOURCES_MANIFEST_ENV} is not valid JSON. Republish the app.`);
|
|
22
|
+
}
|
|
23
|
+
if (!Array.isArray(parsed)) {
|
|
24
|
+
throw new Error(`${PRIVATE_DATA_SOURCES_MANIFEST_ENV} is not a list of private data sources. Republish the app.`);
|
|
19
25
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
const entries = parsed.filter((entry) => entry !== null && typeof entry === "object");
|
|
27
|
+
parsedManifest = { raw, entries };
|
|
28
|
+
return entries;
|
|
23
29
|
}
|
|
24
30
|
export function normalizePrivateDataSourceKey(value) {
|
|
25
31
|
return String(value || "")
|
|
@@ -79,13 +85,12 @@ export function lookupPrivateDataSource(requestedName, expectedType) {
|
|
|
79
85
|
return best.entry;
|
|
80
86
|
}
|
|
81
87
|
export function privateDataSourceBinding(entry) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
throw new Error(`Private data source "${current.name}" has no Worker binding name`);
|
|
88
|
+
if (!entry.bindingName) {
|
|
89
|
+
throw new Error(`Private data source "${entry.name}" has no Worker binding name`);
|
|
85
90
|
}
|
|
86
|
-
const binding = workerEnvironment()[
|
|
91
|
+
const binding = workerEnvironment()[entry.bindingName];
|
|
87
92
|
if (!binding) {
|
|
88
|
-
throw new Error(`Private data source binding "${
|
|
93
|
+
throw new Error(`Private data source binding "${entry.bindingName}" is missing from the Worker environment`);
|
|
89
94
|
}
|
|
90
95
|
return binding;
|
|
91
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/private-data-sources/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,iCAAiC,GAAG,6BAA6B,CAAC;AAExE,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,qFAAqF;AACrF,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/private-data-sources/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export declare function mongodb(name: unknown): Readonly<Readonly<{
|
|
|
13
13
|
}> & {
|
|
14
14
|
connect: (options?: unknown) => unknown;
|
|
15
15
|
} & {
|
|
16
|
-
driverHost: string;
|
|
16
|
+
readonly driverHost: string;
|
|
17
17
|
readonly connectionString: string;
|
|
18
18
|
readonly uri: string;
|
|
19
19
|
mongoClientOptions(options?: Record<string, unknown>): Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/mongodb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/mongodb.ts"],"names":[],"mappings":"AAoBA,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;aAIxB,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO;;;;;iCA+BV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;GAevD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { currentPrivateDataSource, privateDataSourceReference } from "./manifest.js";
|
|
2
3
|
import { buildTcpPrivateDataSource } from "./tcp.js";
|
|
3
4
|
import { installPrivateNodeNetAdapter, registerPrivateNodeNetRoute } from "./node-net-adapter.js";
|
|
4
5
|
function encodeMongoConnectionPart(value) {
|
|
@@ -16,7 +17,9 @@ export function mongodb(name) {
|
|
|
16
17
|
installPrivateNodeNetAdapter();
|
|
17
18
|
const entry = privateDataSourceReference(name, "mongodb");
|
|
18
19
|
const source = buildTcpPrivateDataSource(entry);
|
|
19
|
-
|
|
20
|
+
// Hashed, not normalized: "my-db" and "my.db" must not share a route.
|
|
21
|
+
const hash = createHash("sha256").update(String(entry.bindingName || entry.name)).digest("hex").slice(0, 32);
|
|
22
|
+
const driverHostname = `base44-private-${hash}`;
|
|
20
23
|
function registerRoute() {
|
|
21
24
|
const current = currentPrivateDataSource(entry);
|
|
22
25
|
const port = typeof current.port === "number" ? current.port : 27017;
|
|
@@ -27,7 +30,10 @@ export function mongodb(name) {
|
|
|
27
30
|
});
|
|
28
31
|
}
|
|
29
32
|
const extension = {
|
|
30
|
-
driverHost
|
|
33
|
+
get driverHost() {
|
|
34
|
+
registerRoute();
|
|
35
|
+
return driverHostname;
|
|
36
|
+
},
|
|
31
37
|
get connectionString() {
|
|
32
38
|
const current = currentPrivateDataSource(entry);
|
|
33
39
|
registerRoute();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/private-data-sources/mongodb.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/private-data-sources/mongodb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/oracle.ts"],"names":[],"mappings":"AAMA,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/oracle.ts"],"names":[],"mappings":"AAMA,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;GA8BnC"}
|
|
@@ -16,6 +16,9 @@ export function oracle(name) {
|
|
|
16
16
|
throw new Error("Enter an Oracle service name using letters, numbers, underscores, dots, $, #, or hyphens.");
|
|
17
17
|
}
|
|
18
18
|
const port = source.port;
|
|
19
|
+
if (typeof port !== "number") {
|
|
20
|
+
throw new Error(`Oracle private data source "${entry.name}" has no port. Set the port on the data source.`);
|
|
21
|
+
}
|
|
19
22
|
registerPrivateNodeNetRoute(driverHost, port, {
|
|
20
23
|
label: `Oracle private data source "${entry.name}"`,
|
|
21
24
|
connect: () => source.connect(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../src/private-data-sources/oracle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,UAAU,MAAM,CAAC,IAAa;IAClC,4BAA4B,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,+EAA+E;IAC/E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAE5D,MAAM,SAAS,GAAG;QAChB,eAAe;YACb,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,WAAW,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;YAC/G,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../../src/private-data-sources/oracle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,UAAU,MAAM,CAAC,IAAa;IAClC,4BAA4B,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAChD,+EAA+E;IAC/E,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAE5D,MAAM,SAAS,GAAG;QAChB,eAAe;YACb,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,WAAW,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;YAC/G,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,IAAI,iDAAiD,CAAC,CAAC;YAC9G,CAAC;YACD,2BAA2B,CAAC,UAAU,EAAE,IAAI,EAAE;gBAC5C,KAAK,EAAE,+BAA+B,KAAK,CAAC,IAAI,GAAG;gBACnD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;aAChC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,aAAa,EAAE,8GAA8G,UAAU,UAAU,IAAI,iCAAiC,WAAW,uBAAuB;aACzN,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAqC,CAAC,CAAC;AACzI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/private-data-sources/tcp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAOvB,SAAS,UAAU,CAAC,OAAgB;IAClC,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAQ,OAAiC,CAAC,OAAO,KAAK,UAAU,CACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAqC;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,WAAW;YACb,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,OAAiB;YACvB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,IAAI,6BAA6B,CAClE,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAClE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;gBAChD,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,IAAI,sBAAsB,CAC3D,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO;YACT,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/private-data-sources/tcp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAOvB,SAAS,UAAU,CAAC,OAAgB;IAClC,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAQ,OAAiC,CAAC,OAAO,KAAK,UAAU,CACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAqC;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,WAAW;YACb,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,OAAiB;YACvB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,IAAI,6BAA6B,CAClE,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAClE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;gBAChD,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,IAAI,sBAAsB,CAC3D,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO;YACT,OAAO,wBAAwB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM,YAAY,GAAG,MAA6C,CAAC;IACnE,OAAO,CACL,YAAY,KAAK,IAAI;QACrB,OAAO,YAAY,KAAK,QAAQ;QAChC,CAAC,CAAC,YAAY,CAAC,QAAQ;QACvB,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU;QACrD,CAAC,CAAC,YAAY,CAAC,QAAQ;QACvB,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,YAAoB;IACrD,OAAO,yBAAyB,CAC9B,0BAA0B,CAAC,IAAI,EAAE,YAAY,CAAC,CAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private-data-sources-plugin.d.ts","sourceRoot":"","sources":["../src/private-data-sources-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"private-data-sources-plugin.d.ts","sourceRoot":"","sources":["../src/private-data-sources-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AA+ClD,wBAAgB,wBAAwB,IAAI,MAAM,CA2BjD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { normalizePath } from "vite";
|
|
3
4
|
/**
|
|
4
5
|
* Serves `base44:private-data-sources/<type>` to TanStack server code, so it
|
|
5
6
|
* reaches a workspace private data source with the SAME import a backend
|
|
@@ -8,14 +9,15 @@ import { fileURLToPath } from "node:url";
|
|
|
8
9
|
* import { sqlserver } from "base44:private-data-sources/sqlserver";
|
|
9
10
|
*
|
|
10
11
|
* The modules are this package's own copy of the backend-function adapters
|
|
11
|
-
* (`@base44/functions-compiler
|
|
12
|
+
* (`@base44/functions-compiler`, forked at base44/cli ac98feb), reading the worker's bindings and manifest off
|
|
12
13
|
* `env` from `cloudflare:workers`. Each specifier resolves to the compiled file
|
|
13
14
|
* so Vite bundles it like any source module.
|
|
14
15
|
*
|
|
15
16
|
* The bindings exist only on the deployed worker: in the editor's dev preview a
|
|
16
17
|
* lookup throws, saying the source is available on the published app.
|
|
17
18
|
*/
|
|
18
|
-
const
|
|
19
|
+
const NAMESPACE = "base44:private-data-sources";
|
|
20
|
+
const PREFIX = `${NAMESPACE}/`;
|
|
19
21
|
const SOURCE_TYPES = new Set([
|
|
20
22
|
"elasticsearch",
|
|
21
23
|
"http",
|
|
@@ -27,24 +29,46 @@ const SOURCE_TYPES = new Set([
|
|
|
27
29
|
"redis",
|
|
28
30
|
"sqlserver",
|
|
29
31
|
]);
|
|
32
|
+
const IMPORTER_QUERY = "?importer=";
|
|
30
33
|
const MODULES_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "private-data-sources");
|
|
34
|
+
function failureReason(specifier, environment) {
|
|
35
|
+
const sourceType = specifier.startsWith(PREFIX) ? specifier.slice(PREFIX.length) : "";
|
|
36
|
+
if (!SOURCE_TYPES.has(sourceType)) {
|
|
37
|
+
return `"${specifier}" is not a private data source type. Use one of: ${[...SOURCE_TYPES].map((t) => PREFIX + t).join(", ")}.`;
|
|
38
|
+
}
|
|
39
|
+
// The source carries credentials, so it must never reach the browser bundle.
|
|
40
|
+
if (environment === "client") {
|
|
41
|
+
return `"${specifier}" is server-only. Move this import into a server function or server route.`;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
31
45
|
export function privateDataSourcesPlugin() {
|
|
32
46
|
return {
|
|
33
47
|
name: "base44-private-data-sources",
|
|
34
48
|
// Ahead of Vite's own resolution so the bare scheme is never read as a URL.
|
|
35
49
|
enforce: "pre",
|
|
36
|
-
resolveId
|
|
37
|
-
|
|
50
|
+
// Like base44-runtime: errors are raised in `load`, never `resolveId`, so the
|
|
51
|
+
// dep scan of not-yet-stripped server code in the client environment survives.
|
|
52
|
+
resolveId(id, importer) {
|
|
53
|
+
if (id !== NAMESPACE && !id.startsWith(PREFIX))
|
|
38
54
|
return null;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.error(`"${id}" is not a private data source type. Use one of: ${[...SOURCE_TYPES].join(", ")}.`);
|
|
42
|
-
}
|
|
43
|
-
// The source carries credentials, so it must never reach the browser bundle.
|
|
44
|
-
if (this.environment?.name === "client") {
|
|
45
|
-
this.error(`"${id}" is server-only. Move this import into a server function or server route.`);
|
|
55
|
+
if (!failureReason(id, this.environment?.name)) {
|
|
56
|
+
return normalizePath(path.join(MODULES_DIR, `${id.slice(PREFIX.length)}.js`));
|
|
46
57
|
}
|
|
47
|
-
|
|
58
|
+
const virtual = `\0${id}`;
|
|
59
|
+
if (!importer)
|
|
60
|
+
return virtual;
|
|
61
|
+
return `${virtual}${IMPORTER_QUERY}${Buffer.from(importer.split("?")[0]).toString("base64url")}`;
|
|
62
|
+
},
|
|
63
|
+
load(id) {
|
|
64
|
+
if (!id.startsWith("\0"))
|
|
65
|
+
return null;
|
|
66
|
+
const [specifier = "", importer] = id.slice(1).split(IMPORTER_QUERY);
|
|
67
|
+
if (specifier !== NAMESPACE && !specifier.startsWith(PREFIX))
|
|
68
|
+
return null;
|
|
69
|
+
const from = importer ? ` Imported from ${Buffer.from(importer, "base64url").toString()}.` : "";
|
|
70
|
+
const reason = failureReason(specifier, this.environment?.name);
|
|
71
|
+
this.error(`${reason ?? `"${specifier}" cannot be loaded here.`}${from}`);
|
|
48
72
|
},
|
|
49
73
|
};
|
|
50
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private-data-sources-plugin.js","sourceRoot":"","sources":["../src/private-data-sources-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"private-data-sources-plugin.js","sourceRoot":"","sources":["../src/private-data-sources-plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/jsx-processor.ts
CHANGED
|
@@ -26,6 +26,8 @@ export class JSXProcessor {
|
|
|
26
26
|
if (this.hasAttribute(path, "data-source-location")) return;
|
|
27
27
|
const { name } = path.node;
|
|
28
28
|
if (this.types.isJSXIdentifier(name) && DOCUMENT_ELEMENTS.includes(name.name)) return;
|
|
29
|
+
// React rejects any Fragment prop but key/children ("Invalid prop supplied to React.Fragment").
|
|
30
|
+
if (this.isFragment(name)) return;
|
|
29
31
|
|
|
30
32
|
this.addSourceLocationAttribute(path);
|
|
31
33
|
this.addDynamicContentAttribute(path);
|
|
@@ -78,6 +80,11 @@ export class JSXProcessor {
|
|
|
78
80
|
);
|
|
79
81
|
}
|
|
80
82
|
|
|
83
|
+
private isFragment(name: t.JSXOpeningElement["name"]): boolean {
|
|
84
|
+
if (this.types.isJSXIdentifier(name)) return name.name === "Fragment";
|
|
85
|
+
return this.types.isJSXMemberExpression(name) && name.property.name === "Fragment";
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
private hasAttribute(
|
|
82
89
|
path: NodePath<t.JSXOpeningElement>,
|
|
83
90
|
name: string
|
|
@@ -8,23 +8,28 @@ function readStringVar(key: string): string | undefined {
|
|
|
8
8
|
return typeof value === "string" ? value : undefined;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
let parsedManifest: { raw: string; entries: PrivateDataSourceManifestEntry[] } | undefined;
|
|
12
|
+
|
|
11
13
|
// The manifest is a Worker binding frozen with the script's Hyperdrive/VPC bindings,
|
|
12
|
-
// so every entry it lists has its binding on this worker.
|
|
14
|
+
// so every entry it lists has its binding on this worker, and one parse per raw value is enough.
|
|
13
15
|
function parsePrivateDataSourceManifest(): PrivateDataSourceManifestEntry[] {
|
|
14
16
|
const raw = readStringVar(PRIVATE_DATA_SOURCES_MANIFEST_ENV);
|
|
15
17
|
if (!raw) return [];
|
|
18
|
+
if (parsedManifest?.raw === raw) return parsedManifest.entries;
|
|
16
19
|
let parsed: unknown;
|
|
17
20
|
try {
|
|
18
21
|
parsed = JSON.parse(raw);
|
|
19
22
|
} catch {
|
|
20
|
-
|
|
23
|
+
throw new Error(`${PRIVATE_DATA_SOURCES_MANIFEST_ENV} is not valid JSON. Republish the app.`);
|
|
24
|
+
}
|
|
25
|
+
if (!Array.isArray(parsed)) {
|
|
26
|
+
throw new Error(`${PRIVATE_DATA_SOURCES_MANIFEST_ENV} is not a list of private data sources. Republish the app.`);
|
|
21
27
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
: [];
|
|
28
|
+
const entries = parsed.filter(
|
|
29
|
+
(entry): entry is PrivateDataSourceManifestEntry => entry !== null && typeof entry === "object",
|
|
30
|
+
);
|
|
31
|
+
parsedManifest = { raw, entries };
|
|
32
|
+
return entries;
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
export function normalizePrivateDataSourceKey(value: unknown): string {
|
|
@@ -107,14 +112,13 @@ export function lookupPrivateDataSource(
|
|
|
107
112
|
}
|
|
108
113
|
|
|
109
114
|
export function privateDataSourceBinding(entry: PrivateDataSourceManifestEntry): unknown {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
throw new Error(`Private data source "${current.name}" has no Worker binding name`);
|
|
115
|
+
if (!entry.bindingName) {
|
|
116
|
+
throw new Error(`Private data source "${entry.name}" has no Worker binding name`);
|
|
113
117
|
}
|
|
114
|
-
const binding = workerEnvironment()[
|
|
118
|
+
const binding = workerEnvironment()[entry.bindingName];
|
|
115
119
|
if (!binding) {
|
|
116
120
|
throw new Error(
|
|
117
|
-
`Private data source binding "${
|
|
121
|
+
`Private data source binding "${entry.bindingName}" is missing from the Worker environment`,
|
|
118
122
|
);
|
|
119
123
|
}
|
|
120
124
|
return binding;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
privateDataSourceReference,
|
|
5
|
-
} from "./manifest.js";
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
import { currentPrivateDataSource, privateDataSourceReference } from "./manifest.js";
|
|
6
4
|
import { buildTcpPrivateDataSource } from "./tcp.js";
|
|
7
5
|
import { installPrivateNodeNetAdapter, registerPrivateNodeNetRoute } from "./node-net-adapter.js";
|
|
8
6
|
import type { PrivateDataSourceManifestEntry } from "./types.js";
|
|
@@ -26,9 +24,9 @@ export function mongodb(name: unknown) {
|
|
|
26
24
|
const source = buildTcpPrivateDataSource(entry) as ReturnType<typeof buildTcpPrivateDataSource> & {
|
|
27
25
|
connect: (options?: unknown) => unknown;
|
|
28
26
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
// Hashed, not normalized: "my-db" and "my.db" must not share a route.
|
|
28
|
+
const hash = createHash("sha256").update(String(entry.bindingName || entry.name)).digest("hex").slice(0, 32);
|
|
29
|
+
const driverHostname = `base44-private-${hash}`;
|
|
32
30
|
|
|
33
31
|
function registerRoute() {
|
|
34
32
|
const current = currentPrivateDataSource(entry);
|
|
@@ -41,7 +39,10 @@ export function mongodb(name: unknown) {
|
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
const extension = {
|
|
44
|
-
driverHost
|
|
42
|
+
get driverHost() {
|
|
43
|
+
registerRoute();
|
|
44
|
+
return driverHostname;
|
|
45
|
+
},
|
|
45
46
|
get connectionString() {
|
|
46
47
|
const current = currentPrivateDataSource(entry);
|
|
47
48
|
registerRoute();
|
|
@@ -18,7 +18,10 @@ export function oracle(name: unknown) {
|
|
|
18
18
|
if (!serviceName || !/^[a-zA-Z0-9_.$#-]+$/.test(serviceName)) {
|
|
19
19
|
throw new Error("Enter an Oracle service name using letters, numbers, underscores, dots, $, #, or hyphens.");
|
|
20
20
|
}
|
|
21
|
-
const port = source.port
|
|
21
|
+
const port = source.port;
|
|
22
|
+
if (typeof port !== "number") {
|
|
23
|
+
throw new Error(`Oracle private data source "${entry.name}" has no port. Set the port on the data source.`);
|
|
24
|
+
}
|
|
22
25
|
registerPrivateNodeNetRoute(driverHost, port, {
|
|
23
26
|
label: `Oracle private data source "${entry.name}"`,
|
|
24
27
|
connect: () => source.connect(),
|
|
@@ -62,7 +62,7 @@ export function buildTcpPrivateDataSource(entry: PrivateDataSourceManifestEntry)
|
|
|
62
62
|
return binding.connect(address, options);
|
|
63
63
|
},
|
|
64
64
|
get binding() {
|
|
65
|
-
return privateDataSourceBinding(entry);
|
|
65
|
+
return privateDataSourceBinding(currentPrivateDataSource(entry));
|
|
66
66
|
},
|
|
67
67
|
});
|
|
68
68
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import type
|
|
3
|
+
import { normalizePath, type Plugin } from "vite";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Serves `base44:private-data-sources/<type>` to TanStack server code, so it
|
|
@@ -10,7 +10,7 @@ import type { Plugin } from "vite";
|
|
|
10
10
|
* import { sqlserver } from "base44:private-data-sources/sqlserver";
|
|
11
11
|
*
|
|
12
12
|
* The modules are this package's own copy of the backend-function adapters
|
|
13
|
-
* (`@base44/functions-compiler
|
|
13
|
+
* (`@base44/functions-compiler`, forked at base44/cli ac98feb), reading the worker's bindings and manifest off
|
|
14
14
|
* `env` from `cloudflare:workers`. Each specifier resolves to the compiled file
|
|
15
15
|
* so Vite bundles it like any source module.
|
|
16
16
|
*
|
|
@@ -18,7 +18,8 @@ import type { Plugin } from "vite";
|
|
|
18
18
|
* lookup throws, saying the source is available on the published app.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
const
|
|
21
|
+
const NAMESPACE = "base44:private-data-sources";
|
|
22
|
+
const PREFIX = `${NAMESPACE}/`;
|
|
22
23
|
const SOURCE_TYPES = new Set([
|
|
23
24
|
"elasticsearch",
|
|
24
25
|
"http",
|
|
@@ -30,26 +31,47 @@ const SOURCE_TYPES = new Set([
|
|
|
30
31
|
"redis",
|
|
31
32
|
"sqlserver",
|
|
32
33
|
]);
|
|
34
|
+
const IMPORTER_QUERY = "?importer=";
|
|
33
35
|
|
|
34
36
|
const MODULES_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "private-data-sources");
|
|
35
37
|
|
|
38
|
+
function failureReason(specifier: string, environment: string | undefined): string | null {
|
|
39
|
+
const sourceType = specifier.startsWith(PREFIX) ? specifier.slice(PREFIX.length) : "";
|
|
40
|
+
if (!SOURCE_TYPES.has(sourceType)) {
|
|
41
|
+
return `"${specifier}" is not a private data source type. Use one of: ${[...SOURCE_TYPES].map((t) => PREFIX + t).join(", ")}.`;
|
|
42
|
+
}
|
|
43
|
+
// The source carries credentials, so it must never reach the browser bundle.
|
|
44
|
+
if (environment === "client") {
|
|
45
|
+
return `"${specifier}" is server-only. Move this import into a server function or server route.`;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
36
50
|
export function privateDataSourcesPlugin(): Plugin {
|
|
37
51
|
return {
|
|
38
52
|
name: "base44-private-data-sources",
|
|
39
53
|
// Ahead of Vite's own resolution so the bare scheme is never read as a URL.
|
|
40
54
|
enforce: "pre",
|
|
41
55
|
|
|
42
|
-
resolveId
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (!
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// The source carries credentials, so it must never reach the browser bundle.
|
|
49
|
-
if (this.environment?.name === "client") {
|
|
50
|
-
this.error(`"${id}" is server-only. Move this import into a server function or server route.`);
|
|
56
|
+
// Like base44-runtime: errors are raised in `load`, never `resolveId`, so the
|
|
57
|
+
// dep scan of not-yet-stripped server code in the client environment survives.
|
|
58
|
+
resolveId(id, importer) {
|
|
59
|
+
if (id !== NAMESPACE && !id.startsWith(PREFIX)) return null;
|
|
60
|
+
if (!failureReason(id, this.environment?.name)) {
|
|
61
|
+
return normalizePath(path.join(MODULES_DIR, `${id.slice(PREFIX.length)}.js`));
|
|
51
62
|
}
|
|
52
|
-
|
|
63
|
+
const virtual = `\0${id}`;
|
|
64
|
+
if (!importer) return virtual;
|
|
65
|
+
return `${virtual}${IMPORTER_QUERY}${Buffer.from(importer.split("?")[0]!).toString("base64url")}`;
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
load(id) {
|
|
69
|
+
if (!id.startsWith("\0")) return null;
|
|
70
|
+
const [specifier = "", importer] = id.slice(1).split(IMPORTER_QUERY);
|
|
71
|
+
if (specifier !== NAMESPACE && !specifier.startsWith(PREFIX)) return null;
|
|
72
|
+
const from = importer ? ` Imported from ${Buffer.from(importer, "base64url").toString()}.` : "";
|
|
73
|
+
const reason = failureReason(specifier, this.environment?.name);
|
|
74
|
+
this.error(`${reason ?? `"${specifier}" cannot be loaded here.`}${from}`);
|
|
53
75
|
},
|
|
54
76
|
};
|
|
55
77
|
}
|