@superblocksteam/sdk 2.0.130-next.2 → 2.0.130-next.3

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @superblocksteam/sdk@2.0.130-next.2 build /home/runner/work/superblocks/superblocks/packages/cli/packages/sdk
2
+ > @superblocksteam/sdk@2.0.130-next.3 build /home/runner/work/superblocks/superblocks/packages/cli/packages/sdk
3
3
  > tsc --build
4
4
 
@@ -1,10 +1,23 @@
1
1
  import type { Plugin } from "vite";
2
+ /**
3
+ * Resolve the app-root-relative entry point path for a Vite module id.
4
+ *
5
+ * Fullstack apps keep `server/apis/` at the app root while `vite.config.ts`
6
+ * often sets `root: "./client"`. Dev server and build already pass the true
7
+ * app root into the plugin; failures are intermittent and depend on how Vite
8
+ * resolves module ids for files outside the client subtree (for example
9
+ * `../server/apis/...` relatives or `/@fs/...` absolute ids). Plain absolute
10
+ * paths under `<appRoot>/server/apis/` already matched before this helper.
11
+ */
12
+ export declare function resolveSdkApiEntryPointRelativePath(appRootDir: string, moduleId: string): string | null;
2
13
  /**
3
14
  * Vite plugin that prepends `__setEntryPoint(relativePath)` to SDK API files
4
15
  * so that `api()` can stamp the authoritative source file
5
16
  * path onto the compiled API object.
6
17
  *
18
+ * @param appRootDir - App root (parent of `client/` and `server/`).
19
+ *
7
20
  * Runs in both dev and build. The user's source code is never modified on disk.
8
21
  */
9
- export declare function sdkApiEntryPointPlugin(root: string): Plugin;
22
+ export declare function sdkApiEntryPointPlugin(appRootDir: string): Plugin;
10
23
  //# sourceMappingURL=vite-plugin-sdk-api-entry-point.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin-sdk-api-entry-point.d.mts","sourceRoot":"","sources":["../src/vite-plugin-sdk-api-entry-point.mts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAwBnC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2C3D"}
