raktajs 0.1.0

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.
Files changed (172) hide show
  1. package/README.md +90 -0
  2. package/dist/auto-import/generator.d.ts +4 -0
  3. package/dist/auto-import/generator.d.ts.map +1 -0
  4. package/dist/auto-import/index.d.ts +5 -0
  5. package/dist/auto-import/index.d.ts.map +1 -0
  6. package/dist/auto-import/index.js +153 -0
  7. package/dist/auto-import/index.js.map +11 -0
  8. package/dist/auto-import/scanner.d.ts +9 -0
  9. package/dist/auto-import/scanner.d.ts.map +1 -0
  10. package/dist/auto-import/types.d.ts +20 -0
  11. package/dist/auto-import/types.d.ts.map +1 -0
  12. package/dist/cli/build.d.ts +2 -0
  13. package/dist/cli/build.d.ts.map +1 -0
  14. package/dist/cli/dev.d.ts +2 -0
  15. package/dist/cli/dev.d.ts.map +1 -0
  16. package/dist/cli/doctor.d.ts +2 -0
  17. package/dist/cli/doctor.d.ts.map +1 -0
  18. package/dist/cli/imports.d.ts +2 -0
  19. package/dist/cli/imports.d.ts.map +1 -0
  20. package/dist/cli/index.d.ts +3 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/make.d.ts +4 -0
  23. package/dist/cli/make.d.ts.map +1 -0
  24. package/dist/cli/rakta.d.ts +3 -0
  25. package/dist/cli/rakta.d.ts.map +1 -0
  26. package/dist/cli/rakta.js +1511 -0
  27. package/dist/cli/rakta.js.map +33 -0
  28. package/dist/cli/routes.d.ts +2 -0
  29. package/dist/cli/routes.d.ts.map +1 -0
  30. package/dist/cli/rpcTypes.d.ts +2 -0
  31. package/dist/cli/rpcTypes.d.ts.map +1 -0
  32. package/dist/cli/seo.d.ts +2 -0
  33. package/dist/cli/seo.d.ts.map +1 -0
  34. package/dist/cli/start.d.ts +2 -0
  35. package/dist/cli/start.d.ts.map +1 -0
  36. package/dist/components/Click.d.ts +11 -0
  37. package/dist/components/Click.d.ts.map +1 -0
  38. package/dist/components/Picture.d.ts +22 -0
  39. package/dist/components/Picture.d.ts.map +1 -0
  40. package/dist/components/index.d.ts +5 -0
  41. package/dist/components/index.d.ts.map +1 -0
  42. package/dist/components/index.js +1383 -0
  43. package/dist/components/index.js.map +15 -0
  44. package/dist/config/defineConfig.d.ts +64 -0
  45. package/dist/config/defineConfig.d.ts.map +1 -0
  46. package/dist/config/index.d.ts +4 -0
  47. package/dist/config/index.d.ts.map +1 -0
  48. package/dist/config/index.js +104 -0
  49. package/dist/config/index.js.map +11 -0
  50. package/dist/config/loadConfig.d.ts +4 -0
  51. package/dist/config/loadConfig.d.ts.map +1 -0
  52. package/dist/forge/build.d.ts +7 -0
  53. package/dist/forge/build.d.ts.map +1 -0
  54. package/dist/forge/devServer.d.ts +7 -0
  55. package/dist/forge/devServer.d.ts.map +1 -0
  56. package/dist/forge/index.d.ts +6 -0
  57. package/dist/forge/index.d.ts.map +1 -0
  58. package/dist/forge/index.js +579 -0
  59. package/dist/forge/index.js.map +17 -0
  60. package/dist/forge/inspect.d.ts +9 -0
  61. package/dist/forge/inspect.d.ts.map +1 -0
  62. package/dist/forge/types.d.ts +55 -0
  63. package/dist/forge/types.d.ts.map +1 -0
  64. package/dist/http/errors.d.ts +17 -0
  65. package/dist/http/errors.d.ts.map +1 -0
  66. package/dist/http/index.d.ts +4 -0
  67. package/dist/http/index.d.ts.map +1 -0
  68. package/dist/http/index.js +154 -0
  69. package/dist/http/index.js.map +11 -0
  70. package/dist/http/panturaFetch.d.ts +33 -0
  71. package/dist/http/panturaFetch.d.ts.map +1 -0
  72. package/dist/http/types.d.ts +24 -0
  73. package/dist/http/types.d.ts.map +1 -0
  74. package/dist/index.d.ts +30 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +3872 -0
  77. package/dist/index.js.map +50 -0
  78. package/dist/pwa/cache.d.ts +6 -0
  79. package/dist/pwa/cache.d.ts.map +1 -0
  80. package/dist/pwa/index.d.ts +5 -0
  81. package/dist/pwa/index.d.ts.map +1 -0
  82. package/dist/pwa/index.js +136 -0
  83. package/dist/pwa/index.js.map +12 -0
  84. package/dist/pwa/manifest.d.ts +11 -0
  85. package/dist/pwa/manifest.d.ts.map +1 -0
  86. package/dist/pwa/serviceWorker.d.ts +11 -0
  87. package/dist/pwa/serviceWorker.d.ts.map +1 -0
  88. package/dist/pwa/types.d.ts +45 -0
  89. package/dist/pwa/types.d.ts.map +1 -0
  90. package/dist/render/index.d.ts +5 -0
  91. package/dist/render/index.d.ts.map +1 -0
  92. package/dist/render/index.js +183 -0
  93. package/dist/render/index.js.map +11 -0
  94. package/dist/render/modes.d.ts +13 -0
  95. package/dist/render/modes.d.ts.map +1 -0
  96. package/dist/render/renderer.d.ts +15 -0
  97. package/dist/render/renderer.d.ts.map +1 -0
  98. package/dist/render/types.d.ts +72 -0
  99. package/dist/render/types.d.ts.map +1 -0
  100. package/dist/router/index.d.ts +5 -0
  101. package/dist/router/index.d.ts.map +1 -0
  102. package/dist/router/index.js +228 -0
  103. package/dist/router/index.js.map +12 -0
  104. package/dist/router/manifest.d.ts +6 -0
  105. package/dist/router/manifest.d.ts.map +1 -0
  106. package/dist/router/matcher.d.ts +5 -0
  107. package/dist/router/matcher.d.ts.map +1 -0
  108. package/dist/router/scanner.d.ts +6 -0
  109. package/dist/router/scanner.d.ts.map +1 -0
  110. package/dist/router/types.d.ts +45 -0
  111. package/dist/router/types.d.ts.map +1 -0
  112. package/dist/rpc/client.d.ts +24 -0
  113. package/dist/rpc/client.d.ts.map +1 -0
  114. package/dist/rpc/index.d.ts +6 -0
  115. package/dist/rpc/index.d.ts.map +1 -0
  116. package/dist/rpc/index.js +179 -0
  117. package/dist/rpc/index.js.map +13 -0
  118. package/dist/rpc/procedure.d.ts +28 -0
  119. package/dist/rpc/procedure.d.ts.map +1 -0
  120. package/dist/rpc/router.d.ts +12 -0
  121. package/dist/rpc/router.d.ts.map +1 -0
  122. package/dist/rpc/types.d.ts +48 -0
  123. package/dist/rpc/types.d.ts.map +1 -0
  124. package/dist/schema/array.d.ts +15 -0
  125. package/dist/schema/array.d.ts.map +1 -0
  126. package/dist/schema/boolean.d.ts +7 -0
  127. package/dist/schema/boolean.d.ts.map +1 -0
  128. package/dist/schema/errors.d.ts +21 -0
  129. package/dist/schema/errors.d.ts.map +1 -0
  130. package/dist/schema/index.d.ts +11 -0
  131. package/dist/schema/index.d.ts.map +1 -0
  132. package/dist/schema/index.js +393 -0
  133. package/dist/schema/index.js.map +16 -0
  134. package/dist/schema/number.d.ts +17 -0
  135. package/dist/schema/number.d.ts.map +1 -0
  136. package/dist/schema/object.d.ts +19 -0
  137. package/dist/schema/object.d.ts.map +1 -0
  138. package/dist/schema/string.d.ts +18 -0
  139. package/dist/schema/string.d.ts.map +1 -0
  140. package/dist/schema/types.d.ts +27 -0
  141. package/dist/schema/types.d.ts.map +1 -0
  142. package/dist/seo/head.d.ts +8 -0
  143. package/dist/seo/head.d.ts.map +1 -0
  144. package/dist/seo/index.d.ts +9 -0
  145. package/dist/seo/index.d.ts.map +1 -0
  146. package/dist/seo/index.js +1578 -0
  147. package/dist/seo/index.js.map +17 -0
  148. package/dist/seo/metadata.d.ts +106 -0
  149. package/dist/seo/metadata.d.ts.map +1 -0
  150. package/dist/seo/robots.d.ts +14 -0
  151. package/dist/seo/robots.d.ts.map +1 -0
  152. package/dist/seo/sitemap.d.ts +27 -0
  153. package/dist/seo/sitemap.d.ts.map +1 -0
  154. package/dist/store/createStore.d.ts +18 -0
  155. package/dist/store/createStore.d.ts.map +1 -0
  156. package/dist/store/index.d.ts +3 -0
  157. package/dist/store/index.d.ts.map +1 -0
  158. package/dist/store/index.js +925 -0
  159. package/dist/store/index.js.map +12 -0
  160. package/dist/store/types.d.ts +14 -0
  161. package/dist/store/types.d.ts.map +1 -0
  162. package/dist/tide/adapter.d.ts +8 -0
  163. package/dist/tide/adapter.d.ts.map +1 -0
  164. package/dist/tide/index.d.ts +4 -0
  165. package/dist/tide/index.d.ts.map +1 -0
  166. package/dist/tide/index.js +477 -0
  167. package/dist/tide/index.js.map +16 -0
  168. package/dist/tide/runtime.d.ts +8 -0
  169. package/dist/tide/runtime.d.ts.map +1 -0
  170. package/dist/tide/types.d.ts +40 -0
  171. package/dist/tide/types.d.ts.map +1 -0
  172. package/package.json +128 -0
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # rakta
2
+
3
+ The core framework package of **Rakta.js** — a lightweight, composable
4
+ frontend framework on Bun, React, and TypeScript.
5
+
6
+ > Small in size. Fierce in speed. Alive in every route.
7
+ > Bun in the engine. React at the core. Cirebon in the soul. Garuda in the heart.
8
+
9
+ This package is rarely installed directly — most people get it through
10
+ [`create-rakta-app`](https://www.npmjs.com/package/create-rakta-app). It is
11
+ documented here for contributors and for people building custom tooling on
12
+ top of Rakta.js.
13
+
14
+ ## What's inside
15
+
16
+ | Module | Import | Feature name | Purpose |
17
+ | --- | --- | --- | --- |
18
+ | Router | `rakta/router` | MendungWeave | File-based route scanning, matching, and manifest generation |
19
+ | Components | `rakta/components` | ShrimpStep / TrusmiFrame | `<click to="">` navigation and `<picture path="">` images |
20
+ | RPC | `rakta/rpc` | CarubanWire | Type-safe procedure router and client, inspired by tRPC |
21
+ | Store | `rakta/store` | — | Lightweight, Zustand-inspired state store using `useSyncExternalStore` |
22
+ | Schema | `rakta/schema` | — | Runtime validation with static type inference |
23
+ | HTTP | `rakta/http` | PanturaFetch | A small, typed `fetch`-based HTTP client with interceptors |
24
+ | SEO | `rakta/seo` | WaliSignal / SunyaragiCrown | Metadata, `<head>` rendering, sitemap, and robots.txt helpers |
25
+ | Auto import | `rakta/auto-import` | TrusmiThread | Scans `app/`, `components/`, `lib/` and writes `.rakta/auto-imports.ts` |
26
+ | Render | `rakta/render` | NorthCoastFlow | Render mode resolution (CSR / SSR / SSG / CSG / SPA / Hybrid) |
27
+ | Forge | `rakta/forge` | CherbonsEngine | Dev server, build, and project inspection |
28
+ | Tide | `rakta/tide` | — | Request/response runtime context helpers |
29
+ | Config | `rakta/config` | — | `defineConfig` / `loadConfig` for `rakta.config.ts` |
30
+
31
+ ## Installation
32
+
33
+ ```bash
34
+ bun add rakta
35
+ ```
36
+
37
+ `rakta` declares `react` and `react-dom` (`>=19.0.0`) as peer dependencies.
38
+
39
+ ## Quick example
40
+
41
+ ```ts
42
+ import { defineConfig } from "rakta/config";
43
+
44
+ export default defineConfig({
45
+ appName: "My App",
46
+ render: { defaultMode: "csr" },
47
+ });
48
+ ```
49
+
50
+ ```tsx
51
+ // app/page.tsx
52
+ import { Click } from "rakta/components";
53
+
54
+ export default function HomePage() {
55
+ return (
56
+ <main>
57
+ <h1>Welcome</h1>
58
+ <click to="/about">About</click>
59
+ </main>
60
+ );
61
+ }
62
+ ```
63
+
64
+ ## CLI
65
+
66
+ The `rakta` package also exposes a CLI binary:
67
+
68
+ ```bash
69
+ bun rakta dev
70
+ bun rakta build
71
+ bun rakta start
72
+ bun rakta routes
73
+ bun rakta make page about
74
+ bun rakta make layout dashboard
75
+ bun rakta make api users
76
+ bun rakta seo:generate
77
+ bun rakta imports:generate
78
+ bun rakta rpc:types
79
+ bun rakta doctor
80
+ ```
81
+
82
+ ## Documentation
83
+
84
+ Full documentation lives in the repository root under
85
+ [`docs/en`](../../docs/en) (English) and [`docs/id`](../../docs/id)
86
+ (Bahasa Indonesia).
87
+
88
+ ## License
89
+
90
+ MIT — Rhein Sullivan | Vyagra Nexus™
@@ -0,0 +1,4 @@
1
+ import type { AutoImportGeneratorOptions, AutoImportManifest } from "./types";
2
+ export declare function generateAutoImports(options: AutoImportGeneratorOptions): AutoImportManifest;
3
+ export declare function printAutoImportSummary(manifest: AutoImportManifest): void;
4
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/auto-import/generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,0BAA0B,EAC1B,kBAAkB,EAElB,MAAM,SAAS,CAAC;AAqBjB,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,0BAA0B,GACjC,kBAAkB,CAoCpB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAiBzE"}
@@ -0,0 +1,5 @@
1
+ export { generateAutoImports, printAutoImportSummary, } from "./generator";
2
+ export type { ScanForExportsOptions } from "./scanner";
3
+ export { scanForExports } from "./scanner";
4
+ export type { AutoImportGeneratorOptions, AutoImportKind, AutoImportManifest, DiscoveredExport, } from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auto-import/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EACX,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,153 @@
1
+ // @bun
2
+ // src/auto-import/generator.ts
3
+ import { mkdirSync, writeFileSync } from "fs";
4
+ import { join as join2 } from "path";
5
+
6
+ // src/auto-import/scanner.ts
7
+ import { existsSync, readdirSync } from "fs";
8
+ import { basename, extname, join, relative } from "path";
9
+ var DEFAULT_EXTENSIONS = [
10
+ ".ts",
11
+ ".tsx",
12
+ ".js",
13
+ ".jsx"
14
+ ];
15
+ function detectKind(filePath) {
16
+ const lower = filePath.replace(/\\/g, "/").toLowerCase();
17
+ if (lower.includes("/stores/") || lower.endsWith(".store.ts") || lower.endsWith(".store.tsx")) {
18
+ return "store";
19
+ }
20
+ if (lower.includes("/schemas/") || lower.endsWith(".schema.ts") || lower.endsWith(".schema.tsx")) {
21
+ return "schema";
22
+ }
23
+ if (lower.includes("/components/")) {
24
+ return "component";
25
+ }
26
+ const fileName = basename(lower);
27
+ if (fileName.startsWith("use")) {
28
+ return "hook";
29
+ }
30
+ if (lower.includes("/lib/") || lower.includes("/utils/") || lower.includes("/helpers/")) {
31
+ return "utils";
32
+ }
33
+ return "unknown";
34
+ }
35
+ function toPascalCase(text) {
36
+ return text.replace(/[-_.]/g, " ").replace(/\s+(.)/g, (_match, char) => char.toUpperCase()).replace(/^(.)/, (_match, char) => char.toUpperCase());
37
+ }
38
+ function deriveExportName(filePath, dirPath) {
39
+ const relativePath = relative(dirPath, filePath).replace(/\\/g, "/");
40
+ const withoutExtension = relativePath.replace(/\.(ts|tsx|js|jsx)$/, "").replace(/\/index$/, "");
41
+ return toPascalCase(withoutExtension.replace(/\//g, "_"));
42
+ }
43
+ function walkDirectory(dirPath, extensions) {
44
+ if (!existsSync(dirPath)) {
45
+ return [];
46
+ }
47
+ const collected = [];
48
+ function walk(currentPath) {
49
+ const entries = readdirSync(currentPath, {
50
+ withFileTypes: true
51
+ });
52
+ for (const entry of entries) {
53
+ if (entry.name.startsWith(".") || entry.name === "node_modules") {
54
+ continue;
55
+ }
56
+ const fullPath = join(currentPath, entry.name);
57
+ if (entry.isDirectory()) {
58
+ walk(fullPath);
59
+ continue;
60
+ }
61
+ if (entry.isFile() && extensions.includes(extname(entry.name))) {
62
+ collected.push(fullPath);
63
+ }
64
+ }
65
+ }
66
+ walk(dirPath);
67
+ return collected;
68
+ }
69
+ function scanForExports(options) {
70
+ const extensions = options.extensions ?? DEFAULT_EXTENSIONS;
71
+ const discovered = [];
72
+ const outputAbs = join(options.frontendRoot, options.outputDirectory);
73
+ for (const directory of options.directories) {
74
+ const directoryAbs = join(options.frontendRoot, directory);
75
+ const files = walkDirectory(directoryAbs, extensions);
76
+ for (const filePath of files) {
77
+ const relativeFromOutput = relative(outputAbs, filePath).replace(/\\/g, "/").replace(/\.(ts|tsx)$/, "");
78
+ const importPath = relativeFromOutput.startsWith(".") ? relativeFromOutput : `./${relativeFromOutput}`;
79
+ discovered.push({
80
+ name: deriveExportName(filePath, directoryAbs),
81
+ filePath: relative(options.frontendRoot, filePath).replace(/\\/g, "/"),
82
+ importPath,
83
+ kind: detectKind(filePath)
84
+ });
85
+ }
86
+ }
87
+ return discovered;
88
+ }
89
+
90
+ // src/auto-import/generator.ts
91
+ var GENERATED_HEADER = `// This file is auto-generated by: bun rakta imports:generate
92
+ // Do not edit manually. Re-generate whenever you add or remove files.
93
+ // Note: Rakta Auto Import v0.1.0 produces a typed re-export layer.
94
+ // Import from this file in your app code:
95
+ // import { useCounterStore, http } from "./.rakta/auto-imports";
96
+ `;
97
+ function buildImportLines(exports) {
98
+ if (exports.length === 0) {
99
+ return `// No exports discovered. Check your autoImport.directories config.
100
+ `;
101
+ }
102
+ return exports.map((discoveredExport) => `export * from "${discoveredExport.importPath}";`).join(`
103
+ `);
104
+ }
105
+ function generateAutoImports(options) {
106
+ const exports = scanForExports({
107
+ frontendRoot: options.frontendRoot,
108
+ directories: options.directories,
109
+ outputDirectory: options.outputDirectory,
110
+ ...options.extensions ? {
111
+ extensions: options.extensions
112
+ } : {}
113
+ });
114
+ const outputDir = join2(options.frontendRoot, options.outputDirectory);
115
+ mkdirSync(outputDir, {
116
+ recursive: true
117
+ });
118
+ const tsContent = `${GENERATED_HEADER}
119
+ ${buildImportLines(exports)}
120
+ `;
121
+ writeFileSync(join2(outputDir, "auto-imports.ts"), tsContent, "utf-8");
122
+ if (options.generateDts) {
123
+ const dtsContent = tsContent.replace("// This file is auto-generated by: bun rakta imports:generate", "// Type declarations \u2014 auto-generated by: bun rakta imports:generate");
124
+ writeFileSync(join2(outputDir, "auto-imports.d.ts"), dtsContent, "utf-8");
125
+ }
126
+ return {
127
+ generatedAt: new Date().toISOString(),
128
+ sourceDirectories: options.directories,
129
+ exports
130
+ };
131
+ }
132
+ function printAutoImportSummary(manifest) {
133
+ console.log(`
134
+ Rakta Auto Import`);
135
+ console.log(` ${"\u2500".repeat(50)}`);
136
+ console.log(`Generated: ${manifest.generatedAt}`);
137
+ console.log(`Exports: ${manifest.exports.length}`);
138
+ if (manifest.exports.length > 0) {
139
+ console.log("");
140
+ for (const discoveredExport of manifest.exports) {
141
+ console.log(`[${discoveredExport.kind.padEnd(10)}] ${discoveredExport.name} <- ${discoveredExport.filePath}`);
142
+ }
143
+ }
144
+ console.log(` ${"\u2500".repeat(50)}
145
+ `);
146
+ }
147
+ export {
148
+ scanForExports,
149
+ printAutoImportSummary,
150
+ generateAutoImports
151
+ };
152
+
153
+ //# debugId=EE441A6E1C94C7FC64756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\src\\auto-import\\generator.ts", "..\\..\\src\\auto-import\\scanner.ts"],
4
+ "sourcesContent": [
5
+ "import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { scanForExports } from \"./scanner\";\nimport type {\n\tAutoImportGeneratorOptions,\n\tAutoImportManifest,\n\tDiscoveredExport,\n} from \"./types\";\n\nconst GENERATED_HEADER = `// This file is auto-generated by: bun rakta imports:generate\n// Do not edit manually. Re-generate whenever you add or remove files.\n// Note: Rakta Auto Import v0.1.0 produces a typed re-export layer.\n// Import from this file in your app code:\n// import { useCounterStore, http } from \"./.rakta/auto-imports\";\n`;\n\nfunction buildImportLines(exports: ReadonlyArray<DiscoveredExport>): string {\n\tif (exports.length === 0) {\n\t\treturn \"// No exports discovered. Check your autoImport.directories config.\\n\";\n\t}\n\n\treturn exports\n\t\t.map(\n\t\t\t(discoveredExport) => `export * from \"${discoveredExport.importPath}\";`,\n\t\t)\n\t\t.join(\"\\n\");\n}\n\nexport function generateAutoImports(\n\toptions: AutoImportGeneratorOptions,\n): AutoImportManifest {\n\tconst exports = scanForExports({\n\t\tfrontendRoot: options.frontendRoot,\n\t\tdirectories: options.directories,\n\t\toutputDirectory: options.outputDirectory,\n\t\t...(options.extensions\n\t\t\t? {\n\t\t\t\t\textensions: options.extensions,\n\t\t\t\t}\n\t\t\t: {}),\n\t});\n\n\tconst outputDir = join(options.frontendRoot, options.outputDirectory);\n\n\tmkdirSync(outputDir, {\n\t\trecursive: true,\n\t});\n\n\tconst tsContent = `${GENERATED_HEADER}\\n${buildImportLines(exports)}\\n`;\n\n\twriteFileSync(join(outputDir, \"auto-imports.ts\"), tsContent, \"utf-8\");\n\n\tif (options.generateDts) {\n\t\tconst dtsContent = tsContent.replace(\n\t\t\t\"// This file is auto-generated by: bun rakta imports:generate\",\n\t\t\t\"// Type declarations — auto-generated by: bun rakta imports:generate\",\n\t\t);\n\n\t\twriteFileSync(join(outputDir, \"auto-imports.d.ts\"), dtsContent, \"utf-8\");\n\t}\n\n\treturn {\n\t\tgeneratedAt: new Date().toISOString(),\n\t\tsourceDirectories: options.directories,\n\t\texports,\n\t};\n}\n\nexport function printAutoImportSummary(manifest: AutoImportManifest): void {\n\tconsole.log(\"\\n Rakta Auto Import\");\n\tconsole.log(` ${\"─\".repeat(50)}`);\n\tconsole.log(`Generated: ${manifest.generatedAt}`);\n\tconsole.log(`Exports: ${manifest.exports.length}`);\n\n\tif (manifest.exports.length > 0) {\n\t\tconsole.log(\"\");\n\n\t\tfor (const discoveredExport of manifest.exports) {\n\t\t\tconsole.log(\n\t\t\t\t`[${discoveredExport.kind.padEnd(10)}] ${discoveredExport.name} <- ${discoveredExport.filePath}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconsole.log(` ${\"─\".repeat(50)}\\n`);\n}\n",
6
+ "import { existsSync, readdirSync } from \"node:fs\";\nimport { basename, extname, join, relative } from \"node:path\";\nimport type { AutoImportKind, DiscoveredExport } from \"./types\";\n\nconst DEFAULT_EXTENSIONS: ReadonlyArray<string> = [\n\t\".ts\",\n\t\".tsx\",\n\t\".js\",\n\t\".jsx\",\n];\n\nfunction detectKind(filePath: string): AutoImportKind {\n\tconst lower = filePath.replace(/\\\\/g, \"/\").toLowerCase();\n\n\tif (\n\t\tlower.includes(\"/stores/\") ||\n\t\tlower.endsWith(\".store.ts\") ||\n\t\tlower.endsWith(\".store.tsx\")\n\t) {\n\t\treturn \"store\";\n\t}\n\n\tif (\n\t\tlower.includes(\"/schemas/\") ||\n\t\tlower.endsWith(\".schema.ts\") ||\n\t\tlower.endsWith(\".schema.tsx\")\n\t) {\n\t\treturn \"schema\";\n\t}\n\n\tif (lower.includes(\"/components/\")) {\n\t\treturn \"component\";\n\t}\n\n\tconst fileName = basename(lower);\n\n\tif (fileName.startsWith(\"use\")) {\n\t\treturn \"hook\";\n\t}\n\n\tif (\n\t\tlower.includes(\"/lib/\") ||\n\t\tlower.includes(\"/utils/\") ||\n\t\tlower.includes(\"/helpers/\")\n\t) {\n\t\treturn \"utils\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction toPascalCase(text: string): string {\n\treturn text\n\t\t.replace(/[-_.]/g, \" \")\n\t\t.replace(/\\s+(.)/g, (_match: string, char: string) => char.toUpperCase())\n\t\t.replace(/^(.)/, (_match: string, char: string) => char.toUpperCase());\n}\n\nfunction deriveExportName(filePath: string, dirPath: string): string {\n\tconst relativePath = relative(dirPath, filePath).replace(/\\\\/g, \"/\");\n\n\tconst withoutExtension = relativePath\n\t\t.replace(/\\.(ts|tsx|js|jsx)$/, \"\")\n\t\t.replace(/\\/index$/, \"\");\n\n\treturn toPascalCase(withoutExtension.replace(/\\//g, \"_\"));\n}\n\nfunction walkDirectory(\n\tdirPath: string,\n\textensions: ReadonlyArray<string>,\n): string[] {\n\tif (!existsSync(dirPath)) {\n\t\treturn [];\n\t}\n\n\tconst collected: string[] = [];\n\n\tfunction walk(currentPath: string): void {\n\t\tconst entries = readdirSync(currentPath, {\n\t\t\twithFileTypes: true,\n\t\t});\n\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.name.startsWith(\".\") || entry.name === \"node_modules\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst fullPath = join(currentPath, entry.name);\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\twalk(fullPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (entry.isFile() && extensions.includes(extname(entry.name))) {\n\t\t\t\tcollected.push(fullPath);\n\t\t\t}\n\t\t}\n\t}\n\n\twalk(dirPath);\n\n\treturn collected;\n}\n\nexport interface ScanForExportsOptions {\n\treadonly frontendRoot: string;\n\treadonly directories: ReadonlyArray<string>;\n\treadonly outputDirectory: string;\n\treadonly extensions?: ReadonlyArray<string>;\n}\n\nexport function scanForExports(\n\toptions: ScanForExportsOptions,\n): DiscoveredExport[] {\n\tconst extensions = options.extensions ?? DEFAULT_EXTENSIONS;\n\tconst discovered: DiscoveredExport[] = [];\n\tconst outputAbs = join(options.frontendRoot, options.outputDirectory);\n\n\tfor (const directory of options.directories) {\n\t\tconst directoryAbs = join(options.frontendRoot, directory);\n\n\t\tconst files = walkDirectory(directoryAbs, extensions);\n\n\t\tfor (const filePath of files) {\n\t\t\tconst relativeFromOutput = relative(outputAbs, filePath)\n\t\t\t\t.replace(/\\\\/g, \"/\")\n\t\t\t\t.replace(/\\.(ts|tsx)$/, \"\");\n\n\t\t\tconst importPath = relativeFromOutput.startsWith(\".\")\n\t\t\t\t? relativeFromOutput\n\t\t\t\t: `./${relativeFromOutput}`;\n\n\t\t\tdiscovered.push({\n\t\t\t\tname: deriveExportName(filePath, directoryAbs),\n\t\t\t\tfilePath: relative(options.frontendRoot, filePath).replace(/\\\\/g, \"/\"),\n\t\t\t\timportPath,\n\t\t\t\tkind: detectKind(filePath),\n\t\t\t});\n\t\t}\n\t}\n\n\treturn discovered;\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "EE441A6E1C94C7FC64756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,9 @@
1
+ import type { DiscoveredExport } from "./types";
2
+ export interface ScanForExportsOptions {
3
+ readonly frontendRoot: string;
4
+ readonly directories: ReadonlyArray<string>;
5
+ readonly outputDirectory: string;
6
+ readonly extensions?: ReadonlyArray<string>;
7
+ }
8
+ export declare function scanForExports(options: ScanForExportsOptions): DiscoveredExport[];
9
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/auto-import/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAwGhE,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,qBAAqB,GAC5B,gBAAgB,EAAE,CA6BpB"}
@@ -0,0 +1,20 @@
1
+ export type AutoImportKind = "component" | "hook" | "store" | "schema" | "utils" | "unknown";
2
+ export interface DiscoveredExport {
3
+ readonly name: string;
4
+ readonly filePath: string;
5
+ readonly importPath: string;
6
+ readonly kind: AutoImportKind;
7
+ }
8
+ export interface AutoImportManifest {
9
+ readonly generatedAt: string;
10
+ readonly sourceDirectories: ReadonlyArray<string>;
11
+ readonly exports: ReadonlyArray<DiscoveredExport>;
12
+ }
13
+ export interface AutoImportGeneratorOptions {
14
+ readonly frontendRoot: string;
15
+ readonly directories: ReadonlyArray<string>;
16
+ readonly outputDirectory: string;
17
+ readonly extensions?: ReadonlyArray<string>;
18
+ readonly generateDts: boolean;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auto-import/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACvB,WAAW,GACX,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,CAAC;AAEb,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export declare function buildCommand(cwd?: string): Promise<void>;
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAYA,wBAAsB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC7E"}
@@ -0,0 +1,2 @@
1
+ export declare function devCommand(cwd?: string): Promise<void>;
2
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3E"}
@@ -0,0 +1,2 @@
1
+ export declare function doctorCommand(cwd?: string): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAWA,wBAAsB,aAAa,CAClC,GAAG,GAAE,MAAsB,GACzB,OAAO,CAAC,IAAI,CAAC,CA6Df"}
@@ -0,0 +1,2 @@
1
+ export declare function importsGenerateCommand(cwd?: string): Promise<void>;
2
+ //# sourceMappingURL=imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/cli/imports.ts"],"names":[],"mappings":"AAQA,wBAAsB,sBAAsB,CAC3C,GAAG,GAAE,MAAsB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -0,0 +1,3 @@
1
+ export { buildCommand } from "./build";
2
+ export { startCommand } from "./start";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ type MakeTarget = "page" | "layout" | "component" | "api";
2
+ export declare function makeCommand(target: MakeTarget, name: string, cwd?: string): Promise<void>;
3
+ export {};
4
+ //# sourceMappingURL=make.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/cli/make.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;AAwB1D,wBAAsB,WAAW,CAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAsB,GACzB,OAAO,CAAC,IAAI,CAAC,CAmFf"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=rakta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rakta.d.ts","sourceRoot":"","sources":["../../src/cli/rakta.ts"],"names":[],"mappings":""}