vxrn 1.4.11 → 1.4.12

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
- import { webExtensions } from "../constants";
1
+ import { ssrExtensions, webExtensions } from "../constants";
2
2
  import FSExtra from "fs-extra";
3
3
  import { extname } from "node:path";
4
4
  import { createVXRNCompilerPlugin } from "@vxrn/compiler";
@@ -18,7 +18,7 @@ function getBaseVitePlugins() {
18
18
  environments: {
19
19
  ssr: {
20
20
  resolve: {
21
- extensions: webExtensions,
21
+ extensions: ssrExtensions,
22
22
  conditions: ["vxrn-web"],
23
23
  externalConditions: ["vxrn-web"]
24
24
  }
@@ -38,9 +38,13 @@ function getBaseVitePlugins() {
38
38
  const resolved = await this.resolve(source, importer, options);
39
39
  if (!resolved || resolved.id.includes("node_modules"))
40
40
  return resolved;
41
+ if (this.environment.name !== "ssr" && /\.server\.\w+$/.test(resolved.id))
42
+ throw new Error(
43
+ `[one] .server file cannot be imported on ${this.environment.name}: ${source} (imported by ${importer})`
44
+ );
41
45
  const jsExtension = extname(resolved.id), withoutExt = resolved.id.replace(new RegExp(`\\${jsExtension}$`), ""), platformSpecificExtension = {
42
46
  client: ["web"],
43
- ssr: ["web"],
47
+ ssr: ["server", "web"],
44
48
  ios: ["ios", "native"],
45
49
  android: ["android", "native"]
46
50
  }[this.environment.name];
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/config/getBaseVitePlugins.ts"],
4
- "mappings": "AACA,SAAS,qBAAqB;AAC9B,OAAO,aAAa;AACpB,SAAS,eAAe;AACxB,SAAS,gCAAgC;AAIlC,SAAS,qBAAqC;AACnD,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AACP,eAAO;AAAA,UACL,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,UAKT;AAAA,UAEA,cAAc;AAAA,YACZ,KAAK;AAAA,cACH,SAAS;AAAA,gBACP,YAAY;AAAA,gBACZ,YAAY,CAAC,UAAU;AAAA,gBACvB,oBAAoB,CAAC,UAAU;AAAA,cACjC;AAAA,YACF;AAAA,YAEA,QAAQ;AAAA,cACN,SAAS;AAAA,gBACP,YAAY;AAAA,gBACZ,YAAY,CAAC,UAAU;AAAA,cACzB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,UAAU,QAAQ,UAAU,SAAS;AAKzC,YAAI,SAAS,KAAM;AAOnB,cAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,UAAU,OAAO;AAE7D,YAAI,CAAC,YAAY,SAAS,GAAG,SAAS,cAAc;AAClD,iBAAO;AAIT,cAAM,cAAc,QAAQ,SAAS,EAAE,GACjC,aAAa,SAAS,GAAG,QAAQ,IAAI,OAAO,KAAK,WAAW,GAAG,GAAG,EAAE,GASpE,4BAP0B;AAAA,UAC9B,QAAQ,CAAC,KAAK;AAAA,UACd,KAAK,CAAC,KAAK;AAAA,UACX,KAAK,CAAC,OAAO,QAAQ;AAAA,UACrB,SAAS,CAAC,WAAW,QAAQ;AAAA,QAC/B,EAE0D,KAAK,YAAY,IAAI;AAE/E,YAAI;AACF,qBAAW,qBAAqB,2BAA2B;AACzD,kBAAM,WAAW,GAAG,UAAU,IAAI,iBAAiB,GAAG,WAAW;AACjE,gBAAI,MAAM,QAAQ,WAAW,QAAQ;AACnC,qBAAO;AAAA,gBACL,IAAI;AAAA,cACN;AAAA,UAEJ;AAAA,MAEJ;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACE,MAAM;AAAA,MAEN,kBAAkB;AAChB,cAAM,SAAS,QAAQ;AACvB,gBAAQ,OAAO,IAAI,SAAgB;AACjC,cACE,SAAO,KAAK,CAAC,KAAM,YACnB,KAAK,CAAC,EAAE,WAAW,+BAA+B;AAIpD,mBAAO,OAAO,GAAG,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,yBAAyB,CAAC,CAAC;AAAA,EAC7B;AACF;",
4
+ "mappings": "AACA,SAAS,eAAe,qBAAqB;AAC7C,OAAO,aAAa;AACpB,SAAS,eAAe;AACxB,SAAS,gCAAgC;AAIlC,SAAS,qBAAqC;AACnD,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AACP,eAAO;AAAA,UACL,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,UAKT;AAAA,UAEA,cAAc;AAAA,YACZ,KAAK;AAAA,cACH,SAAS;AAAA,gBACP,YAAY;AAAA,gBACZ,YAAY,CAAC,UAAU;AAAA,gBACvB,oBAAoB,CAAC,UAAU;AAAA,cACjC;AAAA,YACF;AAAA,YAEA,QAAQ;AAAA,cACN,SAAS;AAAA,gBACP,YAAY;AAAA,gBACZ,YAAY,CAAC,UAAU;AAAA,cACzB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAGA,MAAM,UAAU,QAAQ,UAAU,SAAS;AAKzC,YAAI,SAAS,KAAM;AAOnB,cAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,UAAU,OAAO;AAE7D,YAAI,CAAC,YAAY,SAAS,GAAG,SAAS,cAAc;AAClD,iBAAO;AAIT,YAAI,KAAK,YAAY,SAAS,SAAS,iBAAiB,KAAK,SAAS,EAAE;AACtE,gBAAM,IAAI;AAAA,YACR,4CAA4C,KAAK,YAAY,IAAI,KAAK,MAAM,iBAAiB,QAAQ;AAAA,UACvG;AAIF,cAAM,cAAc,QAAQ,SAAS,EAAE,GACjC,aAAa,SAAS,GAAG,QAAQ,IAAI,OAAO,KAAK,WAAW,GAAG,GAAG,EAAE,GASpE,4BAP0B;AAAA,UAC9B,QAAQ,CAAC,KAAK;AAAA,UACd,KAAK,CAAC,UAAU,KAAK;AAAA,UACrB,KAAK,CAAC,OAAO,QAAQ;AAAA,UACrB,SAAS,CAAC,WAAW,QAAQ;AAAA,QAC/B,EAE0D,KAAK,YAAY,IAAI;AAE/E,YAAI;AACF,qBAAW,qBAAqB,2BAA2B;AACzD,kBAAM,WAAW,GAAG,UAAU,IAAI,iBAAiB,GAAG,WAAW;AACjE,gBAAI,MAAM,QAAQ,WAAW,QAAQ;AACnC,qBAAO;AAAA,gBACL,IAAI;AAAA,cACN;AAAA,UAEJ;AAAA,MAEJ;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACE,MAAM;AAAA,MAEN,kBAAkB;AAChB,cAAM,SAAS,QAAQ;AACvB,gBAAQ,OAAO,IAAI,SAAgB;AACjC,cACE,SAAO,KAAK,CAAC,KAAM,YACnB,KAAK,CAAC,EAAE,WAAW,+BAA+B;AAIpD,mBAAO,OAAO,GAAG,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,yBAAyB,CAAC,CAAC;AAAA,EAC7B;AACF;",
5
5
  "names": []
6
6
  }
@@ -1,4 +1,4 @@
1
- import { webExtensions } from "../constants.mjs";
1
+ import { ssrExtensions, webExtensions } from "../constants.mjs";
2
2
  import FSExtra from "fs-extra";
3
3
  import { extname } from "node:path";
4
4
  import { createVXRNCompilerPlugin } from "@vxrn/compiler";
@@ -17,7 +17,7 @@ function getBaseVitePlugins() {
17
17
  environments: {
18
18
  ssr: {
19
19
  resolve: {
20
- extensions: webExtensions,
20
+ extensions: ssrExtensions,
21
21
  conditions: ["vxrn-web"],
22
22
  externalConditions: ["vxrn-web"]
23
23
  }
@@ -36,11 +36,12 @@ function getBaseVitePlugins() {
36
36
  if (options?.scan) return;
37
37
  const resolved = await this.resolve(source, importer, options);
38
38
  if (!resolved || resolved.id.includes("node_modules")) return resolved;
39
+ if (this.environment.name !== "ssr" && /\.server\.\w+$/.test(resolved.id)) throw new Error(`[one] .server file cannot be imported on ${this.environment.name}: ${source} (imported by ${importer})`);
39
40
  const jsExtension = extname(resolved.id),
40
41
  withoutExt = resolved.id.replace(new RegExp(`\\${jsExtension}$`), ""),
41
42
  platformSpecificExtension = {
42
43
  client: ["web"],
43
- ssr: ["web"],
44
+ ssr: ["server", "web"],
44
45
  ios: ["ios", "native"],
45
46
  android: ["android", "native"]
46
47
  }[this.environment.name];
@@ -1 +1 @@
1
- {"version":3,"names":["webExtensions","FSExtra","extname","createVXRNCompilerPlugin","getBaseVitePlugins","name","enforce","config","resolve","environments","ssr","extensions","conditions","externalConditions","client","resolveId","source","importer","options","scan","resolved","id","includes","jsExtension","withoutExt","replace","RegExp","platformSpecificExtension","ios","android","environment","platformExtension","fullPath","pathExists","configureServer","ogWarn","console","warn","args","startsWith"],"sources":["../../src/config/getBaseVitePlugins.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,aAAA,QAAqB;AAC9B,OAAOC,OAAA,MAAa;AACpB,SAASC,OAAA,QAAe;AACxB,SAASC,wBAAA,QAAgC;AAIlC,SAASC,mBAAA,EAAqC;EACnD,OAAO,CACL;IACEC,IAAA,EAAM;IACNC,OAAA,EAAS;IACTC,OAAA,EAAS;MACP,OAAO;QACLC,OAAA,EAAS;UAAA;UAAA;UAAA;UAAA;QAAA,CAKT;QAEAC,YAAA,EAAc;UACZC,GAAA,EAAK;YACHF,OAAA,EAAS;cACPG,UAAA,EAAYX,aAAA;cACZY,UAAA,EAAY,CAAC,UAAU;cACvBC,kBAAA,EAAoB,CAAC,UAAU;YACjC;UACF;UAEAC,MAAA,EAAQ;YACNN,OAAA,EAAS;cACPG,UAAA,EAAYX,aAAA;cACZY,UAAA,EAAY,CAAC,UAAU;YACzB;UACF;QACF;MACF;IACF;IAAA;IAGA,MAAMG,UAAUC,MAAA,EAAQC,QAAA,EAAUC,OAAA,EAAS;MAKzC,IAAIA,OAAA,EAASC,IAAA,EAAM;MAOnB,MAAMC,QAAA,GAAW,MAAM,KAAKZ,OAAA,CAAQQ,MAAA,EAAQC,QAAA,EAAUC,OAAO;MAE7D,IAAI,CAACE,QAAA,IAAYA,QAAA,CAASC,EAAA,CAAGC,QAAA,CAAS,cAAc,GAClD,OAAOF,QAAA;MAIT,MAAMG,WAAA,GAAcrB,OAAA,CAAQkB,QAAA,CAASC,EAAE;QACjCG,UAAA,GAAaJ,QAAA,CAASC,EAAA,CAAGI,OAAA,CAAQ,IAAIC,MAAA,CAAO,KAAKH,WAAW,GAAG,GAAG,EAAE;QASpEI,yBAAA,GAP0B;UAC9Bb,MAAA,EAAQ,CAAC,KAAK;UACdJ,GAAA,EAAK,CAAC,KAAK;UACXkB,GAAA,EAAK,CAAC,OAAO,QAAQ;UACrBC,OAAA,EAAS,CAAC,WAAW,QAAQ;QAC/B,EAE0D,KAAKC,WAAA,CAAYzB,IAAI;MAE/E,IAAIsB,yBAAA,EACF,WAAWI,iBAAA,IAAqBJ,yBAAA,EAA2B;QACzD,MAAMK,QAAA,GAAW,GAAGR,UAAU,IAAIO,iBAAiB,GAAGR,WAAW;QACjE,IAAI,MAAMtB,OAAA,CAAQgC,UAAA,CAAWD,QAAQ,GACnC,OAAO;UACLX,EAAA,EAAIW;QACN;MAEJ;IAEJ;EACF;EAAA;EAAA;EAAA;EAKA;IACE3B,IAAA,EAAM;IAEN6B,gBAAA,EAAkB;MAChB,MAAMC,MAAA,GAASC,OAAA,CAAQC,IAAA;MACvBD,OAAA,CAAQC,IAAA,GAAO,IAAIC,IAAA,KAAgB;QACjC,IACE,SAAOA,IAAA,CAAK,CAAC,KAAM,YACnBA,IAAA,CAAK,CAAC,EAAEC,UAAA,CAAW,+BAA+B,IAIpD,OAAOJ,MAAA,CAAO,GAAGG,IAAI;MACvB;IACF;EACF,GAEAnC,wBAAA,CAAyB,CAAC,CAAC,EAC7B;AACF","ignoreList":[]}
1
+ {"version":3,"names":["ssrExtensions","webExtensions","FSExtra","extname","createVXRNCompilerPlugin","getBaseVitePlugins","name","enforce","config","resolve","environments","ssr","extensions","conditions","externalConditions","client","resolveId","source","importer","options","scan","resolved","id","includes","environment","test","Error","jsExtension","withoutExt","replace","RegExp","platformSpecificExtension","ios","android","platformExtension","fullPath","pathExists","configureServer","ogWarn","console","warn","args","startsWith"],"sources":["../../src/config/getBaseVitePlugins.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,aAAA,EAAeC,aAAA,QAAqB;AAC7C,OAAOC,OAAA,MAAa;AACpB,SAASC,OAAA,QAAe;AACxB,SAASC,wBAAA,QAAgC;AAIlC,SAASC,mBAAA,EAAqC;EACnD,OAAO,CACL;IACEC,IAAA,EAAM;IACNC,OAAA,EAAS;IACTC,OAAA,EAAS;MACP,OAAO;QACLC,OAAA,EAAS;UAAA;UAAA;UAAA;UAAA;QAAA,CAKT;QAEAC,YAAA,EAAc;UACZC,GAAA,EAAK;YACHF,OAAA,EAAS;cACPG,UAAA,EAAYZ,aAAA;cACZa,UAAA,EAAY,CAAC,UAAU;cACvBC,kBAAA,EAAoB,CAAC,UAAU;YACjC;UACF;UAEAC,MAAA,EAAQ;YACNN,OAAA,EAAS;cACPG,UAAA,EAAYX,aAAA;cACZY,UAAA,EAAY,CAAC,UAAU;YACzB;UACF;QACF;MACF;IACF;IAAA;IAGA,MAAMG,UAAUC,MAAA,EAAQC,QAAA,EAAUC,OAAA,EAAS;MAKzC,IAAIA,OAAA,EAASC,IAAA,EAAM;MAOnB,MAAMC,QAAA,GAAW,MAAM,KAAKZ,OAAA,CAAQQ,MAAA,EAAQC,QAAA,EAAUC,OAAO;MAE7D,IAAI,CAACE,QAAA,IAAYA,QAAA,CAASC,EAAA,CAAGC,QAAA,CAAS,cAAc,GAClD,OAAOF,QAAA;MAIT,IAAI,KAAKG,WAAA,CAAYlB,IAAA,KAAS,SAAS,iBAAiBmB,IAAA,CAAKJ,QAAA,CAASC,EAAE,GACtE,MAAM,IAAII,KAAA,CACR,4CAA4C,KAAKF,WAAA,CAAYlB,IAAI,KAAKW,MAAM,iBAAiBC,QAAQ,GACvG;MAIF,MAAMS,WAAA,GAAcxB,OAAA,CAAQkB,QAAA,CAASC,EAAE;QACjCM,UAAA,GAAaP,QAAA,CAASC,EAAA,CAAGO,OAAA,CAAQ,IAAIC,MAAA,CAAO,KAAKH,WAAW,GAAG,GAAG,EAAE;QASpEI,yBAAA,GAP0B;UAC9BhB,MAAA,EAAQ,CAAC,KAAK;UACdJ,GAAA,EAAK,CAAC,UAAU,KAAK;UACrBqB,GAAA,EAAK,CAAC,OAAO,QAAQ;UACrBC,OAAA,EAAS,CAAC,WAAW,QAAQ;QAC/B,EAE0D,KAAKT,WAAA,CAAYlB,IAAI;MAE/E,IAAIyB,yBAAA,EACF,WAAWG,iBAAA,IAAqBH,yBAAA,EAA2B;QACzD,MAAMI,QAAA,GAAW,GAAGP,UAAU,IAAIM,iBAAiB,GAAGP,WAAW;QACjE,IAAI,MAAMzB,OAAA,CAAQkC,UAAA,CAAWD,QAAQ,GACnC,OAAO;UACLb,EAAA,EAAIa;QACN;MAEJ;IAEJ;EACF;EAAA;EAAA;EAAA;EAKA;IACE7B,IAAA,EAAM;IAEN+B,gBAAA,EAAkB;MAChB,MAAMC,MAAA,GAASC,OAAA,CAAQC,IAAA;MACvBD,OAAA,CAAQC,IAAA,GAAO,IAAIC,IAAA,KAAgB;QACjC,IACE,SAAOA,IAAA,CAAK,CAAC,KAAM,YACnBA,IAAA,CAAK,CAAC,EAAEC,UAAA,CAAW,+BAA+B,IAIpD,OAAOJ,MAAA,CAAO,GAAGG,IAAI;MACvB;IACF;EACF,GAEArC,wBAAA,CAAyB,CAAC,CAAC,EAC7B;AACF","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { webExtensions } from "../constants.native.js";
1
+ import { ssrExtensions, webExtensions } from "../constants.native.js";
2
2
  import FSExtra from "fs-extra";
3
3
  import { extname } from "path";
4
4
  import { createVXRNCompilerPlugin } from "@vxrn/compiler";
@@ -16,7 +16,7 @@ function getBaseVitePlugins() {
16
16
  environments: {
17
17
  ssr: {
18
18
  resolve: {
19
- extensions: webExtensions,
19
+ extensions: ssrExtensions,
20
20
  conditions: ["vxrn-web"],
21
21
  externalConditions: ["vxrn-web"]
22
22
  }
@@ -35,11 +35,12 @@ function getBaseVitePlugins() {
35
35
  if (!options?.scan) {
36
36
  var resolved = await this.resolve(source, importer, options);
37
37
  if (!resolved || resolved.id.includes("node_modules")) return resolved;
38
+ if (this.environment.name !== "ssr" && /\.server\.\w+$/.test(resolved.id)) throw new Error(`[one] .server file cannot be imported on ${this.environment.name}: ${source} (imported by ${importer})`);
38
39
  var jsExtension = extname(resolved.id),
39
40
  withoutExt = resolved.id.replace(new RegExp(`\\${jsExtension}$`), ""),
40
41
  extensionsByEnvironment = {
41
42
  client: ["web"],
42
- ssr: ["web"],
43
+ ssr: ["server", "web"],
43
44
  ios: ["ios", "native"],
44
45
  android: ["android", "native"]
45
46
  },
@@ -1 +1 @@
1
- {"version":3,"names":["webExtensions","FSExtra","extname","createVXRNCompilerPlugin","getBaseVitePlugins","name","enforce","config","resolve","environments","ssr","extensions","conditions","externalConditions","client","resolveId","source","importer","options","scan","resolved","id","includes","jsExtension","withoutExt","replace","RegExp","extensionsByEnvironment","ios","android","platformSpecificExtension","environment","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","platformExtension","value","fullPath","pathExists","err"],"sources":["../../src/config/getBaseVitePlugins.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,aAAA,QAAqB;AAC9B,OAAOC,OAAA,MAAa;AACpB,SAASC,OAAA,QAAe;AACxB,SAASC,wBAAA,QAAgC;AAIlC,SAASC,mBAAA,EAAqC;EACnD,OAAO,CACL;IACEC,IAAA,EAAM;IACNC,OAAA,EAAS;IACTC,OAAA,EAAS;MACP,OAAO;QACLC,OAAA,EAAS;QAAA;QAAA;QAAA;QAAA;QAKTC,YAAA;UAEAC,GAAA;YACEF,OAAK;cACHG,UAAS,EAAAX,aAAA;cACPY,UAAA,EAAY,CACZ,UAAY,CACZ;cACFC,kBAAA,GACF;YAGE;UAAS;UACKC,MACZ;YACFN,OAAA;cACFG,UAAA,EAAAX,aAAA;cACFY,UAAA,GACF;YACF;UAGM;QAKJ;MAOA;IAEA;IACE;IAIF,MAAAG,SAAMA,CAAAC,MAAc,EAAAC,QAAQ,EAAAC,OAAW;MAGP,IAC9B,CAAAA,OAAS,EAAAC,IAAK;QACd,IAAAC,QAAW,cAAAZ,OAAA,CAAAQ,MAAA,EAAAC,QAAA,EAAAC,OAAA;QACX,KAAKE,QAAQ,IAAAA,QAAQ,CAAAC,EAAA,CAAAC,QAAA,kBACrB,OAASF,QAAC;QAG8C,IAAAG,WAAK,GAAYrB,OAAI,CAAAkB,QAAA,CAAAC,EAAA;UAAAG,UAAA,GAAAJ,QAAA,CAAAC,EAAA,CAAAI,OAAA,KAAAC,MAAA,MAAAH,WAAA;UAAAI,uBAAA;YAE3Eb,MAAA,GACF,MACE;YACAJ,GAAA,EAAI,CACF,MAAO;YACDkB,GACN,GAEJ,OAEJ,SACF;YAAAC,OAAA;UAME;UAAMC,yBAAA,GAAAH,uBAAA,MAAAI,WAAA,CAAA1B,IAAA;QAEN,IAAAyB,yBAAkB;UAChB,IAAME,yBAAiB;YAAAC,iBAAA;YAAAC,cAAA;UACvB,IAAQ;YAEJ,SAAOC,SAAM,GAAML,yBACX,CAAAM,MAAW,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAA+B,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;cAIpD,IAAOS,iBAAc,GAAAH,KAAA,CAAAI,KAAA;gBAAAC,QAAA,MAAAnB,UAAA,IAAAiB,iBAAA,GAAAlB,WAAA;cACvB,UAAAtB,OAAA,CAAA2C,UAAA,CAAAD,QAAA,GACF;gBACFtB,EAAA,EAAAsB;cAEA;YACF;UACF,SAAAE,GAAA","ignoreList":[]}
1
+ {"version":3,"names":["ssrExtensions","webExtensions","FSExtra","extname","createVXRNCompilerPlugin","getBaseVitePlugins","name","enforce","config","resolve","environments","ssr","extensions","conditions","externalConditions","client","resolveId","source","importer","options","scan","resolved","id","includes","environment","test","Error","jsExtension","withoutExt","replace","RegExp","extensionsByEnvironment","ios","android","platformSpecificExtension","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","platformExtension","value","fullPath","pathExists","err"],"sources":["../../src/config/getBaseVitePlugins.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,aAAA,EAAeC,aAAA,QAAqB;AAC7C,OAAOC,OAAA,MAAa;AACpB,SAASC,OAAA,QAAe;AACxB,SAASC,wBAAA,QAAgC;AAIlC,SAASC,mBAAA,EAAqC;EACnD,OAAO,CACL;IACEC,IAAA,EAAM;IACNC,OAAA,EAAS;IACTC,OAAA,EAAS;MACP,OAAO;QACLC,OAAA,EAAS;QAAA;QAAA;QAAA;QAAA;QAKTC,YAAA;UAEAC,GAAA;YACEF,OAAK;cACHG,UAAS,EAAAZ,aAAA;cACPa,UAAA,EAAY,CACZ,UAAY,CACZ;cACFC,kBAAA,GACF;YAGE;UAAS;UACKC,MACZ;YACFN,OAAA;cACFG,UAAA,EAAAX,aAAA;cACFY,UAAA,GACF;YACF;UAGM;QAKJ;MAOA;IAEA;IACE;IAIF,MAAIG,SAAKA,CAAAC,MAAA,EAAYC,QAAS,EAAAC,OAAS;MACrC,KAAAA,OAAU,EAAAC,IAAA;QAAA,IACRC,QAAA,cAAAZ,OAAA,CAAAQ,MAAA,EAAAC,QAA4C,EAAKC,OAAA;QACnD,KAAAE,QAAA,IAAAA,QAAA,CAAAC,EAAA,CAAAC,QAAA,kBAIF,OAAMF,QAAA;QAIJ,QAAQ,CAACG,WAAK,CAAAlB,IAAA,+BAAAmB,IAAA,CAAAJ,QAAA,CAAAC,EAAA,GACd,MAAM,IAAAI,KAAU,6CAAK,KAAAF,WAAA,CAAAlB,IAAA,KAAAW,MAAA,iBAAAC,QAAA;QACrB,IAAAS,WAAa,GAAAxB,OAAQ,CAAAkB,QAAA,CAAAC,EAAA;UAAAM,UAAA,GAAAP,QAAA,CAAAC,EAAA,CAAAO,OAAA,KAAAC,MAAA,MAAAH,WAAA;UAAAI,uBAAA;YACrBhB,MAAA,EAAU,CAG8C,KAAK,CAE3D;YACFJ,GAAA,GACE,QAAM,EACN,KAAI,CACF;YAAOqB,GAAA,EACL,CACF,OAEJ,SAEJ;YACFC,OAAA;UAKA;UAAAC,yBAAA,GAAAH,uBAAA,MAAAP,WAAA,CAAAlB,IAAA;QACE,IAAM4B,yBAAA;UAEN,IAAAC,yBAAkB;YAAAC,iBAAA;YAAAC,cAAA;UAChB,IAAM;YACN,KAAQ,IAAOC,SAAI,GAAAJ,yBAAgB,CAAAK,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;cAE/B,IAAAS,iBAAmB,GAAAH,KAAA,CACnBI,KAAK;gBAACC,QAAE,MAAWlB,UAAA,IAAAgB,iBAA+B,GAAAjB,WAAA;cAIpD,IAAO,MAAOzB,OAAO,CAAA6C,UAAA,CAAAD,QAAA,GACvB;gBACFxB,EAAA,EAAAwB;cACF;YAEA;UACF,SAAAE,GAAA;YACFZ,iBAAA,OAAAC,cAAA,GAAAW,GAAA","ignoreList":[]}
package/dist/constants.js CHANGED
@@ -11,9 +11,10 @@ const DEFAULT_PORT = 8081, viteDefaultExtensions = [
11
11
  ".web.mjs",
12
12
  ".web.js",
13
13
  ...viteDefaultExtensions
14
- ];
14
+ ], ssrExtensions = [".server.tsx", ".server.ts", ...webExtensions];
15
15
  export {
16
16
  DEFAULT_PORT,
17
+ ssrExtensions,
17
18
  webExtensions
18
19
  };
19
20
  //# sourceMappingURL=constants.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/constants.ts"],
4
- "mappings": "AAAO,MAAM,eAAe,MAEtB,wBAAwB;AAAA;AAAA,EAE5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEa,gBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;",
4
+ "mappings": "AAAO,MAAM,eAAe,MAEtB,wBAAwB;AAAA;AAAA,EAE5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEa,gBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAEa,gBAAgB,CAAC,eAAe,cAAc,GAAG,aAAa;",
5
5
  "names": []
6
6
  }
@@ -2,6 +2,7 @@ const DEFAULT_PORT = 8081,
2
2
  viteDefaultExtensions = [
3
3
  // keep indent
4
4
  ".mjs", ".js", ".ts", ".tsx", ".json"],
5
- webExtensions = [".web.tsx", ".web.ts", ".web.mjs", ".web.js", ...viteDefaultExtensions];
6
- export { DEFAULT_PORT, webExtensions };
5
+ webExtensions = [".web.tsx", ".web.ts", ".web.mjs", ".web.js", ...viteDefaultExtensions],
6
+ ssrExtensions = [".server.tsx", ".server.ts", ...webExtensions];
7
+ export { DEFAULT_PORT, ssrExtensions, webExtensions };
7
8
  //# sourceMappingURL=constants.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_PORT","viteDefaultExtensions","webExtensions"],"sources":["../src/constants.ts"],"sourcesContent":[null],"mappings":"AAAO,MAAMA,YAAA,GAAe;EAEtBC,qBAAA,GAAwB;EAAA;EAE5B,QACA,OACA,OACA,QACA,QACF;EAEaC,aAAA,GAAgB,CAC3B,YACA,WACA,YACA,WACA,GAAGD,qBAAA,CACL","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_PORT","viteDefaultExtensions","webExtensions","ssrExtensions"],"sources":["../src/constants.ts"],"sourcesContent":[null],"mappings":"AAAO,MAAMA,YAAA,GAAe;EAEtBC,qBAAA,GAAwB;EAAA;EAE5B,QACA,OACA,OACA,QACA,QACF;EAEaC,aAAA,GAAgB,CAC3B,YACA,WACA,YACA,WACA,GAAGD,qBAAA,CACL;EAEaE,aAAA,GAAgB,CAAC,eAAe,cAAc,GAAGD,aAAa","ignoreList":[]}
@@ -2,6 +2,7 @@ var DEFAULT_PORT = 8081,
2
2
  viteDefaultExtensions = [
3
3
  // keep indent
4
4
  ".mjs", ".js", ".ts", ".tsx", ".json"],
5
- webExtensions = [".web.tsx", ".web.ts", ".web.mjs", ".web.js", ...viteDefaultExtensions];
6
- export { DEFAULT_PORT, webExtensions };
5
+ webExtensions = [".web.tsx", ".web.ts", ".web.mjs", ".web.js", ...viteDefaultExtensions],
6
+ ssrExtensions = [".server.tsx", ".server.ts", ...webExtensions];
7
+ export { DEFAULT_PORT, ssrExtensions, webExtensions };
7
8
  //# sourceMappingURL=constants.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_PORT","viteDefaultExtensions","webExtensions"],"sources":["../src/constants.ts"],"sourcesContent":[null],"mappings":"AAAO,IAAAA,YAAM,OAAe;EAAAC,qBAEtB;EAAwB;EAE5B,QACA,OACA,OACA,QACA,QACF;EAEaC,aAAA,GAAgB,CAC3B,YACA,WACA,YACA,WACA,GAAGD,qBAAA,CACL","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_PORT","viteDefaultExtensions","webExtensions","ssrExtensions"],"sources":["../src/constants.ts"],"sourcesContent":[null],"mappings":"AAAO,IAAAA,YAAM,OAAe;EAAAC,qBAEtB;EAAwB;EAE5B,QACA,OACA,OACA,QACA,QACF;EAEaC,aAAA,GAAgB,CAC3B,YACA,WACA,YACA,WACA,GAAGD,qBAAA,CACL;EAEaE,aAAA,GAAgB,C","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ async function getPlatformResolvePlugin() {
3
+ const { getBaseVitePlugins } = await import("../config/getBaseVitePlugins"), plugin = getBaseVitePlugins().find(
4
+ (p) => typeof p == "object" && p !== null && "name" in p && p.name === "platform-specific-resolve"
5
+ );
6
+ if (!plugin || typeof plugin != "object" || !("resolveId" in plugin))
7
+ throw new Error("platform-specific-resolve plugin not found");
8
+ return plugin;
9
+ }
10
+ function createMockContext(envName, resolvedId) {
11
+ return {
12
+ resolve: vi.fn().mockResolvedValue(resolvedId ? { id: resolvedId } : null),
13
+ environment: { name: envName }
14
+ };
15
+ }
16
+ describe("platform-specific-resolve", () => {
17
+ describe(".server extension", () => {
18
+ it("ssr resolves .server files", async () => {
19
+ const resolveId = (await getPlatformResolvePlugin()).resolveId, FSExtra = await import("fs-extra");
20
+ vi.spyOn(FSExtra.default, "pathExists").mockImplementation(async (path) => String(path).includes(".server."));
21
+ const ctx = createMockContext("ssr", "/src/db.ts"), result = await resolveId.call(ctx, "./db", "/src/app.tsx", {});
22
+ expect(result).toEqual({ id: "/src/db.server.ts" }), vi.restoreAllMocks();
23
+ }), it("client does not resolve .server files", async () => {
24
+ const resolveId = (await getPlatformResolvePlugin()).resolveId, FSExtra = await import("fs-extra");
25
+ vi.spyOn(FSExtra.default, "pathExists").mockImplementation(async (path) => String(path).includes(".web."));
26
+ const ctx = createMockContext("client", "/src/db.ts"), result = await resolveId.call(ctx, "./db", "/src/app.tsx", {});
27
+ expect(result).toEqual({ id: "/src/db.web.ts" }), vi.restoreAllMocks();
28
+ }), it("errors when .server file is explicitly imported on client", async () => {
29
+ const resolveId = (await getPlatformResolvePlugin()).resolveId, ctx = createMockContext("client", "/src/db.server.ts");
30
+ await expect(
31
+ resolveId.call(ctx, "./db.server", "/src/page.tsx", {})
32
+ ).rejects.toThrow(".server file cannot be imported on client");
33
+ }), it("errors when .server file is explicitly imported on ios", async () => {
34
+ const resolveId = (await getPlatformResolvePlugin()).resolveId, ctx = createMockContext("ios", "/src/db.server.ts");
35
+ await expect(
36
+ resolveId.call(ctx, "./db.server", "/src/page.tsx", {})
37
+ ).rejects.toThrow(".server file cannot be imported on ios");
38
+ }), it("allows .server file import on ssr", async () => {
39
+ const resolveId = (await getPlatformResolvePlugin()).resolveId, FSExtra = await import("fs-extra");
40
+ vi.spyOn(FSExtra.default, "pathExists").mockResolvedValue(!1);
41
+ const ctx = createMockContext("ssr", "/src/db.server.ts"), result = await resolveId.call(ctx, "./db.server", "/src/page.tsx", {});
42
+ expect(result).toBeUndefined(), vi.restoreAllMocks();
43
+ });
44
+ }), describe("config extensions", () => {
45
+ it("ssr includes .server extensions", async () => {
46
+ const ssrExts = (await getPlatformResolvePlugin()).config().environments.ssr.resolve.extensions;
47
+ expect(ssrExts).toContain(".server.ts"), expect(ssrExts).toContain(".server.tsx"), expect(ssrExts).toContain(".web.ts");
48
+ }), it("client does not include .server extensions", async () => {
49
+ const clientExts = (await getPlatformResolvePlugin()).config().environments.client.resolve.extensions;
50
+ expect(clientExts).not.toContain(".server.ts"), expect(clientExts).not.toContain(".server.tsx");
51
+ });
52
+ });
53
+ });
54
+ //# sourceMappingURL=serverExtensions.test.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/plugins/serverExtensions.test.ts"],
4
+ "mappings": "AAAA,SAAS,UAAU,QAAQ,IAAI,UAAU;AAGzC,eAAe,2BAA2B;AACxC,QAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,8BAA8B,GAGpE,SAFU,mBAAmB,EAEZ;AAAA,IACrB,CAAC,MACC,OAAO,KAAM,YACb,MAAM,QACN,UAAU,KACV,EAAE,SAAS;AAAA,EACf;AAEA,MAAI,CAAC,UAAU,OAAO,UAAW,YAAY,EAAE,eAAe;AAC5D,UAAM,IAAI,MAAM,4CAA4C;AAG9D,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAiB,YAAqB;AAC/D,SAAO;AAAA,IACL,SAAS,GAAG,GAAG,EAAE,kBAAkB,aAAa,EAAE,IAAI,WAAW,IAAI,IAAI;AAAA,IACzE,aAAa,EAAE,MAAM,QAAQ;AAAA,EAC/B;AACF;AAEA,SAAS,6BAA6B,MAAM;AAC1C,WAAS,qBAAqB,MAAM;AAClC,OAAG,8BAA8B,YAAY;AAE3C,YAAM,aADS,MAAM,yBAAyB,GACrB,WAEnB,UAAU,MAAM,OAAO,UAAU;AACvC,SAAG,MAAM,QAAQ,SAAS,YAAY,EAAE,mBAAmB,OAAO,SACzD,OAAO,IAAI,EAAE,SAAS,UAAU,CACxC;AAED,YAAM,MAAM,kBAAkB,OAAO,YAAY,GAC3C,SAAS,MAAM,UAAU,KAAK,KAAK,QAAQ,gBAAgB,CAAC,CAAC;AAEnE,aAAO,MAAM,EAAE,QAAQ,EAAE,IAAI,oBAAoB,CAAC,GAElD,GAAG,gBAAgB;AAAA,IACrB,CAAC,GAED,GAAG,yCAAyC,YAAY;AAEtD,YAAM,aADS,MAAM,yBAAyB,GACrB,WAEnB,UAAU,MAAM,OAAO,UAAU;AACvC,SAAG,MAAM,QAAQ,SAAS,YAAY,EAAE,mBAAmB,OAAO,SACzD,OAAO,IAAI,EAAE,SAAS,OAAO,CACrC;AAED,YAAM,MAAM,kBAAkB,UAAU,YAAY,GAC9C,SAAS,MAAM,UAAU,KAAK,KAAK,QAAQ,gBAAgB,CAAC,CAAC;AAEnE,aAAO,MAAM,EAAE,QAAQ,EAAE,IAAI,iBAAiB,CAAC,GAE/C,GAAG,gBAAgB;AAAA,IACrB,CAAC,GAED,GAAG,6DAA6D,YAAY;AAE1E,YAAM,aADS,MAAM,yBAAyB,GACrB,WAEnB,MAAM,kBAAkB,UAAU,mBAAmB;AAE3D,YAAM;AAAA,QACJ,UAAU,KAAK,KAAK,eAAe,iBAAiB,CAAC,CAAC;AAAA,MACxD,EAAE,QAAQ,QAAQ,2CAA2C;AAAA,IAC/D,CAAC,GAED,GAAG,0DAA0D,YAAY;AAEvE,YAAM,aADS,MAAM,yBAAyB,GACrB,WAEnB,MAAM,kBAAkB,OAAO,mBAAmB;AAExD,YAAM;AAAA,QACJ,UAAU,KAAK,KAAK,eAAe,iBAAiB,CAAC,CAAC;AAAA,MACxD,EAAE,QAAQ,QAAQ,wCAAwC;AAAA,IAC5D,CAAC,GAED,GAAG,qCAAqC,YAAY;AAElD,YAAM,aADS,MAAM,yBAAyB,GACrB,WAEnB,UAAU,MAAM,OAAO,UAAU;AACvC,SAAG,MAAM,QAAQ,SAAS,YAAY,EAAE,kBAAkB,EAAY;AAEtE,YAAM,MAAM,kBAAkB,OAAO,mBAAmB,GAElD,SAAS,MAAM,UAAU,KAAK,KAAK,eAAe,iBAAiB,CAAC,CAAC;AAC3E,aAAO,MAAM,EAAE,cAAc,GAE7B,GAAG,gBAAgB;AAAA,IACrB,CAAC;AAAA,EACH,CAAC,GAED,SAAS,qBAAqB,MAAM;AAClC,OAAG,mCAAmC,YAAY;AAIhD,YAAM,WAHS,MAAM,yBAAyB,GACvB,OAAoB,EAEpB,aAAa,IAAI,QAAQ;AAChD,aAAO,OAAO,EAAE,UAAU,YAAY,GACtC,OAAO,OAAO,EAAE,UAAU,aAAa,GACvC,OAAO,OAAO,EAAE,UAAU,SAAS;AAAA,IACrC,CAAC,GAED,GAAG,8CAA8C,YAAY;AAI3D,YAAM,cAHS,MAAM,yBAAyB,GACvB,OAAoB,EAEjB,aAAa,OAAO,QAAQ;AACtD,aAAO,UAAU,EAAE,IAAI,UAAU,YAAY,GAC7C,OAAO,UAAU,EAAE,IAAI,UAAU,aAAa;AAAA,IAChD,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
5
+ "names": []
6
+ }
@@ -0,0 +1,66 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ async function getPlatformResolvePlugin() {
3
+ const {
4
+ getBaseVitePlugins
5
+ } = await import("../config/getBaseVitePlugins.mjs"),
6
+ plugin = getBaseVitePlugins().find(p => typeof p == "object" && p !== null && "name" in p && p.name === "platform-specific-resolve");
7
+ if (!plugin || typeof plugin != "object" || !("resolveId" in plugin)) throw new Error("platform-specific-resolve plugin not found");
8
+ return plugin;
9
+ }
10
+ function createMockContext(envName, resolvedId) {
11
+ return {
12
+ resolve: vi.fn().mockResolvedValue(resolvedId ? {
13
+ id: resolvedId
14
+ } : null),
15
+ environment: {
16
+ name: envName
17
+ }
18
+ };
19
+ }
20
+ describe("platform-specific-resolve", () => {
21
+ describe(".server extension", () => {
22
+ it("ssr resolves .server files", async () => {
23
+ const resolveId = (await getPlatformResolvePlugin()).resolveId,
24
+ FSExtra = await import("fs-extra");
25
+ vi.spyOn(FSExtra.default, "pathExists").mockImplementation(async path => String(path).includes(".server."));
26
+ const ctx = createMockContext("ssr", "/src/db.ts"),
27
+ result = await resolveId.call(ctx, "./db", "/src/app.tsx", {});
28
+ expect(result).toEqual({
29
+ id: "/src/db.server.ts"
30
+ }), vi.restoreAllMocks();
31
+ }), it("client does not resolve .server files", async () => {
32
+ const resolveId = (await getPlatformResolvePlugin()).resolveId,
33
+ FSExtra = await import("fs-extra");
34
+ vi.spyOn(FSExtra.default, "pathExists").mockImplementation(async path => String(path).includes(".web."));
35
+ const ctx = createMockContext("client", "/src/db.ts"),
36
+ result = await resolveId.call(ctx, "./db", "/src/app.tsx", {});
37
+ expect(result).toEqual({
38
+ id: "/src/db.web.ts"
39
+ }), vi.restoreAllMocks();
40
+ }), it("errors when .server file is explicitly imported on client", async () => {
41
+ const resolveId = (await getPlatformResolvePlugin()).resolveId,
42
+ ctx = createMockContext("client", "/src/db.server.ts");
43
+ await expect(resolveId.call(ctx, "./db.server", "/src/page.tsx", {})).rejects.toThrow(".server file cannot be imported on client");
44
+ }), it("errors when .server file is explicitly imported on ios", async () => {
45
+ const resolveId = (await getPlatformResolvePlugin()).resolveId,
46
+ ctx = createMockContext("ios", "/src/db.server.ts");
47
+ await expect(resolveId.call(ctx, "./db.server", "/src/page.tsx", {})).rejects.toThrow(".server file cannot be imported on ios");
48
+ }), it("allows .server file import on ssr", async () => {
49
+ const resolveId = (await getPlatformResolvePlugin()).resolveId,
50
+ FSExtra = await import("fs-extra");
51
+ vi.spyOn(FSExtra.default, "pathExists").mockResolvedValue(!1);
52
+ const ctx = createMockContext("ssr", "/src/db.server.ts"),
53
+ result = await resolveId.call(ctx, "./db.server", "/src/page.tsx", {});
54
+ expect(result).toBeUndefined(), vi.restoreAllMocks();
55
+ });
56
+ }), describe("config extensions", () => {
57
+ it("ssr includes .server extensions", async () => {
58
+ const ssrExts = (await getPlatformResolvePlugin()).config().environments.ssr.resolve.extensions;
59
+ expect(ssrExts).toContain(".server.ts"), expect(ssrExts).toContain(".server.tsx"), expect(ssrExts).toContain(".web.ts");
60
+ }), it("client does not include .server extensions", async () => {
61
+ const clientExts = (await getPlatformResolvePlugin()).config().environments.client.resolve.extensions;
62
+ expect(clientExts).not.toContain(".server.ts"), expect(clientExts).not.toContain(".server.tsx");
63
+ });
64
+ });
65
+ });
66
+ //# sourceMappingURL=serverExtensions.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","vi","getPlatformResolvePlugin","getBaseVitePlugins","plugin","find","p","name","Error","createMockContext","envName","resolvedId","resolve","fn","mockResolvedValue","id","environment","resolveId","FSExtra","spyOn","default","mockImplementation","path","String","includes","ctx","result","call","toEqual","restoreAllMocks","rejects","toThrow","toBeUndefined","ssrExts","config","environments","ssr","extensions","toContain","clientExts","client","not"],"sources":["../../src/plugins/serverExtensions.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,87 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ function _type_of(obj) {
3
+ "@swc/helpers - typeof";
4
+
5
+ return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
6
+ }
7
+ async function getPlatformResolvePlugin() {
8
+ var {
9
+ getBaseVitePlugins
10
+ } = await import("../config/getBaseVitePlugins.native.js"),
11
+ plugins = getBaseVitePlugins(),
12
+ plugin = plugins.find(function (p) {
13
+ return (typeof p > "u" ? "undefined" : _type_of(p)) === "object" && p !== null && "name" in p && p.name === "platform-specific-resolve";
14
+ });
15
+ if (!plugin || (typeof plugin > "u" ? "undefined" : _type_of(plugin)) !== "object" || !("resolveId" in plugin)) throw new Error("platform-specific-resolve plugin not found");
16
+ return plugin;
17
+ }
18
+ function createMockContext(envName, resolvedId) {
19
+ return {
20
+ resolve: vi.fn().mockResolvedValue(resolvedId ? {
21
+ id: resolvedId
22
+ } : null),
23
+ environment: {
24
+ name: envName
25
+ }
26
+ };
27
+ }
28
+ describe("platform-specific-resolve", function () {
29
+ describe(".server extension", function () {
30
+ it("ssr resolves .server files", async function () {
31
+ var plugin = await getPlatformResolvePlugin(),
32
+ resolveId = plugin.resolveId,
33
+ FSExtra = await import("fs-extra");
34
+ vi.spyOn(FSExtra.default, "pathExists").mockImplementation(async function (path) {
35
+ return String(path).includes(".server.");
36
+ });
37
+ var ctx = createMockContext("ssr", "/src/db.ts"),
38
+ result = await resolveId.call(ctx, "./db", "/src/app.tsx", {});
39
+ expect(result).toEqual({
40
+ id: "/src/db.server.ts"
41
+ }), vi.restoreAllMocks();
42
+ }), it("client does not resolve .server files", async function () {
43
+ var plugin = await getPlatformResolvePlugin(),
44
+ resolveId = plugin.resolveId,
45
+ FSExtra = await import("fs-extra");
46
+ vi.spyOn(FSExtra.default, "pathExists").mockImplementation(async function (path) {
47
+ return String(path).includes(".web.");
48
+ });
49
+ var ctx = createMockContext("client", "/src/db.ts"),
50
+ result = await resolveId.call(ctx, "./db", "/src/app.tsx", {});
51
+ expect(result).toEqual({
52
+ id: "/src/db.web.ts"
53
+ }), vi.restoreAllMocks();
54
+ }), it("errors when .server file is explicitly imported on client", async function () {
55
+ var plugin = await getPlatformResolvePlugin(),
56
+ resolveId = plugin.resolveId,
57
+ ctx = createMockContext("client", "/src/db.server.ts");
58
+ await expect(resolveId.call(ctx, "./db.server", "/src/page.tsx", {})).rejects.toThrow(".server file cannot be imported on client");
59
+ }), it("errors when .server file is explicitly imported on ios", async function () {
60
+ var plugin = await getPlatformResolvePlugin(),
61
+ resolveId = plugin.resolveId,
62
+ ctx = createMockContext("ios", "/src/db.server.ts");
63
+ await expect(resolveId.call(ctx, "./db.server", "/src/page.tsx", {})).rejects.toThrow(".server file cannot be imported on ios");
64
+ }), it("allows .server file import on ssr", async function () {
65
+ var plugin = await getPlatformResolvePlugin(),
66
+ resolveId = plugin.resolveId,
67
+ FSExtra = await import("fs-extra");
68
+ vi.spyOn(FSExtra.default, "pathExists").mockResolvedValue(!1);
69
+ var ctx = createMockContext("ssr", "/src/db.server.ts"),
70
+ result = await resolveId.call(ctx, "./db.server", "/src/page.tsx", {});
71
+ expect(result).toBeUndefined(), vi.restoreAllMocks();
72
+ });
73
+ }), describe("config extensions", function () {
74
+ it("ssr includes .server extensions", async function () {
75
+ var plugin = await getPlatformResolvePlugin(),
76
+ config = plugin.config(),
77
+ ssrExts = config.environments.ssr.resolve.extensions;
78
+ expect(ssrExts).toContain(".server.ts"), expect(ssrExts).toContain(".server.tsx"), expect(ssrExts).toContain(".web.ts");
79
+ }), it("client does not include .server extensions", async function () {
80
+ var plugin = await getPlatformResolvePlugin(),
81
+ config = plugin.config(),
82
+ clientExts = config.environments.client.resolve.extensions;
83
+ expect(clientExts).not.toContain(".server.ts"), expect(clientExts).not.toContain(".server.tsx");
84
+ });
85
+ });
86
+ });
87
+ //# sourceMappingURL=serverExtensions.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","vi","_type_of","obj","Symbol","constructor","getPlatformResolvePlugin","getBaseVitePlugins","plugins","plugin","find","p","name","Error","createMockContext","envName","resolvedId","resolve","fn","mockResolvedValue","id","environment","resolveId","FSExtra","spyOn","default","mockImplementation","path","String","includes","ctx","result","call","toEqual","restoreAllMocks","rejects","toThrow"],"sources":["../../src/plugins/serverExtensions.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxrn",
3
- "version": "1.4.11",
3
+ "version": "1.4.12",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -66,17 +66,17 @@
66
66
  "@hono/node-server": "^1.19.6",
67
67
  "@react-native/dev-middleware": "^0.83.0",
68
68
  "@rollup/plugin-node-resolve": "^15.3.1",
69
- "@vxrn/compiler": "1.4.11",
70
- "@vxrn/debug": "1.4.11",
71
- "@vxrn/query-string": "1.4.11",
72
- "@vxrn/react-native-prebuilt": "1.4.11",
73
- "@vxrn/resolve": "1.4.11",
74
- "@vxrn/safe-area": "1.4.11",
75
- "@vxrn/url-parse": "1.4.11",
76
- "@vxrn/utils": "1.4.11",
77
- "@vxrn/vendor": "1.4.11",
78
- "@vxrn/vite-flow": "1.4.11",
79
- "@vxrn/vite-plugin-metro": "1.4.11",
69
+ "@vxrn/compiler": "1.4.12",
70
+ "@vxrn/debug": "1.4.12",
71
+ "@vxrn/query-string": "1.4.12",
72
+ "@vxrn/react-native-prebuilt": "1.4.12",
73
+ "@vxrn/resolve": "1.4.12",
74
+ "@vxrn/safe-area": "1.4.12",
75
+ "@vxrn/url-parse": "1.4.12",
76
+ "@vxrn/utils": "1.4.12",
77
+ "@vxrn/vendor": "1.4.12",
78
+ "@vxrn/vite-flow": "1.4.12",
79
+ "@vxrn/vite-plugin-metro": "1.4.12",
80
80
  "citty": "^0.1.6",
81
81
  "dotenv": "^17.2.1",
82
82
  "dotenv-expand": "^12.0.2",
@@ -86,7 +86,7 @@
86
86
  "find-node-modules": "^2.1.3",
87
87
  "fs-extra": "^11.2.0",
88
88
  "get-port-please": "^3.1.2",
89
- "hono": "^4.10.7",
89
+ "hono": "^4.11.8",
90
90
  "lightningcss": "^1.30.1",
91
91
  "perfect-debounce": "^1.0.0",
92
92
  "picocolors": "^1.0.0",
@@ -100,7 +100,7 @@
100
100
  "devDependencies": {
101
101
  "@biomejs/biome": "2.3.3",
102
102
  "@react-native-community/cli": "^20.0.2",
103
- "@tamagui/build": "^1.144.3",
103
+ "@tamagui/build": "^2.0.0-rc.6",
104
104
  "@types/find-node-modules": "^2.1.2",
105
105
  "@types/node": "^24.10.0",
106
106
  "@types/qrcode-terminal": "^0",
@@ -1,5 +1,5 @@
1
1
  import type { PluginOption } from 'vite'
2
- import { webExtensions } from '../constants'
2
+ import { ssrExtensions, webExtensions } from '../constants'
3
3
  import FSExtra from 'fs-extra'
4
4
  import { extname } from 'node:path'
5
5
  import { createVXRNCompilerPlugin } from '@vxrn/compiler'
@@ -23,7 +23,7 @@ export function getBaseVitePlugins(): PluginOption[] {
23
23
  environments: {
24
24
  ssr: {
25
25
  resolve: {
26
- extensions: webExtensions,
26
+ extensions: ssrExtensions,
27
27
  conditions: ['vxrn-web'],
28
28
  externalConditions: ['vxrn-web'],
29
29
  },
@@ -58,13 +58,20 @@ export function getBaseVitePlugins(): PluginOption[] {
58
58
  return resolved
59
59
  }
60
60
 
61
+ // error if .server. files are explicitly imported on client/native
62
+ if (this.environment.name !== 'ssr' && /\.server\.\w+$/.test(resolved.id)) {
63
+ throw new Error(
64
+ `[one] .server file cannot be imported on ${this.environment.name}: ${source} (imported by ${importer})`
65
+ )
66
+ }
67
+
61
68
  // not in node_modules, vite doesn't apply extensions! we need to manually
62
69
  const jsExtension = extname(resolved.id)
63
70
  const withoutExt = resolved.id.replace(new RegExp(`\\${jsExtension}$`), '')
64
71
 
65
72
  const extensionsByEnvironment = {
66
73
  client: ['web'],
67
- ssr: ['web'],
74
+ ssr: ['server', 'web'],
68
75
  ios: ['ios', 'native'],
69
76
  android: ['android', 'native'],
70
77
  }
package/src/constants.ts CHANGED
@@ -16,3 +16,5 @@ export const webExtensions = [
16
16
  '.web.js',
17
17
  ...viteDefaultExtensions,
18
18
  ]
19
+
20
+ export const ssrExtensions = ['.server.tsx', '.server.ts', ...webExtensions]
@@ -0,0 +1,124 @@
1
+ import { describe, expect, it, vi } from 'vitest'
2
+ import type { PluginOption } from 'vite'
3
+
4
+ async function getPlatformResolvePlugin() {
5
+ const { getBaseVitePlugins } = await import('../config/getBaseVitePlugins')
6
+ const plugins = getBaseVitePlugins() as PluginOption[]
7
+
8
+ const plugin = plugins.find(
9
+ (p) =>
10
+ typeof p === 'object' &&
11
+ p !== null &&
12
+ 'name' in p &&
13
+ p.name === 'platform-specific-resolve'
14
+ )
15
+
16
+ if (!plugin || typeof plugin !== 'object' || !('resolveId' in plugin)) {
17
+ throw new Error('platform-specific-resolve plugin not found')
18
+ }
19
+
20
+ return plugin
21
+ }
22
+
23
+ function createMockContext(envName: string, resolvedId?: string) {
24
+ return {
25
+ resolve: vi.fn().mockResolvedValue(resolvedId ? { id: resolvedId } : null),
26
+ environment: { name: envName },
27
+ }
28
+ }
29
+
30
+ describe('platform-specific-resolve', () => {
31
+ describe('.server extension', () => {
32
+ it('ssr resolves .server files', async () => {
33
+ const plugin = await getPlatformResolvePlugin()
34
+ const resolveId = plugin.resolveId as Function
35
+
36
+ const FSExtra = await import('fs-extra')
37
+ vi.spyOn(FSExtra.default, 'pathExists').mockImplementation(async (path: any) => {
38
+ return String(path).includes('.server.')
39
+ })
40
+
41
+ const ctx = createMockContext('ssr', '/src/db.ts')
42
+ const result = await resolveId.call(ctx, './db', '/src/app.tsx', {})
43
+
44
+ expect(result).toEqual({ id: '/src/db.server.ts' })
45
+
46
+ vi.restoreAllMocks()
47
+ })
48
+
49
+ it('client does not resolve .server files', async () => {
50
+ const plugin = await getPlatformResolvePlugin()
51
+ const resolveId = plugin.resolveId as Function
52
+
53
+ const FSExtra = await import('fs-extra')
54
+ vi.spyOn(FSExtra.default, 'pathExists').mockImplementation(async (path: any) => {
55
+ return String(path).includes('.web.')
56
+ })
57
+
58
+ const ctx = createMockContext('client', '/src/db.ts')
59
+ const result = await resolveId.call(ctx, './db', '/src/app.tsx', {})
60
+
61
+ expect(result).toEqual({ id: '/src/db.web.ts' })
62
+
63
+ vi.restoreAllMocks()
64
+ })
65
+
66
+ it('errors when .server file is explicitly imported on client', async () => {
67
+ const plugin = await getPlatformResolvePlugin()
68
+ const resolveId = plugin.resolveId as Function
69
+
70
+ const ctx = createMockContext('client', '/src/db.server.ts')
71
+
72
+ await expect(
73
+ resolveId.call(ctx, './db.server', '/src/page.tsx', {})
74
+ ).rejects.toThrow('.server file cannot be imported on client')
75
+ })
76
+
77
+ it('errors when .server file is explicitly imported on ios', async () => {
78
+ const plugin = await getPlatformResolvePlugin()
79
+ const resolveId = plugin.resolveId as Function
80
+
81
+ const ctx = createMockContext('ios', '/src/db.server.ts')
82
+
83
+ await expect(
84
+ resolveId.call(ctx, './db.server', '/src/page.tsx', {})
85
+ ).rejects.toThrow('.server file cannot be imported on ios')
86
+ })
87
+
88
+ it('allows .server file import on ssr', async () => {
89
+ const plugin = await getPlatformResolvePlugin()
90
+ const resolveId = plugin.resolveId as Function
91
+
92
+ const FSExtra = await import('fs-extra')
93
+ vi.spyOn(FSExtra.default, 'pathExists').mockResolvedValue(false as any)
94
+
95
+ const ctx = createMockContext('ssr', '/src/db.server.ts')
96
+ // should not throw
97
+ const result = await resolveId.call(ctx, './db.server', '/src/page.tsx', {})
98
+ expect(result).toBeUndefined()
99
+
100
+ vi.restoreAllMocks()
101
+ })
102
+ })
103
+
104
+ describe('config extensions', () => {
105
+ it('ssr includes .server extensions', async () => {
106
+ const plugin = await getPlatformResolvePlugin()
107
+ const config = (plugin.config as Function)()
108
+
109
+ const ssrExts = config.environments.ssr.resolve.extensions
110
+ expect(ssrExts).toContain('.server.ts')
111
+ expect(ssrExts).toContain('.server.tsx')
112
+ expect(ssrExts).toContain('.web.ts')
113
+ })
114
+
115
+ it('client does not include .server extensions', async () => {
116
+ const plugin = await getPlatformResolvePlugin()
117
+ const config = (plugin.config as Function)()
118
+
119
+ const clientExts = config.environments.client.resolve.extensions
120
+ expect(clientExts).not.toContain('.server.ts')
121
+ expect(clientExts).not.toContain('.server.tsx')
122
+ })
123
+ })
124
+ })
@@ -1 +1 @@
1
- {"version":3,"file":"getBaseVitePlugins.d.ts","sourceRoot":"","sources":["../../src/config/getBaseVitePlugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAQxC,wBAAgB,kBAAkB,IAAI,YAAY,EAAE,CAoGnD"}
1
+ {"version":3,"file":"getBaseVitePlugins.d.ts","sourceRoot":"","sources":["../../src/config/getBaseVitePlugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAQxC,wBAAgB,kBAAkB,IAAI,YAAY,EAAE,CA2GnD"}
@@ -1,3 +1,4 @@
1
1
  export declare const DEFAULT_PORT = 8081;
2
2
  export declare const webExtensions: string[];
3
+ export declare const ssrExtensions: string[];
3
4
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAA;AAWhC,eAAO,MAAM,aAAa,UAMzB,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAA;AAWhC,eAAO,MAAM,aAAa,UAMzB,CAAA;AAED,eAAO,MAAM,aAAa,UAAkD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serverExtensions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverExtensions.test.d.ts","sourceRoot":"","sources":["../../src/plugins/serverExtensions.test.ts"],"names":[],"mappings":""}