1
+ {"version":3,"file":"vite-plugin-sdk-api-entry-point.d.mts","sourceRoot":"","sources":["../src/vite-plugin-sdk-api-entry-point.mts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAuDnC;;;;;;;;;GASG;AACH,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CA4Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqCjE"}
@@ -1,4 +1,5 @@
1
1
  import path from "node:path";
2
+ const SERVER_APIS_DIR = "server/apis";
2
3
  /**
3
4
  * Build a sourcemap `mappings` string for a simple prepend operation.
4
5
  *
@@ -18,24 +19,84 @@ function buildPrependMappings(prependLineCount, originalLineCount) {
18
19
  .join(";");
19
20
  return empty + original;
20
21
  }
22
+ function qualifyAnchoredServerApisRelative(relative) {
23
+ if (relative === `${SERVER_APIS_DIR}/index.ts`) {
24
+ return null;
25
+ }
26
+ const baseName = path.posix.basename(relative);
27
+ if (baseName === "index.ts") {
28
+ return null;
29
+ }
30
+ if (!relative.endsWith(".ts") && !relative.endsWith(".tsx")) {
31
+ return null;
32
+ }
33
+ return relative;
34
+ }
35
+ function qualifySegmentFallbackRelative(relative) {
36
+ if (!relative.startsWith(`${SERVER_APIS_DIR}/`)) {
37
+ return null;
38
+ }
39
+ // Reject false positives when appRootDir sits under a server/apis/ path.
40
+ if (relative.includes("/client/")) {
41
+ return null;
42
+ }
43
+ const baseName = path.posix.basename(relative);
44
+ if (baseName !== "api.ts" && baseName !== "api.tsx") {
45
+ return null;
46
+ }
47
+ return relative;
48
+ }
49
+ /**
50
+ * Resolve the app-root-relative entry point path for a Vite module id.
51
+ *
52
+ * Fullstack apps keep `server/apis/` at the app root while `vite.config.ts`
53
+ * often sets `root: "./client"`. Dev server and build already pass the true
54
+ * app root into the plugin; failures are intermittent and depend on how Vite
55
+ * resolves module ids for files outside the client subtree (for example
56
+ * `../server/apis/...` relatives or `/@fs/...` absolute ids). Plain absolute
57
+ * paths under `<appRoot>/server/apis/` already matched before this helper.
58
+ */
59
+ export function resolveSdkApiEntryPointRelativePath(appRootDir, moduleId) {
60
+ const normalizedId = path.normalize(moduleId);
61
+ const normalizedRoot = path.normalize(appRootDir);
62
+ const relative = path
63
+ .relative(normalizedRoot, normalizedId)
64
+ .replace(/\\/g, "/");
65
+ if (relative.startsWith(`${SERVER_APIS_DIR}/`)) {
66
+ return qualifyAnchoredServerApisRelative(relative);
67
+ }
68
+ // Plugin base is client/ or Vite passes a ../server/apis/... module id.
69
+ if (relative.startsWith(`../${SERVER_APIS_DIR}/`)) {
70
+ return qualifyAnchoredServerApisRelative(relative.slice("../".length));
71
+ }
72
+ // Fallback for module ids not matched above: /@fs/ prefixed ids, standard
73
+ // absolute paths when appRootDir is 2+ levels above server/apis/, etc.
74
+ // NOTE: unanchored to appRootDir — matches any id containing /server/apis/
75
+ // with an api.ts/api.tsx basename. lastIndexOf picks the deepest segment.
76
+ const posixId = normalizedId.replace(/\\/g, "/");
77
+ const segment = `/${SERVER_APIS_DIR}/`;
78
+ const segmentIndex = posixId.lastIndexOf(segment);
79
+ if (segmentIndex !== -1) {
80
+ return qualifySegmentFallbackRelative(posixId.slice(segmentIndex + 1));
81
+ }
82
+ return null;
83
+ }
21
84
  /**
22
85
  * Vite plugin that prepends `__setEntryPoint(relativePath)` to SDK API files
23
86
  * so that `api()` can stamp the authoritative source file
24
87
  * path onto the compiled API object.
25
88
  *
89
+ * @param appRootDir - App root (parent of `client/` and `server/`).
90
+ *
26
91
  * Runs in both dev and build. The user's source code is never modified on disk.
27
92
  */
28
- export function sdkApiEntryPointPlugin(root) {
93
+ export function sdkApiEntryPointPlugin(appRootDir) {
29
94
  return {
30
95
  name: "sb-sdk-api-entry-point",
31
96
  enforce: "pre",
32
97
  transform(code, id) {
33
- const relative = path.relative(root, id).replace(/\\/g, "/");
34
- if (!relative.startsWith("server/apis/") ||
35
- relative === "server/apis/index.ts") {
36
- return null;
37
- }
38
- if (!relative.endsWith(".ts") && !relative.endsWith(".tsx")) {
98
+ const relative = resolveSdkApiEntryPointRelativePath(appRootDir, id);
99
+ if (!relative) {
39
100
  return null;
40
101
  }
41
102
  const prependLines = [
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin-sdk-api-entry-point.mjs","sourceRoot":"","sources":["../src/vite-plugin-sdk-api-entry-point.mts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAC3B,gBAAwB,EACxB,iBAAyB;IAEzB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,iBAAiB,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC;SACtB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9D,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,KAAK,GAAG,QAAQ,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,KAAK;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC7D,IACE,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;gBACpC,QAAQ,KAAK,sBAAsB,EACnC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG;gBACnB,4EAA4E;gBAC5E,eAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;gBAC3C,EAAE;aACH,CAAC;YACF,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAElD,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAEpD,OAAO;gBACL,IAAI,EAAE,OAAO,GAAG,IAAI;gBACpB,GAAG,EAAE;oBACH,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,EAAE;oBACR,OAAO,EAAE,CAAC,EAAE,CAAC;oBACb,cAAc,EAAE,CAAC,IAAI,CAAC;oBACtB,KAAK,EAAE,EAAE;oBACT,QAAQ,EAAE,oBAAoB,CAC5B,mBAAmB,EACnB,iBAAiB,CAClB;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"vite-plugin-sdk-api-entry-point.mjs","sourceRoot":"","sources":["../src/vite-plugin-sdk-api-entry-point.mts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAC3B,gBAAwB,EACxB,iBAAyB;IAEzB,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,iBAAiB,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC;SACtB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC9D,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,KAAK,GAAG,QAAQ,CAAC;AAC1B,CAAC;AAED,SAAS,iCAAiC,CAAC,QAAgB;IACzD,IAAI,QAAQ,KAAK,GAAG,eAAe,WAAW,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,8BAA8B,CAAC,QAAgB;IACtD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,yEAAyE;IACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mCAAmC,CACjD,UAAkB,EAClB,QAAgB;IAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,IAAI;SAClB,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;SACtC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,wEAAwE;IACxE,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,iCAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,eAAe,GAAG,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,8BAA8B,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,KAAK;QAEd,SAAS,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,QAAQ,GAAG,mCAAmC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG;gBACnB,4EAA4E;gBAC5E,eAAe,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;gBAC3C,EAAE;aACH,CAAC;YACF,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAElD,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAEpD,OAAO;gBACL,IAAI,EAAE,OAAO,GAAG,IAAI;gBACpB,GAAG,EAAE;oBACH,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,EAAE;oBACR,OAAO,EAAE,CAAC,EAAE,CAAC;oBACb,cAAc,EAAE,CAAC,IAAI,CAAC;oBACtB,KAAK,EAAE,EAAE;oBACT,QAAQ,EAAE,oBAAoB,CAC5B,mBAAmB,EACnB,iBAAiB,CAClB;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { describe, it, expect } from "vitest";
3
- import { sdkApiEntryPointPlugin } from "./vite-plugin-sdk-api-entry-point.mjs";
3
+ import { resolveSdkApiEntryPointRelativePath, sdkApiEntryPointPlugin, } from "./vite-plugin-sdk-api-entry-point.mjs";
4
4
  function createPlugin(root) {
5
5
  const plugin = sdkApiEntryPointPlugin(root);
6
6
  const transform = plugin.transform;
@@ -60,6 +60,38 @@ function expectValidSourcemap(result, originalCode) {
60
60
  expect(sourceLine).toBe(i);
61
61
  });
62
62
  }
63
+ describe("resolveSdkApiEntryPointRelativePath", () => {
64
+ it("resolves server API paths from the true app root", () => {
65
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/GetUsers/api.ts")).toBe("server/apis/GetUsers/api.ts");
66
+ });
67
+ it("resolves server API paths when the base dir is vite client/", () => {
68
+ expect(resolveSdkApiEntryPointRelativePath("/app/client", "/app/server/apis/GetPastAnalyses/api.ts")).toBe("server/apis/GetPastAnalyses/api.ts");
69
+ });
70
+ it("resolves server API paths from absolute /@fs module ids", () => {
71
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/@fs/Users/me/app/server/apis/GetFeedback/api.ts")).toBe("server/apis/GetFeedback/api.ts");
72
+ });
73
+ it("returns null for the registry barrel file", () => {
74
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/index.ts")).toBeNull();
75
+ });
76
+ it("returns null when app root contains server/apis and module is a client file", () => {
77
+ expect(resolveSdkApiEntryPointRelativePath("/home/server/apis/myapp", "/home/server/apis/myapp/client/components/Button.tsx")).toBeNull();
78
+ });
79
+ it("uses the deepest server/apis segment in /@fs fallback", () => {
80
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/@fs/home/server/apis/decoy/server/apis/GetReal/api.ts")).toBe("server/apis/GetReal/api.ts");
81
+ });
82
+ it("resolves server API paths for api.tsx entry points", () => {
83
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/Render/api.tsx")).toBe("server/apis/Render/api.tsx");
84
+ });
85
+ it("resolves Clark-style API entry points that are not named api.ts", () => {
86
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/issues/list-issues.ts")).toBe("server/apis/issues/list-issues.ts");
87
+ });
88
+ it("resolves helper modules under server/apis/ on anchored paths", () => {
89
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/GetFoo/helper.ts")).toBe("server/apis/GetFoo/helper.ts");
90
+ });
91
+ it("returns null for index.ts under an API directory", () => {
92
+ expect(resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/GetFoo/index.ts")).toBeNull();
93
+ });
94
+ });
63
95
  describe("sdkApiEntryPointPlugin", () => {
64
96
  const root = "/app";
65
97
  it("has the correct plugin name and enforce order", () => {
@@ -68,6 +100,12 @@ describe("sdkApiEntryPointPlugin", () => {
68
100
  expect(plugin.enforce).toBe("pre");
69
101
  });
70
102
  describe("transform", () => {
103
+ it("prepends __setEntryPoint for Clark-style list-issues.ts entry points", () => {
104
+ const { transform } = createPlugin(root);
105
+ const result = transform('export default api({ name: "ListIssues" });', path.join(root, "server/apis/issues/list-issues.ts"));
106
+ expect(result).not.toBeNull();
107
+ expect(result.code).toContain('__sb_set_ep("server/apis/issues/list-issues.ts");');
108
+ });
71
109
  it("prepends __setEntryPoint for a standard API file", () => {
72
110
  const { transform } = createPlugin(root);
73
111
  const result = transform('export default api({ name: "GetUsers" });', path.join(root, "server/apis/GetUsers/api.ts"));
@@ -103,6 +141,20 @@ describe("sdkApiEntryPointPlugin", () => {
103
141
  expect(result).not.toBeNull();
104
142
  expect(result.code).toContain('__sb_set_ep("server/apis/v2/GetUsers/api.ts");');
105
143
  });
144
+ it("prepends __setEntryPoint when plugin root is vite client/ subdir (fullstack)", () => {
145
+ const appRoot = "/app";
146
+ const viteRoot = path.join(appRoot, "client");
147
+ const { transform } = createPlugin(viteRoot);
148
+ const result = transform('export default api({ name: "GetPastAnalyses" });', path.join(appRoot, "server/apis/GetPastAnalyses/api.ts"));
149
+ expect(result).not.toBeNull();
150
+ expect(result.code).toContain('__sb_set_ep("server/apis/GetPastAnalyses/api.ts");');
151
+ });
152
+ it("prepends __setEntryPoint for /@fs/ module ids", () => {
153
+ const { transform } = createPlugin(root);
154
+ const result = transform('export default api({ name: "GetFeedback" });', "/@fs/Users/me/app/server/apis/GetFeedback/api.ts");
155
+ expect(result).not.toBeNull();
156
+ expect(result.code).toContain('__sb_set_ep("server/apis/GetFeedback/api.ts");');
157
+ });
106
158
  it("preserves original code after the prepend", () => {
107
159
  const { transform } = createPlugin(root);
108
160
  const originalCode = [
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin-sdk-api-entry-point.test.mjs","sourceRoot":"","sources":["../src/vite-plugin-sdk-api-entry-point.test.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-plugin-sdk-api-entry-point.test.mjs","sourceRoot":"","sources":["../src/vite-plugin-sdk-api-entry-point.test.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/sdk",
3
- "version": "2.0.130-next.2",
3
+ "version": "2.0.130-next.3",
4
4
  "description": "Superblocks JS SDK",
5
5
  "homepage": "https://www.superblocks.com",
6
6
  "license": "Superblocks Community Software License",
@@ -48,11 +48,11 @@
48
48
  "vite-tsconfig-paths": "^6.0.4",
49
49
  "winston": "^3.17.0",
50
50
  "yaml": "^2.7.1",
51
- "@superblocksteam/shared": "0.9591.2",
52
- "@superblocksteam/library-shared": "2.0.130-next.2",
53
- "@superblocksteam/telemetry": "2.0.130-next.2",
54
- "@superblocksteam/util": "2.0.130-next.2",
55
- "@superblocksteam/vite-plugin-file-sync": "2.0.130-next.2"
51
+ "@superblocksteam/library-shared": "2.0.130-next.3",
52
+ "@superblocksteam/shared": "0.9591.3",
53
+ "@superblocksteam/telemetry": "2.0.130-next.3",
54
+ "@superblocksteam/util": "2.0.130-next.3",
55
+ "@superblocksteam/vite-plugin-file-sync": "2.0.130-next.3"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@eslint/js": "^9.39.2",
@@ -2,6 +2,8 @@ import path from "node:path";
2
2
 
3
3
  import type { Plugin } from "vite";
4
4
 
5
+ const SERVER_APIS_DIR = "server/apis";
6
+
5
7
  /**
6
8
  * Build a sourcemap `mappings` string for a simple prepend operation.
7
9
  *
@@ -24,27 +26,95 @@ function buildPrependMappings(
24
26
  return empty + original;
25
27
  }
26
28
 
29
+ function qualifyAnchoredServerApisRelative(relative: string): string | null {
30
+ if (relative === `${SERVER_APIS_DIR}/index.ts`) {
31
+ return null;
32
+ }
33
+ const baseName = path.posix.basename(relative);
34
+ if (baseName === "index.ts") {
35
+ return null;
36
+ }
37
+ if (!relative.endsWith(".ts") && !relative.endsWith(".tsx")) {
38
+ return null;
39
+ }
40
+ return relative;
41
+ }
42
+
43
+ function qualifySegmentFallbackRelative(relative: string): string | null {
44
+ if (!relative.startsWith(`${SERVER_APIS_DIR}/`)) {
45
+ return null;
46
+ }
47
+ // Reject false positives when appRootDir sits under a server/apis/ path.
48
+ if (relative.includes("/client/")) {
49
+ return null;
50
+ }
51
+ const baseName = path.posix.basename(relative);
52
+ if (baseName !== "api.ts" && baseName !== "api.tsx") {
53
+ return null;
54
+ }
55
+ return relative;
56
+ }
57
+
58
+ /**
59
+ * Resolve the app-root-relative entry point path for a Vite module id.
60
+ *
61
+ * Fullstack apps keep `server/apis/` at the app root while `vite.config.ts`
62
+ * often sets `root: "./client"`. Dev server and build already pass the true
63
+ * app root into the plugin; failures are intermittent and depend on how Vite
64
+ * resolves module ids for files outside the client subtree (for example
65
+ * `../server/apis/...` relatives or `/@fs/...` absolute ids). Plain absolute
66
+ * paths under `<appRoot>/server/apis/` already matched before this helper.
67
+ */
68
+ export function resolveSdkApiEntryPointRelativePath(
69
+ appRootDir: string,
70
+ moduleId: string,
71
+ ): string | null {
72
+ const normalizedId = path.normalize(moduleId);
73
+ const normalizedRoot = path.normalize(appRootDir);
74
+
75
+ const relative = path
76
+ .relative(normalizedRoot, normalizedId)
77
+ .replace(/\\/g, "/");
78
+ if (relative.startsWith(`${SERVER_APIS_DIR}/`)) {
79
+ return qualifyAnchoredServerApisRelative(relative);
80
+ }
81
+
82
+ // Plugin base is client/ or Vite passes a ../server/apis/... module id.
83
+ if (relative.startsWith(`../${SERVER_APIS_DIR}/`)) {
84
+ return qualifyAnchoredServerApisRelative(relative.slice("../".length));
85
+ }
86
+
87
+ // Fallback for module ids not matched above: /@fs/ prefixed ids, standard
88
+ // absolute paths when appRootDir is 2+ levels above server/apis/, etc.
89
+ // NOTE: unanchored to appRootDir — matches any id containing /server/apis/
90
+ // with an api.ts/api.tsx basename. lastIndexOf picks the deepest segment.
91
+ const posixId = normalizedId.replace(/\\/g, "/");
92
+ const segment = `/${SERVER_APIS_DIR}/`;
93
+ const segmentIndex = posixId.lastIndexOf(segment);
94
+ if (segmentIndex !== -1) {
95
+ return qualifySegmentFallbackRelative(posixId.slice(segmentIndex + 1));
96
+ }
97
+
98
+ return null;
99
+ }
100
+
27
101
  /**
28
102
  * Vite plugin that prepends `__setEntryPoint(relativePath)` to SDK API files
29
103
  * so that `api()` can stamp the authoritative source file
30
104
  * path onto the compiled API object.
31
105
  *
106
+ * @param appRootDir - App root (parent of `client/` and `server/`).
107
+ *
32
108
  * Runs in both dev and build. The user's source code is never modified on disk.
33
109
  */
34
- export function sdkApiEntryPointPlugin(root: string): Plugin {
110
+ export function sdkApiEntryPointPlugin(appRootDir: string): Plugin {
35
111
  return {
36
112
  name: "sb-sdk-api-entry-point",
37
113
  enforce: "pre",
38
114
 
39
115
  transform(code, id) {
40
- const relative = path.relative(root, id).replace(/\\/g, "/");
41
- if (
42
- !relative.startsWith("server/apis/") ||
43
- relative === "server/apis/index.ts"
44
- ) {
45
- return null;
46
- }
47
- if (!relative.endsWith(".ts") && !relative.endsWith(".tsx")) {
116
+ const relative = resolveSdkApiEntryPointRelativePath(appRootDir, id);
117
+ if (!relative) {
48
118
  return null;
49
119
  }
50
120
 
@@ -2,7 +2,10 @@ import path from "node:path";
2
2
 
3
3
  import { describe, it, expect } from "vitest";
4
4
 
5
- import { sdkApiEntryPointPlugin } from "./vite-plugin-sdk-api-entry-point.mjs";
5
+ import {
6
+ resolveSdkApiEntryPointRelativePath,
7
+ sdkApiEntryPointPlugin,
8
+ } from "./vite-plugin-sdk-api-entry-point.mjs";
6
9
 
7
10
  type TransformResult = {
8
11
  code: string;
@@ -88,6 +91,95 @@ function expectValidSourcemap(
88
91
  });
89
92
  }
90
93
 
94
+ describe("resolveSdkApiEntryPointRelativePath", () => {
95
+ it("resolves server API paths from the true app root", () => {
96
+ expect(
97
+ resolveSdkApiEntryPointRelativePath(
98
+ "/app",
99
+ "/app/server/apis/GetUsers/api.ts",
100
+ ),
101
+ ).toBe("server/apis/GetUsers/api.ts");
102
+ });
103
+
104
+ it("resolves server API paths when the base dir is vite client/", () => {
105
+ expect(
106
+ resolveSdkApiEntryPointRelativePath(
107
+ "/app/client",
108
+ "/app/server/apis/GetPastAnalyses/api.ts",
109
+ ),
110
+ ).toBe("server/apis/GetPastAnalyses/api.ts");
111
+ });
112
+
113
+ it("resolves server API paths from absolute /@fs module ids", () => {
114
+ expect(
115
+ resolveSdkApiEntryPointRelativePath(
116
+ "/app",
117
+ "/@fs/Users/me/app/server/apis/GetFeedback/api.ts",
118
+ ),
119
+ ).toBe("server/apis/GetFeedback/api.ts");
120
+ });
121
+
122
+ it("returns null for the registry barrel file", () => {
123
+ expect(
124
+ resolveSdkApiEntryPointRelativePath("/app", "/app/server/apis/index.ts"),
125
+ ).toBeNull();
126
+ });
127
+
128
+ it("returns null when app root contains server/apis and module is a client file", () => {
129
+ expect(
130
+ resolveSdkApiEntryPointRelativePath(
131
+ "/home/server/apis/myapp",
132
+ "/home/server/apis/myapp/client/components/Button.tsx",
133
+ ),
134
+ ).toBeNull();
135
+ });
136
+
137
+ it("uses the deepest server/apis segment in /@fs fallback", () => {
138
+ expect(
139
+ resolveSdkApiEntryPointRelativePath(
140
+ "/app",
141
+ "/@fs/home/server/apis/decoy/server/apis/GetReal/api.ts",
142
+ ),
143
+ ).toBe("server/apis/GetReal/api.ts");
144
+ });
145
+
146
+ it("resolves server API paths for api.tsx entry points", () => {
147
+ expect(
148
+ resolveSdkApiEntryPointRelativePath(
149
+ "/app",
150
+ "/app/server/apis/Render/api.tsx",
151
+ ),
152
+ ).toBe("server/apis/Render/api.tsx");
153
+ });
154
+
155
+ it("resolves Clark-style API entry points that are not named api.ts", () => {
156
+ expect(
157
+ resolveSdkApiEntryPointRelativePath(
158
+ "/app",
159
+ "/app/server/apis/issues/list-issues.ts",
160
+ ),
161
+ ).toBe("server/apis/issues/list-issues.ts");
162
+ });
163
+
164
+ it("resolves helper modules under server/apis/ on anchored paths", () => {
165
+ expect(
166
+ resolveSdkApiEntryPointRelativePath(
167
+ "/app",
168
+ "/app/server/apis/GetFoo/helper.ts",
169
+ ),
170
+ ).toBe("server/apis/GetFoo/helper.ts");
171
+ });
172
+
173
+ it("returns null for index.ts under an API directory", () => {
174
+ expect(
175
+ resolveSdkApiEntryPointRelativePath(
176
+ "/app",
177
+ "/app/server/apis/GetFoo/index.ts",
178
+ ),
179
+ ).toBeNull();
180
+ });
181
+ });
182
+
91
183
  describe("sdkApiEntryPointPlugin", () => {
92
184
  const root = "/app";
93
185
 
@@ -98,6 +190,19 @@ describe("sdkApiEntryPointPlugin", () => {
98
190
  });
99
191
 
100
192
  describe("transform", () => {
193
+ it("prepends __setEntryPoint for Clark-style list-issues.ts entry points", () => {
194
+ const { transform } = createPlugin(root);
195
+ const result = transform(
196
+ 'export default api({ name: "ListIssues" });',
197
+ path.join(root, "server/apis/issues/list-issues.ts"),
198
+ );
199
+
200
+ expect(result).not.toBeNull();
201
+ expect(result!.code).toContain(
202
+ '__sb_set_ep("server/apis/issues/list-issues.ts");',
203
+ );
204
+ });
205
+
101
206
  it("prepends __setEntryPoint for a standard API file", () => {
102
207
  const { transform } = createPlugin(root);
103
208
  const result = transform(
@@ -171,6 +276,34 @@ describe("sdkApiEntryPointPlugin", () => {
171
276
  );
172
277
  });
173
278
 
279
+ it("prepends __setEntryPoint when plugin root is vite client/ subdir (fullstack)", () => {
280
+ const appRoot = "/app";
281
+ const viteRoot = path.join(appRoot, "client");
282
+ const { transform } = createPlugin(viteRoot);
283
+ const result = transform(
284
+ 'export default api({ name: "GetPastAnalyses" });',
285
+ path.join(appRoot, "server/apis/GetPastAnalyses/api.ts"),
286
+ );
287
+
288
+ expect(result).not.toBeNull();
289
+ expect(result!.code).toContain(
290
+ '__sb_set_ep("server/apis/GetPastAnalyses/api.ts");',
291
+ );
292
+ });
293
+
294
+ it("prepends __setEntryPoint for /@fs/ module ids", () => {
295
+ const { transform } = createPlugin(root);
296
+ const result = transform(
297
+ 'export default api({ name: "GetFeedback" });',
298
+ "/@fs/Users/me/app/server/apis/GetFeedback/api.ts",
299
+ );
300
+
301
+ expect(result).not.toBeNull();
302
+ expect(result!.code).toContain(
303
+ '__sb_set_ep("server/apis/GetFeedback/api.ts");',
304
+ );
305
+ });
306
+
174
307
  it("preserves original code after the prepend", () => {
175
308
  const { transform } = createPlugin(root);
176
309
  const originalCode = [