@ramonyx/bundler 2.0.0 → 2.0.2

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.
@@ -46,7 +46,11 @@ export function serverOnlyPlugin() {
46
46
  return {
47
47
  name: "ramonyx-server-only",
48
48
  enforce: "pre",
49
- async resolveId(source, importer) {
49
+ async resolveId(source, importer, resolveOptions) {
50
+ // SSR/dev must load the real server module: only the browser graph gets the poison stub.
51
+ if (resolveOptions?.ssr === true) {
52
+ return null;
53
+ }
50
54
  if (!SERVER_MODULE.test(source) || importer === undefined) {
51
55
  return null;
52
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server-only.js","sourceRoot":"","sources":["../../../packages/bundler/src/server-only.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,2FAA2F;AAC3F,2FAA2F;AAC3F,wDAAwD;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,aAAa,GAAG,4BAA4B,CAAC;AACnD,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEhD,gFAAgF;AAChF,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CACjC,8EAA8E,CAC/E,EAAE,CAAC;QACF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC7D,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC1C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,KAAwB;IACxD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CACtC,4BAA4B,IAAI,CAAC,SAAS,CACxC,IAAI,IAAI,UAAU,IAAI,wGAAwG,CAC/H,OAAO,CAAC;IACX,MAAM,KAAK,GAAG;QACZ,+DAA+D;QAC/D,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACjE,kBAAkB,MAAM,CAAC,SAAS,CAAC,GAAG;KACvC,CAAC;IACF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,KAAK;QACd,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,GAAG,cAAc,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE;YACX,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Plugin Vite: modul `*.server.ts` diganti **stub** di bundle klien (ADR-0063).\n//\n// Pola \"server-only\": halaman boleh mengimpor modul server (dipakai `loader`/`action` yang\n// berjalan di server), tetapi bundle klien menerima stub yang melempar bila dipanggil dari\n// kode klien — bukan kebocoran implementasi/API server.\n\nimport { readFile } from \"node:fs/promises\";\nimport type { Plugin } from \"vite\";\n\nconst SERVER_MODULE = /\\.server\\.(ts|tsx|js|mjs)$/;\nconst VIRTUAL_PREFIX = \"\\0ramonyx-server-stub:\";\n\n/** Nama ekspor dari sumber server (regex ringan — tipe/interface diabaikan). */\nfunction exportedNames(source: string): string[] {\n const names = new Set<string>();\n for (const match of source.matchAll(\n /export\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+([A-Za-z_$][\\w$]*)/g,\n )) {\n if (match[1] !== undefined) {\n names.add(match[1]);\n }\n }\n for (const match of source.matchAll(/export\\s*\\{([^}]*)\\}/g)) {\n for (const part of (match[1] ?? \"\").split(\",\")) {\n const cleaned = part.trim().replace(/^type\\s+/, \"\");\n if (cleaned.length === 0) {\n continue;\n }\n const alias = cleaned.split(/\\s+as\\s+/);\n const name = (alias[1] ?? alias[0] ?? \"\").trim();\n if (name.length > 0 && name !== \"default\") {\n names.add(name);\n }\n }\n }\n return [...names].sort();\n}\n\nfunction stubSource(file: string, names: readonly string[]): string {\n const poison = (name: string): string =>\n `(() => { throw new Error(${JSON.stringify(\n `\"${name}\" dari ${file} hanya tersedia di server — impor modul ini dari loader/action/route API, bukan kode klien (ADR-0063).`,\n )}); })`;\n const lines = [\n \"// Stub server-only (digenerate @ramonyx/bundler — ADR-0063).\",\n ...names.map((name) => `export const ${name} = ${poison(name)};`),\n `export default ${poison(\"default\")};`,\n ];\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n/**\n * Plugin untuk `buildClient`: setiap impor `*.server.ts` diresolusi ke stub yang melempar\n * bila dipanggil di browser.\n */\nexport function serverOnlyPlugin(): Plugin {\n return {\n name: \"ramonyx-server-only\",\n enforce: \"pre\",\n async resolveId(source, importer) {\n if (!SERVER_MODULE.test(source) || importer === undefined) {\n return null;\n }\n const resolved = await this.resolve(source, importer, { skipSelf: true });\n if (resolved === null) {\n return null;\n }\n return `${VIRTUAL_PREFIX}${resolved.id}`;\n },\n async load(id) {\n if (!id.startsWith(VIRTUAL_PREFIX)) {\n return null;\n }\n const file = id.slice(VIRTUAL_PREFIX.length);\n const source = await readFile(file, \"utf8\");\n return stubSource(file, exportedNames(source));\n },\n };\n}\n"]}
1
+ {"version":3,"file":"server-only.js","sourceRoot":"","sources":["../../../packages/bundler/src/server-only.ts"],"names":[],"mappings":"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","sourcesContent":["// Plugin Vite: modul `*.server.ts` diganti **stub** di bundle klien (ADR-0063).\n//\n// Pola \"server-only\": halaman boleh mengimpor modul server (dipakai `loader`/`action` yang\n// berjalan di server), tetapi bundle klien menerima stub yang melempar bila dipanggil dari\n// kode klien — bukan kebocoran implementasi/API server.\n\nimport { readFile } from \"node:fs/promises\";\nimport type { Plugin } from \"vite\";\n\nconst SERVER_MODULE = /\\.server\\.(ts|tsx|js|mjs)$/;\nconst VIRTUAL_PREFIX = \"\\0ramonyx-server-stub:\";\n\n/** Nama ekspor dari sumber server (regex ringan — tipe/interface diabaikan). */\nfunction exportedNames(source: string): string[] {\n const names = new Set<string>();\n for (const match of source.matchAll(\n /export\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+([A-Za-z_$][\\w$]*)/g,\n )) {\n if (match[1] !== undefined) {\n names.add(match[1]);\n }\n }\n for (const match of source.matchAll(/export\\s*\\{([^}]*)\\}/g)) {\n for (const part of (match[1] ?? \"\").split(\",\")) {\n const cleaned = part.trim().replace(/^type\\s+/, \"\");\n if (cleaned.length === 0) {\n continue;\n }\n const alias = cleaned.split(/\\s+as\\s+/);\n const name = (alias[1] ?? alias[0] ?? \"\").trim();\n if (name.length > 0 && name !== \"default\") {\n names.add(name);\n }\n }\n }\n return [...names].sort();\n}\n\nfunction stubSource(file: string, names: readonly string[]): string {\n const poison = (name: string): string =>\n `(() => { throw new Error(${JSON.stringify(\n `\"${name}\" dari ${file} hanya tersedia di server — impor modul ini dari loader/action/route API, bukan kode klien (ADR-0063).`,\n )}); })`;\n const lines = [\n \"// Stub server-only (digenerate @ramonyx/bundler — ADR-0063).\",\n ...names.map((name) => `export const ${name} = ${poison(name)};`),\n `export default ${poison(\"default\")};`,\n ];\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n/**\n * Plugin untuk `buildClient`: setiap impor `*.server.ts` diresolusi ke stub yang melempar\n * bila dipanggil di browser.\n */\nexport function serverOnlyPlugin(): Plugin {\n return {\n name: \"ramonyx-server-only\",\n enforce: \"pre\",\n async resolveId(source, importer, resolveOptions) {\n // SSR/dev must load the real server module: only the browser graph gets the poison stub.\n if (resolveOptions?.ssr === true) {\n return null;\n }\n if (!SERVER_MODULE.test(source) || importer === undefined) {\n return null;\n }\n const resolved = await this.resolve(source, importer, { skipSelf: true });\n if (resolved === null) {\n return null;\n }\n return `${VIRTUAL_PREFIX}${resolved.id}`;\n },\n async load(id) {\n if (!id.startsWith(VIRTUAL_PREFIX)) {\n return null;\n }\n const file = id.slice(VIRTUAL_PREFIX.length);\n const source = await readFile(file, \"utf8\");\n return stubSource(file, exportedNames(source));\n },\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ramonyx/bundler",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Build pipeline for Ramonyx: Vite client bundles, edge builds, static prerender, and plugin hooks.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,9 +19,9 @@
19
19
  "node": ">=24"
20
20
  },
21
21
  "dependencies": {
22
- "@ramonyx/adapter-runtime": "^2.0.0",
23
- "@ramonyx/compiler": "^2.0.0",
24
- "@ramonyx/core": "^2.0.0",
22
+ "@ramonyx/adapter-runtime": "^2.0.2",
23
+ "@ramonyx/compiler": "^2.0.2",
24
+ "@ramonyx/core": "^2.0.2",
25
25
  "vite": "8.3.4"
26
26
  },
27
27
  "publishConfig": {