mega-framework 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 (322) hide show
  1. package/.env +127 -0
  2. package/.env.example +186 -0
  3. package/.prettierrc.json +8 -0
  4. package/CHANGELOG.md +259 -0
  5. package/LICENSE +21 -0
  6. package/README.md +153 -0
  7. package/bin/mega-ws-hub.js +15 -0
  8. package/bin/mega.js +38 -0
  9. package/docker-compose.yml +201 -0
  10. package/eslint.config.js +57 -0
  11. package/infra/otel-collector-config.yaml +43 -0
  12. package/jsconfig.json +18 -0
  13. package/package.json +121 -0
  14. package/sample/crud/.env +18 -0
  15. package/sample/crud/.env.example +50 -0
  16. package/sample/crud/README.md +85 -0
  17. package/sample/crud/apps/main/app.config.js +114 -0
  18. package/sample/crud/apps/main/channels/chat-bus.js +115 -0
  19. package/sample/crud/apps/main/channels/chat-channel.js +145 -0
  20. package/sample/crud/apps/main/controllers/auth-controller.js +144 -0
  21. package/sample/crud/apps/main/controllers/cron-controller.js +34 -0
  22. package/sample/crud/apps/main/controllers/guide-controller.js +37 -0
  23. package/sample/crud/apps/main/controllers/jobs-controller.js +43 -0
  24. package/sample/crud/apps/main/controllers/logs-controller.js +35 -0
  25. package/sample/crud/apps/main/controllers/metrics-controller.js +22 -0
  26. package/sample/crud/apps/main/controllers/note-controller.js +116 -0
  27. package/sample/crud/apps/main/controllers/perf-controller.js +38 -0
  28. package/sample/crud/apps/main/controllers/redis-controller.js +36 -0
  29. package/sample/crud/apps/main/controllers/tracing-controller.js +43 -0
  30. package/sample/crud/apps/main/controllers/upload-controller.js +98 -0
  31. package/sample/crud/apps/main/controllers/user-controller.js +34 -0
  32. package/sample/crud/apps/main/controllers/web-controller.js +137 -0
  33. package/sample/crud/apps/main/controllers/worker-controller.js +57 -0
  34. package/sample/crud/apps/main/controllers/ws-controller.js +29 -0
  35. package/sample/crud/apps/main/jobs/email-job.js +72 -0
  36. package/sample/crud/apps/main/locales/client/en.json +3 -0
  37. package/sample/crud/apps/main/locales/client/ko.json +3 -0
  38. package/sample/crud/apps/main/locales/server/en.json +316 -0
  39. package/sample/crud/apps/main/locales/server/ko.json +316 -0
  40. package/sample/crud/apps/main/middleware/web-auth.js +40 -0
  41. package/sample/crud/apps/main/middleware/ws-auth.js +48 -0
  42. package/sample/crud/apps/main/migrations/20260606000001-create-users.js +27 -0
  43. package/sample/crud/apps/main/migrations/20260606000002-add-auth-to-users.js +30 -0
  44. package/sample/crud/apps/main/models/note.js +71 -0
  45. package/sample/crud/apps/main/models/user.js +86 -0
  46. package/sample/crud/apps/main/public/css/app.css +101 -0
  47. package/sample/crud/apps/main/public/css/guide.css +137 -0
  48. package/sample/crud/apps/main/public/js/app.js +54 -0
  49. package/sample/crud/apps/main/public/js/perf.js +129 -0
  50. package/sample/crud/apps/main/public/js/theme-init.js +12 -0
  51. package/sample/crud/apps/main/public/js/upload-demo.js +63 -0
  52. package/sample/crud/apps/main/public/js/worker-demo.js +92 -0
  53. package/sample/crud/apps/main/public/js/ws-chat.js +161 -0
  54. package/sample/crud/apps/main/public/vendor/bootstrap/bootstrap.bundle.min.js +7 -0
  55. package/sample/crud/apps/main/public/vendor/bootstrap/bootstrap.min.css +6 -0
  56. package/sample/crud/apps/main/public/vendor/highlight/github-dark.css +109 -0
  57. package/sample/crud/apps/main/public/vendor/highlight/github.css +118 -0
  58. package/sample/crud/apps/main/public/vendor/mega-client-wasm/README.md +19 -0
  59. package/sample/crud/apps/main/public/vendor/mega-client-wasm/mega_client_wasm.d.ts +196 -0
  60. package/sample/crud/apps/main/public/vendor/mega-client-wasm/mega_client_wasm.js +1187 -0
  61. package/sample/crud/apps/main/public/vendor/mega-client-wasm/mega_client_wasm_bg.wasm +0 -0
  62. package/sample/crud/apps/main/routes/auth.js +15 -0
  63. package/sample/crud/apps/main/routes/cron.js +14 -0
  64. package/sample/crud/apps/main/routes/guide.js +25 -0
  65. package/sample/crud/apps/main/routes/jobs.js +14 -0
  66. package/sample/crud/apps/main/routes/logs.js +28 -0
  67. package/sample/crud/apps/main/routes/metrics.js +13 -0
  68. package/sample/crud/apps/main/routes/notes.js +19 -0
  69. package/sample/crud/apps/main/routes/perf.js +47 -0
  70. package/sample/crud/apps/main/routes/redis.js +14 -0
  71. package/sample/crud/apps/main/routes/tracing.js +14 -0
  72. package/sample/crud/apps/main/routes/upload.js +16 -0
  73. package/sample/crud/apps/main/routes/users.js +54 -0
  74. package/sample/crud/apps/main/routes/web.js +23 -0
  75. package/sample/crud/apps/main/routes/worker.js +15 -0
  76. package/sample/crud/apps/main/routes/ws.js +30 -0
  77. package/sample/crud/apps/main/schedules/cron-counter-schedule.js +30 -0
  78. package/sample/crud/apps/main/services/auth-service.js +74 -0
  79. package/sample/crud/apps/main/services/cron-demo-service.js +66 -0
  80. package/sample/crud/apps/main/services/guide-service.js +145 -0
  81. package/sample/crud/apps/main/services/jobs-demo-service.js +83 -0
  82. package/sample/crud/apps/main/services/logs-demo-service.js +59 -0
  83. package/sample/crud/apps/main/services/metrics-demo-service.js +144 -0
  84. package/sample/crud/apps/main/services/note-service.js +75 -0
  85. package/sample/crud/apps/main/services/perf-service.js +302 -0
  86. package/sample/crud/apps/main/services/redis-demo-service.js +75 -0
  87. package/sample/crud/apps/main/services/tracing-demo-service.js +69 -0
  88. package/sample/crud/apps/main/services/upload-demo-service.js +48 -0
  89. package/sample/crud/apps/main/services/user-service.js +65 -0
  90. package/sample/crud/apps/main/views/auth/login.ejs +57 -0
  91. package/sample/crud/apps/main/views/auth/register.ejs +71 -0
  92. package/sample/crud/apps/main/views/cron/index.ejs +92 -0
  93. package/sample/crud/apps/main/views/guide/index.ejs +24 -0
  94. package/sample/crud/apps/main/views/guide/page.ejs +64 -0
  95. package/sample/crud/apps/main/views/home.ejs +82 -0
  96. package/sample/crud/apps/main/views/jobs/index.ejs +113 -0
  97. package/sample/crud/apps/main/views/layouts/main.ejs +112 -0
  98. package/sample/crud/apps/main/views/logs/index.ejs +80 -0
  99. package/sample/crud/apps/main/views/metrics/index.ejs +123 -0
  100. package/sample/crud/apps/main/views/notes/edit.ejs +45 -0
  101. package/sample/crud/apps/main/views/notes/list.ejs +74 -0
  102. package/sample/crud/apps/main/views/notes/new.ejs +45 -0
  103. package/sample/crud/apps/main/views/perf/index.ejs +90 -0
  104. package/sample/crud/apps/main/views/redis/index.ejs +65 -0
  105. package/sample/crud/apps/main/views/tracing/index.ejs +106 -0
  106. package/sample/crud/apps/main/views/upload/index.ejs +79 -0
  107. package/sample/crud/apps/main/views/users/edit.ejs +48 -0
  108. package/sample/crud/apps/main/views/users/list.ejs +81 -0
  109. package/sample/crud/apps/main/views/users/new.ejs +48 -0
  110. package/sample/crud/apps/main/views/worker/index.ejs +70 -0
  111. package/sample/crud/apps/main/views/ws/index.ejs +62 -0
  112. package/sample/crud/apps/main/workers/hash-worker.js +17 -0
  113. package/sample/crud/apps/main/workers/hash.task.js +22 -0
  114. package/sample/crud/ecosystem.config.cjs +9 -0
  115. package/sample/crud/mega.config.js +105 -0
  116. package/sample/crud/package-lock.json +5665 -0
  117. package/sample/crud/package.json +28 -0
  118. package/sample/crud/test/apps/main/auth-flow.integration.test.js +177 -0
  119. package/sample/crud/test/apps/main/auth-service.test.js +93 -0
  120. package/sample/crud/test/apps/main/chat-bus.test.js +101 -0
  121. package/sample/crud/test/apps/main/chat-channel.test.js +144 -0
  122. package/sample/crud/test/apps/main/cron-demo-service.test.js +93 -0
  123. package/sample/crud/test/apps/main/demo-flow.integration.test.js +386 -0
  124. package/sample/crud/test/apps/main/email-job.test.js +76 -0
  125. package/sample/crud/test/apps/main/guide-service.test.js +68 -0
  126. package/sample/crud/test/apps/main/hash-task.test.js +30 -0
  127. package/sample/crud/test/apps/main/jobs-demo-service.test.js +88 -0
  128. package/sample/crud/test/apps/main/logs-demo-service.test.js +85 -0
  129. package/sample/crud/test/apps/main/metrics-demo-service.test.js +90 -0
  130. package/sample/crud/test/apps/main/note-service.test.js +68 -0
  131. package/sample/crud/test/apps/main/perf-service.test.js +121 -0
  132. package/sample/crud/test/apps/main/perf.integration.test.js +202 -0
  133. package/sample/crud/test/apps/main/redis-demo-service.test.js +98 -0
  134. package/sample/crud/test/apps/main/tracing-demo-service.test.js +90 -0
  135. package/sample/crud/test/apps/main/upload-demo-service.test.js +61 -0
  136. package/sample/crud/test/apps/main/user-service.test.js +65 -0
  137. package/sample/crud/test/apps/main/ws-chat.integration.test.js +232 -0
  138. package/sample/crud/vitest.config.js +8 -0
  139. package/sample/crud/yarn.lock +2142 -0
  140. package/sample/simple/.env.example +15 -0
  141. package/sample/simple/README.md +52 -0
  142. package/sample/simple/apps/main/app.config.js +35 -0
  143. package/sample/simple/apps/main/controllers/pages-controller.js +22 -0
  144. package/sample/simple/apps/main/locales/client/en.json +3 -0
  145. package/sample/simple/apps/main/locales/client/ko.json +3 -0
  146. package/sample/simple/apps/main/locales/server/en.json +23 -0
  147. package/sample/simple/apps/main/locales/server/ko.json +23 -0
  148. package/sample/simple/apps/main/public/css/app.css +101 -0
  149. package/sample/simple/apps/main/public/hello.txt +1 -0
  150. package/sample/simple/apps/main/public/js/app.js +54 -0
  151. package/sample/simple/apps/main/public/js/theme-init.js +12 -0
  152. package/sample/simple/apps/main/public/vendor/bootstrap/bootstrap.bundle.min.js +7 -0
  153. package/sample/simple/apps/main/public/vendor/bootstrap/bootstrap.min.css +6 -0
  154. package/sample/simple/apps/main/routes/index.js +9 -0
  155. package/sample/simple/apps/main/routes/pages.js +12 -0
  156. package/sample/simple/apps/main/views/index.ejs +56 -0
  157. package/sample/simple/apps/main/views/layouts/main.ejs +74 -0
  158. package/sample/simple/ecosystem.config.cjs +10 -0
  159. package/sample/simple/mega.config.js +27 -0
  160. package/sample/simple/package-lock.json +1851 -0
  161. package/sample/simple/package.json +25 -0
  162. package/sample/simple/test/apps/main/index.test.js +13 -0
  163. package/sample/simple/vitest.config.js +8 -0
  164. package/src/adapters/adapter-manager.js +305 -0
  165. package/src/adapters/adapter-options.js +208 -0
  166. package/src/adapters/file-adapter.js +350 -0
  167. package/src/adapters/file-session-adapter.js +363 -0
  168. package/src/adapters/index.js +38 -0
  169. package/src/adapters/maria-adapter.js +425 -0
  170. package/src/adapters/mega-adapter.js +511 -0
  171. package/src/adapters/mega-bus-adapter.js +81 -0
  172. package/src/adapters/mega-cache-adapter.js +94 -0
  173. package/src/adapters/mega-db-adapter.js +72 -0
  174. package/src/adapters/mega-lock-adapter.js +118 -0
  175. package/src/adapters/mega-log-sink-adapter.js +46 -0
  176. package/src/adapters/mega-session-adapter.js +72 -0
  177. package/src/adapters/mongo-adapter.js +396 -0
  178. package/src/adapters/nats-adapter.js +370 -0
  179. package/src/adapters/postgres-adapter.js +341 -0
  180. package/src/adapters/redis-adapter.js +331 -0
  181. package/src/adapters/redis-session-adapter.js +261 -0
  182. package/src/adapters/redlock-adapter.js +385 -0
  183. package/src/adapters/registry.js +157 -0
  184. package/src/adapters/sqlite-adapter.js +309 -0
  185. package/src/auth/index.js +103 -0
  186. package/src/cli/commands/console-cmd.js +56 -0
  187. package/src/cli/commands/new.js +101 -0
  188. package/src/cli/commands/routes.js +107 -0
  189. package/src/cli/commands/scaffold.js +120 -0
  190. package/src/cli/commands/test-cmd.js +45 -0
  191. package/src/cli/generators/index.js +368 -0
  192. package/src/cli/index.js +472 -0
  193. package/src/cli/template-engine.js +72 -0
  194. package/src/cli/ws-hub.js +582 -0
  195. package/src/core/ajv-mapper.js +80 -0
  196. package/src/core/boot.js +323 -0
  197. package/src/core/cluster-metrics.js +278 -0
  198. package/src/core/config-loader.js +115 -0
  199. package/src/core/config-validator.js +322 -0
  200. package/src/core/ctx-builder.js +253 -0
  201. package/src/core/envelope.js +88 -0
  202. package/src/core/error-mapper.js +116 -0
  203. package/src/core/formbody.js +69 -0
  204. package/src/core/hub-link.js +552 -0
  205. package/src/core/i18n.js +525 -0
  206. package/src/core/index.js +63 -0
  207. package/src/core/mega-app.js +1138 -0
  208. package/src/core/mega-cluster.js +232 -0
  209. package/src/core/mega-server.js +176 -0
  210. package/src/core/mega-service.js +41 -0
  211. package/src/core/migration-runner.js +196 -0
  212. package/src/core/multipart.js +282 -0
  213. package/src/core/openapi.js +114 -0
  214. package/src/core/router.js +388 -0
  215. package/src/core/routes-loader.js +57 -0
  216. package/src/core/scope-registry.js +53 -0
  217. package/src/core/security.js +275 -0
  218. package/src/core/services-loader.js +98 -0
  219. package/src/core/session-cleanup-schedule.js +57 -0
  220. package/src/core/session-store.js +55 -0
  221. package/src/core/session.js +414 -0
  222. package/src/core/static-assets.js +126 -0
  223. package/src/core/template.js +294 -0
  224. package/src/core/workers-manager.js +193 -0
  225. package/src/core/ws-compression.js +112 -0
  226. package/src/core/ws-controller.js +109 -0
  227. package/src/core/ws-message.js +176 -0
  228. package/src/core/ws-upgrade.js +445 -0
  229. package/src/errors/config-error.js +16 -0
  230. package/src/errors/http-errors.js +130 -0
  231. package/src/errors/index.js +19 -0
  232. package/src/errors/mega-error.js +34 -0
  233. package/src/eslint-plugin/index.js +15 -0
  234. package/src/eslint-plugin/no-direct-model-import.js +113 -0
  235. package/src/index.js +131 -0
  236. package/src/lib/asp/config.js +83 -0
  237. package/src/lib/asp/crypto.js +145 -0
  238. package/src/lib/asp/errors.js +49 -0
  239. package/src/lib/asp/nonce-cache.js +94 -0
  240. package/src/lib/asp/plugin.js +263 -0
  241. package/src/lib/asp/ws-terminator.js +101 -0
  242. package/src/lib/env-mapper.js +222 -0
  243. package/src/lib/hub-protocol.js +322 -0
  244. package/src/lib/index.js +42 -0
  245. package/src/lib/logger/telegram-core.js +150 -0
  246. package/src/lib/logger/telegram-transport.js +126 -0
  247. package/src/lib/mega-brute-force.js +225 -0
  248. package/src/lib/mega-circuit-breaker.js +412 -0
  249. package/src/lib/mega-cron.js +169 -0
  250. package/src/lib/mega-hash.js +179 -0
  251. package/src/lib/mega-health.js +91 -0
  252. package/src/lib/mega-job-queue.js +600 -0
  253. package/src/lib/mega-job-worker.js +295 -0
  254. package/src/lib/mega-job.js +140 -0
  255. package/src/lib/mega-logger.js +128 -0
  256. package/src/lib/mega-metrics.js +661 -0
  257. package/src/lib/mega-plugin.js +650 -0
  258. package/src/lib/mega-retry.js +95 -0
  259. package/src/lib/mega-schedule.js +507 -0
  260. package/src/lib/mega-shutdown.js +176 -0
  261. package/src/lib/mega-tracing.js +715 -0
  262. package/src/lib/mega-worker.js +653 -0
  263. package/src/lib/worker-runner/process-entry.js +30 -0
  264. package/src/lib/worker-runner/task-dispatch.js +72 -0
  265. package/src/lib/worker-runner/thread-entry.js +26 -0
  266. package/src/models/index.js +7 -0
  267. package/src/models/mega-model.js +151 -0
  268. package/src/test/index.js +288 -0
  269. package/templates/adapter/code.tpl +40 -0
  270. package/templates/adapter/test.tpl +13 -0
  271. package/templates/app/app.config.tpl +10 -0
  272. package/templates/app/route.tpl +10 -0
  273. package/templates/app/test.tpl +13 -0
  274. package/templates/channel/code.tpl +38 -0
  275. package/templates/channel/test.tpl +19 -0
  276. package/templates/controller/code.tpl +16 -0
  277. package/templates/controller/route.tpl +9 -0
  278. package/templates/controller/test.tpl +14 -0
  279. package/templates/job/code.tpl +23 -0
  280. package/templates/job/test.tpl +17 -0
  281. package/templates/locale/code.tpl +3 -0
  282. package/templates/locale/test.tpl +13 -0
  283. package/templates/middleware/code.tpl +13 -0
  284. package/templates/middleware/test.tpl +11 -0
  285. package/templates/migration/code.tpl +20 -0
  286. package/templates/migration/test.tpl +14 -0
  287. package/templates/model/code.tpl +21 -0
  288. package/templates/model/test.tpl +29 -0
  289. package/templates/project/app.config.tpl +8 -0
  290. package/templates/project/app.config.views.tpl +37 -0
  291. package/templates/project/ecosystem.config.tpl +10 -0
  292. package/templates/project/env.tpl +12 -0
  293. package/templates/project/gitignore.tpl +8 -0
  294. package/templates/project/locales/client/en.json.tpl +3 -0
  295. package/templates/project/locales/client/ko.json.tpl +3 -0
  296. package/templates/project/locales/server/en.json.tpl +17 -0
  297. package/templates/project/locales/server/ko.json.tpl +17 -0
  298. package/templates/project/mega.config.tpl +11 -0
  299. package/templates/project/package.tpl +25 -0
  300. package/templates/project/public/css/app.css +101 -0
  301. package/templates/project/public/js/app.js +54 -0
  302. package/templates/project/public/js/theme-init.js +12 -0
  303. package/templates/project/public/vendor/bootstrap/bootstrap.bundle.min.js +7 -0
  304. package/templates/project/public/vendor/bootstrap/bootstrap.min.css +6 -0
  305. package/templates/project/readme.tpl +48 -0
  306. package/templates/project/route.test.tpl +13 -0
  307. package/templates/project/route.test.views.tpl +15 -0
  308. package/templates/project/route.tpl +10 -0
  309. package/templates/project/route.views.tpl +10 -0
  310. package/templates/project/views/index.ejs.tpl +58 -0
  311. package/templates/project/views/layout.ejs.tpl +73 -0
  312. package/templates/project/vitest.config.tpl +8 -0
  313. package/templates/route/code.tpl +11 -0
  314. package/templates/route/test.tpl +26 -0
  315. package/templates/schedule/code.tpl +19 -0
  316. package/templates/schedule/test.tpl +17 -0
  317. package/templates/service/code.tpl +18 -0
  318. package/templates/service/test.tpl +17 -0
  319. package/templates/worker/code.tpl +14 -0
  320. package/templates/worker/task.tpl +13 -0
  321. package/templates/worker/test.tpl +18 -0
  322. package/vitest.config.js +33 -0
@@ -0,0 +1,109 @@
1
+ /* highlight.js GitHub Dark theme โ€” [data-bs-theme=dark] ์Šค์ฝ”ํ”„(์›๋ณธ: highlight.js/styles/github-dark.css). */
2
+ [data-bs-theme="dark"] pre code.hljs {
3
+ display: block;
4
+ overflow-x: auto;
5
+ padding: 1em
6
+ }
7
+ [data-bs-theme="dark"] code.hljs {
8
+ padding: 3px 5px
9
+ }
10
+ [data-bs-theme="dark"] .hljs {
11
+ color: #c9d1d9;
12
+ background: #0d1117
13
+ }
14
+ [data-bs-theme="dark"] .hljs-doctag,
15
+ [data-bs-theme="dark"] .hljs-keyword,
16
+ [data-bs-theme="dark"] .hljs-meta .hljs-keyword,
17
+ [data-bs-theme="dark"] .hljs-template-tag,
18
+ [data-bs-theme="dark"] .hljs-template-variable,
19
+ [data-bs-theme="dark"] .hljs-type,
20
+ [data-bs-theme="dark"] .hljs-variable.language_ {
21
+
22
+ color: #ff7b72
23
+ }
24
+ [data-bs-theme="dark"] .hljs-title,
25
+ [data-bs-theme="dark"] .hljs-title.class_,
26
+ [data-bs-theme="dark"] .hljs-title.class_.inherited__,
27
+ [data-bs-theme="dark"] .hljs-title.function_ {
28
+
29
+ color: #d2a8ff
30
+ }
31
+ [data-bs-theme="dark"] .hljs-attr,
32
+ [data-bs-theme="dark"] .hljs-attribute,
33
+ [data-bs-theme="dark"] .hljs-literal,
34
+ [data-bs-theme="dark"] .hljs-meta,
35
+ [data-bs-theme="dark"] .hljs-number,
36
+ [data-bs-theme="dark"] .hljs-operator,
37
+ [data-bs-theme="dark"] .hljs-variable,
38
+ [data-bs-theme="dark"] .hljs-selector-attr,
39
+ [data-bs-theme="dark"] .hljs-selector-class,
40
+ [data-bs-theme="dark"] .hljs-selector-id {
41
+
42
+ color: #79c0ff
43
+ }
44
+ [data-bs-theme="dark"] .hljs-regexp,
45
+ [data-bs-theme="dark"] .hljs-string,
46
+ [data-bs-theme="dark"] .hljs-meta .hljs-string {
47
+
48
+ color: #a5d6ff
49
+ }
50
+ [data-bs-theme="dark"] .hljs-built_in,
51
+ [data-bs-theme="dark"] .hljs-symbol {
52
+
53
+ color: #ffa657
54
+ }
55
+ [data-bs-theme="dark"] .hljs-comment,
56
+ [data-bs-theme="dark"] .hljs-code,
57
+ [data-bs-theme="dark"] .hljs-formula {
58
+
59
+ color: #8b949e
60
+ }
61
+ [data-bs-theme="dark"] .hljs-name,
62
+ [data-bs-theme="dark"] .hljs-quote,
63
+ [data-bs-theme="dark"] .hljs-selector-tag,
64
+ [data-bs-theme="dark"] .hljs-selector-pseudo {
65
+
66
+ color: #7ee787
67
+ }
68
+ [data-bs-theme="dark"] .hljs-subst {
69
+
70
+ color: #c9d1d9
71
+ }
72
+ [data-bs-theme="dark"] .hljs-section {
73
+
74
+ color: #1f6feb;
75
+ font-weight: bold
76
+ }
77
+ [data-bs-theme="dark"] .hljs-bullet {
78
+
79
+ color: #f2cc60
80
+ }
81
+ [data-bs-theme="dark"] .hljs-emphasis {
82
+
83
+ color: #c9d1d9;
84
+ font-style: italic
85
+ }
86
+ [data-bs-theme="dark"] .hljs-strong {
87
+
88
+ color: #c9d1d9;
89
+ font-weight: bold
90
+ }
91
+ [data-bs-theme="dark"] .hljs-addition {
92
+
93
+ color: #aff5b4;
94
+ background-color: #033a16
95
+ }
96
+ [data-bs-theme="dark"] .hljs-deletion {
97
+
98
+ color: #ffdcd7;
99
+ background-color: #67060c
100
+ }
101
+ [data-bs-theme="dark"] .hljs-char.escape_,
102
+ [data-bs-theme="dark"] .hljs-link,
103
+ [data-bs-theme="dark"] .hljs-params,
104
+ [data-bs-theme="dark"] .hljs-property,
105
+ [data-bs-theme="dark"] .hljs-punctuation,
106
+ [data-bs-theme="dark"] .hljs-tag {
107
+
108
+
109
+ }
@@ -0,0 +1,118 @@
1
+ pre code.hljs {
2
+ display: block;
3
+ overflow-x: auto;
4
+ padding: 1em
5
+ }
6
+ code.hljs {
7
+ padding: 3px 5px
8
+ }
9
+ /*!
10
+ Theme: GitHub
11
+ Description: Light theme as seen on github.com
12
+ Author: github.com
13
+ Maintainer: @Hirse
14
+ Updated: 2021-05-15
15
+
16
+ Outdated base version: https://github.com/primer/github-syntax-light
17
+ Current colors taken from GitHub's CSS
18
+ */
19
+ .hljs {
20
+ color: #24292e;
21
+ background: #ffffff
22
+ }
23
+ .hljs-doctag,
24
+ .hljs-keyword,
25
+ .hljs-meta .hljs-keyword,
26
+ .hljs-template-tag,
27
+ .hljs-template-variable,
28
+ .hljs-type,
29
+ .hljs-variable.language_ {
30
+ /* prettylights-syntax-keyword */
31
+ color: #d73a49
32
+ }
33
+ .hljs-title,
34
+ .hljs-title.class_,
35
+ .hljs-title.class_.inherited__,
36
+ .hljs-title.function_ {
37
+ /* prettylights-syntax-entity */
38
+ color: #6f42c1
39
+ }
40
+ .hljs-attr,
41
+ .hljs-attribute,
42
+ .hljs-literal,
43
+ .hljs-meta,
44
+ .hljs-number,
45
+ .hljs-operator,
46
+ .hljs-variable,
47
+ .hljs-selector-attr,
48
+ .hljs-selector-class,
49
+ .hljs-selector-id {
50
+ /* prettylights-syntax-constant */
51
+ color: #005cc5
52
+ }
53
+ .hljs-regexp,
54
+ .hljs-string,
55
+ .hljs-meta .hljs-string {
56
+ /* prettylights-syntax-string */
57
+ color: #032f62
58
+ }
59
+ .hljs-built_in,
60
+ .hljs-symbol {
61
+ /* prettylights-syntax-variable */
62
+ color: #e36209
63
+ }
64
+ .hljs-comment,
65
+ .hljs-code,
66
+ .hljs-formula {
67
+ /* prettylights-syntax-comment */
68
+ color: #6a737d
69
+ }
70
+ .hljs-name,
71
+ .hljs-quote,
72
+ .hljs-selector-tag,
73
+ .hljs-selector-pseudo {
74
+ /* prettylights-syntax-entity-tag */
75
+ color: #22863a
76
+ }
77
+ .hljs-subst {
78
+ /* prettylights-syntax-storage-modifier-import */
79
+ color: #24292e
80
+ }
81
+ .hljs-section {
82
+ /* prettylights-syntax-markup-heading */
83
+ color: #005cc5;
84
+ font-weight: bold
85
+ }
86
+ .hljs-bullet {
87
+ /* prettylights-syntax-markup-list */
88
+ color: #735c0f
89
+ }
90
+ .hljs-emphasis {
91
+ /* prettylights-syntax-markup-italic */
92
+ color: #24292e;
93
+ font-style: italic
94
+ }
95
+ .hljs-strong {
96
+ /* prettylights-syntax-markup-bold */
97
+ color: #24292e;
98
+ font-weight: bold
99
+ }
100
+ .hljs-addition {
101
+ /* prettylights-syntax-markup-inserted */
102
+ color: #22863a;
103
+ background-color: #f0fff4
104
+ }
105
+ .hljs-deletion {
106
+ /* prettylights-syntax-markup-deleted */
107
+ color: #b31d28;
108
+ background-color: #ffeef0
109
+ }
110
+ .hljs-char.escape_,
111
+ .hljs-link,
112
+ .hljs-params,
113
+ .hljs-property,
114
+ .hljs-punctuation,
115
+ .hljs-tag {
116
+ /* purposely ignored */
117
+
118
+ }
@@ -0,0 +1,19 @@
1
+ # mega-client-wasm (vendored)
2
+
3
+ `packages/mega-client-wasm` ์˜ `wasm-pack build --target web` ์‚ฐ์ถœ๋ฌผ(`pkg/`)์„ ๋ณต์‚ฌํ•œ ์‚ฌ๋ณธ์ด๋‹ค.
4
+ ์›๋ณธ `pkg/` ๋Š” ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ์ด๋ผ git-ignore ๋˜๋ฏ€๋กœ, Bootstrap ์ฒ˜๋Ÿผ ์ •์  ์ž์‚ฐ์œผ๋กœ **vendoring** ํ•ด
5
+ clone ํ›„์—๋„ ์ƒ˜ํ”Œ์ด ์ž์ฒด ๋™์ž‘(self-contained)ํ•˜๋„๋ก ์ปค๋ฐ‹ํ•œ๋‹ค.
6
+
7
+ `/demo/ws` ์ฑ„ํŒ… ํŽ˜์ด์ง€๊ฐ€ `MegaSocket` ์„ `protocol: 'envelope'` ๋ชจ๋“œ(ADR-160)๋กœ ์จ์„œ `/ws/chat` ์—
8
+ ASP E: ํ”„๋ ˆ์ž„์œผ๋กœ ์ ‘์†ํ•œ๋‹ค.
9
+
10
+ ## ์žฌ์ƒ์„ฑ
11
+
12
+ ```sh
13
+ cd packages/mega-client-wasm
14
+ wasm-pack build --target web
15
+ cp pkg/mega_client_wasm.js pkg/mega_client_wasm_bg.wasm pkg/mega_client_wasm.d.ts \
16
+ ../../sample/crud/apps/main/public/vendor/mega-client-wasm/
17
+ ```
18
+
19
+ ADR-158(์ƒ˜ํ”Œ WS+ASP ์ฑ„ํŒ… ๋ฐ๋ชจ) ยท ADR-160(MegaSocket envelope ํ”„๋กœํ† ์ฝœ ๋ชจ๋“œ).
@@ -0,0 +1,196 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /**
5
+ * ASP HTTP REST ํด๋ผ์ด์–ธํŠธ. ๋ธŒ๋ผ์šฐ์ € `window.fetch` ์œ„์— ASP ์•”/๋ณตํ˜ธํ™” ํŒŒ์ดํ”„๋ผ์ธ.
6
+ */
7
+ export class MegaClient {
8
+ free(): void;
9
+ [Symbol.dispose](): void;
10
+ /**
11
+ * DELETE.
12
+ */
13
+ delete(path: string, opts: any): Promise<any>;
14
+ /**
15
+ * GET. `opts.encrypt` ๋กœ ํ˜ธ์ถœ๋ณ„ ์˜ค๋ฒ„๋ผ์ด๋“œ (๋””ํดํŠธ = ํด๋ผ์ด์–ธํŠธ ์„ค์ •).
16
+ */
17
+ get(path: string, opts: any): Promise<any>;
18
+ /**
19
+ * ASP ์‹œ๊ทธ๋„ ํ—ค๋” ์ด๋ฆ„ ๋ฐ˜ํ™˜.
20
+ */
21
+ getHeaderSignal(): string;
22
+ /**
23
+ * ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ.
24
+ *
25
+ * `opts = { encrypt?: boolean, headerSignal?: string }`.
26
+ * `encrypt` ๋””ํดํŠธ `true` (ADR-086), `headerSignal` ๋””ํดํŠธ `"X-Mega-Encrypted"`.
27
+ */
28
+ constructor(master_secret: string, opts: any);
29
+ /**
30
+ * PATCH.
31
+ */
32
+ patch(path: string, body: any, opts: any): Promise<any>;
33
+ /**
34
+ * POST. body ๋Š” JS ๊ฐ์ฒด (JSON ์ง๋ ฌํ™”๋จ).
35
+ */
36
+ post(path: string, body: any, opts: any): Promise<any>;
37
+ /**
38
+ * PUT.
39
+ */
40
+ put(path: string, body: any, opts: any): Promise<any>;
41
+ /**
42
+ * FormData ํŒŒ์ผ ์—…๋กœ๋“œ.
43
+ *
44
+ * FormData body ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋ฏ€๋กœ ์•”ํ˜ธํ™”ํ•˜์ง€ ์•Š๊ณ  `X-Timestamp` ๋งŒ ๋ถ€์ฐฉ (ASP ๊ฒŒ์ดํŠธ ํ†ต๊ณผ).
45
+ * ์‘๋‹ต์€ ์„œ๋ฒ„๊ฐ€ ASP ์•”ํ˜ธํ™”ํ•˜๋ฏ€๋กœ ์‹œ๊ทธ๋„ ํ—ค๋” ํ™•์ธ ํ›„ ๋ณตํ˜ธํ™”.
46
+ */
47
+ upload(path: string, form_data: FormData): Promise<any>;
48
+ }
49
+
50
+ /**
51
+ * ๐Ÿ“ก MegaSocket โ€” ASP WebSocket ํด๋ผ์ด์–ธํŠธ.
52
+ */
53
+ export class MegaSocket {
54
+ free(): void;
55
+ [Symbol.dispose](): void;
56
+ /**
57
+ * ์„œ๋ฒ„ ์—ฐ๊ฒฐ. ๋ณธ ์—ฐ๊ฒฐยท์žฌ์—ฐ๊ฒฐ ๋ชจ๋‘ [`open_socket`] ๋‹จ์ผ ๊ฒฝ๋กœ (ADR-085 d).
58
+ */
59
+ connect(): void;
60
+ /**
61
+ * ๋ช…์‹œ์  ์—ฐ๊ฒฐ ์ข…๋ฃŒ (์žฌ์—ฐ๊ฒฐ ์•ˆ ํ•จ).
62
+ */
63
+ disconnect(): void;
64
+ /**
65
+ * ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ.
66
+ */
67
+ isConnected(): boolean;
68
+ /**
69
+ * ์ƒ์„ฑ์ž.
70
+ *
71
+ * `opts = { encrypt?: boolean, protocol?: "event" | "envelope" }`.
72
+ * - `encrypt` ๋””ํดํŠธ `true` (ADR-086).
73
+ * - `protocol` ๋””ํดํŠธ `"event"` โ€” ์†ก์ˆ˜์‹  wire ๊ฐ€ `{type,data}`(ํ•˜์œ„ํ˜ธํ™˜). `"envelope"` ๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ
74
+ * WS ์„œ๋ฒ„ ์ •๋ณธ envelope `{v,id,type,ts,payload}`(ADR-015)๋กœ ์†ก์ˆ˜์‹ ํ•ด `/ws/*` ๋ผ์šฐํŠธ์™€ ์ •ํ•ฉํ•œ๋‹ค(ADR-160).
75
+ *
76
+ * `domain` / `ws_path` ๋Š” URL ์—์„œ, `ua` ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ถ”์ถœ.
77
+ */
78
+ constructor(url: string, master_secret: string, opts: any);
79
+ /**
80
+ * ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก.
81
+ */
82
+ on(event_type: string, callback: Function): void;
83
+ /**
84
+ * ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก.
85
+ *
86
+ * `opts = { plain?: boolean }`. `encrypt && !plain` ์ด๋ฉด `E:` ํ”„๋ ˆ์ž„, ๊ทธ ์™ธ `P:` ํ‰๋ฌธ.
87
+ * wire ํ˜•์‹์€ ์ƒ์„ฑ์ž `protocol` ๋ชจ๋“œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค(`event`={type,data} / `envelope`={v,id,type,ts,payload}, ADR-160).
88
+ */
89
+ send(event_type: string, data: any, opts: any): void;
90
+ /**
91
+ * ์ž๋™ ์žฌ์—ฐ๊ฒฐ on/off (๋‹ค์Œ connect ๋ถ€ํ„ฐ ๋ฐ˜์˜).
92
+ */
93
+ setAutoReconnect(enabled: boolean): void;
94
+ /**
95
+ * ์ตœ๋Œ€ ์žฌ์—ฐ๊ฒฐ ์‹œ๋„ ํšŸ์ˆ˜ ์„ค์ •.
96
+ */
97
+ setMaxReconnectAttempts(count: number): void;
98
+ /**
99
+ * Ping ์ฃผ๊ธฐ(ms) ์„ค์ •.
100
+ */
101
+ setPingInterval(ms: number): void;
102
+ }
103
+
104
+ /**
105
+ * ๋ธŒ๋ผ์šฐ์ € WASM ์œ ํ‹ธ๋ฆฌํ‹ฐ (์ •์  ๋ฉ”์„œ๋“œ ๋ชจ์Œ).
106
+ */
107
+ export class MegaUtil {
108
+ private constructor();
109
+ free(): void;
110
+ [Symbol.dispose](): void;
111
+ /**
112
+ * ์ž„๊ณ„๊ฐ’ ์ดˆ๊ณผ ํ•„ํ„ฐ.
113
+ */
114
+ static filterGt(list: Int32Array, threshold: number): Int32Array;
115
+ /**
116
+ * SHA-256 ํ•ด์‹œ (hex 64์ž).
117
+ */
118
+ static sha256(input: string): string;
119
+ /**
120
+ * Fisher-Yates ์…”ํ”Œ โ€” JS `sort(() => 0.5 - Math.random())` ๋Œ€๋น„ ๊ท ๋“ฑ ๋ถ„ํฌ + ๊ณ ์†.
121
+ */
122
+ static shuffleI32(list: Int32Array): Int32Array;
123
+ /**
124
+ * ๊ณ ์† ์ •๋ ฌ (unstable โ€” ๋™์ผ ๊ฐ’ ์ˆœ์„œ ๋ฏธ๋ณด์žฅ, ๋Œ€์‹  ๋น ๋ฆ„).
125
+ */
126
+ static sortI32(list: Int32Array): Int32Array;
127
+ /**
128
+ * UUID v4 ์ƒ์„ฑ (getrandom ๊ธฐ๋ฐ˜ โ€” ์‹ ๊ทœ crate ์˜์กด ์—†์Œ).
129
+ */
130
+ static uuid(): string;
131
+ }
132
+
133
+ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
134
+
135
+ export interface InitOutput {
136
+ readonly memory: WebAssembly.Memory;
137
+ readonly __wbg_megaclient_free: (a: number, b: number) => void;
138
+ readonly megaclient_new: (a: number, b: number, c: number, d: number) => void;
139
+ readonly megaclient_getHeaderSignal: (a: number, b: number) => void;
140
+ readonly megaclient_get: (a: number, b: number, c: number, d: number) => number;
141
+ readonly megaclient_post: (a: number, b: number, c: number, d: number, e: number) => number;
142
+ readonly megaclient_put: (a: number, b: number, c: number, d: number, e: number) => number;
143
+ readonly megaclient_patch: (a: number, b: number, c: number, d: number, e: number) => number;
144
+ readonly megaclient_delete: (a: number, b: number, c: number, d: number) => number;
145
+ readonly megaclient_upload: (a: number, b: number, c: number, d: number) => number;
146
+ readonly __wbg_megasocket_free: (a: number, b: number) => void;
147
+ readonly megasocket_new: (a: number, b: number, c: number, d: number, e: number) => number;
148
+ readonly megasocket_connect: (a: number, b: number) => void;
149
+ readonly megasocket_send: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
150
+ readonly megasocket_on: (a: number, b: number, c: number, d: number) => void;
151
+ readonly megasocket_disconnect: (a: number) => void;
152
+ readonly megasocket_isConnected: (a: number) => number;
153
+ readonly megasocket_setAutoReconnect: (a: number, b: number) => void;
154
+ readonly megasocket_setPingInterval: (a: number, b: number) => void;
155
+ readonly megasocket_setMaxReconnectAttempts: (a: number, b: number) => void;
156
+ readonly __wbg_megautil_free: (a: number, b: number) => void;
157
+ readonly megautil_sha256: (a: number, b: number, c: number) => void;
158
+ readonly megautil_uuid: (a: number) => void;
159
+ readonly megautil_shuffleI32: (a: number, b: number, c: number) => void;
160
+ readonly megautil_sortI32: (a: number, b: number, c: number) => void;
161
+ readonly megautil_filterGt: (a: number, b: number, c: number, d: number) => void;
162
+ readonly __wasm_bindgen_func_elem_761: (a: number, b: number, c: number, d: number) => void;
163
+ readonly __wasm_bindgen_func_elem_769: (a: number, b: number, c: number, d: number) => void;
164
+ readonly __wasm_bindgen_func_elem_144: (a: number, b: number, c: number) => void;
165
+ readonly __wasm_bindgen_func_elem_144_2: (a: number, b: number, c: number) => void;
166
+ readonly __wasm_bindgen_func_elem_144_3: (a: number, b: number, c: number) => void;
167
+ readonly __wasm_bindgen_func_elem_143: (a: number, b: number) => void;
168
+ readonly __wbindgen_export: (a: number, b: number) => number;
169
+ readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
170
+ readonly __wbindgen_export3: (a: number) => void;
171
+ readonly __wbindgen_export4: (a: number, b: number) => void;
172
+ readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
173
+ readonly __wbindgen_export5: (a: number, b: number, c: number) => void;
174
+ }
175
+
176
+ export type SyncInitInput = BufferSource | WebAssembly.Module;
177
+
178
+ /**
179
+ * Instantiates the given `module`, which can either be bytes or
180
+ * a precompiled `WebAssembly.Module`.
181
+ *
182
+ * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
183
+ *
184
+ * @returns {InitOutput}
185
+ */
186
+ export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
187
+
188
+ /**
189
+ * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
190
+ * for everything else, calls `WebAssembly.instantiate` directly.
191
+ *
192
+ * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
193
+ *
194
+ * @returns {Promise<InitOutput>}
195
+ */
196
+ export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;