wexts 3.0.2 → 4.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.
- package/README.md +49 -346
- package/bin/wexts.cjs +2 -0
- package/dist/chunk-2KAQYLVN.js +0 -0
- package/dist/chunk-2KAQYLVN.js.map +1 -1
- package/dist/{chunk-O42L6HOX.js → chunk-2LJVUMXW.js} +79 -93
- package/dist/chunk-2LJVUMXW.js.map +1 -0
- package/dist/chunk-342VRT25.mjs +504 -0
- package/dist/chunk-342VRT25.mjs.map +1 -0
- package/dist/chunk-7HNQWJWV.js +504 -0
- package/dist/chunk-7HNQWJWV.js.map +1 -0
- package/dist/chunk-7QKLIVRF.js +94 -0
- package/dist/chunk-7QKLIVRF.js.map +1 -0
- package/dist/chunk-7SSCNCTW.mjs +137 -0
- package/dist/chunk-7SSCNCTW.mjs.map +1 -0
- package/dist/chunk-7TLSPR65.mjs +95 -0
- package/dist/chunk-7TLSPR65.mjs.map +1 -0
- package/dist/{chunk-FCEZDH42.mjs → chunk-7WULUGLH.mjs} +5 -3
- package/dist/chunk-7WULUGLH.mjs.map +1 -0
- package/dist/chunk-AVMQJWYD.js +95 -0
- package/dist/chunk-AVMQJWYD.js.map +1 -0
- package/dist/{chunk-WF65EDRZ.js → chunk-BG56B4DE.js} +20 -2
- package/dist/chunk-BG56B4DE.js.map +1 -0
- package/dist/chunk-CLM5PNSG.mjs +496 -0
- package/dist/chunk-CLM5PNSG.mjs.map +1 -0
- package/dist/chunk-DNLGCKTT.js +31 -0
- package/dist/chunk-DNLGCKTT.js.map +1 -0
- package/dist/{chunk-VNNVLQLJ.mjs → chunk-JHOVXH3X.mjs} +2 -2
- package/dist/chunk-JHOVXH3X.mjs.map +1 -0
- package/dist/chunk-MXINIFPC.js +105 -0
- package/dist/chunk-MXINIFPC.js.map +1 -0
- package/dist/chunk-O4II6N34.js +137 -0
- package/dist/chunk-O4II6N34.js.map +1 -0
- package/dist/chunk-SE32ZPOZ.js +496 -0
- package/dist/chunk-SE32ZPOZ.js.map +1 -0
- package/dist/{chunk-STTOPUZ2.mjs → chunk-UAL54DVV.mjs} +21 -3
- package/dist/chunk-UAL54DVV.mjs.map +1 -0
- package/dist/{chunk-3OM7CHCA.js → chunk-WCKSKU3C.js} +1 -1
- package/dist/chunk-WCKSKU3C.js.map +1 -0
- package/dist/chunk-WU6FW77M.mjs +105 -0
- package/dist/chunk-WU6FW77M.mjs.map +1 -0
- package/dist/chunk-XE4OXN2W.js +0 -0
- package/dist/chunk-XE4OXN2W.js.map +1 -1
- package/dist/chunk-YBM3IJEA.mjs +94 -0
- package/dist/chunk-YBM3IJEA.mjs.map +1 -0
- package/dist/{chunk-KXYLEUSW.mjs → chunk-YN6WIWNQ.mjs} +69 -83
- package/dist/chunk-YN6WIWNQ.mjs.map +1 -0
- package/dist/chunk-YSLEF5C5.mjs +0 -0
- package/dist/chunk-YSLEF5C5.mjs.map +0 -0
- package/dist/chunk-ZX7QIN24.mjs +31 -0
- package/dist/chunk-ZX7QIN24.mjs.map +1 -0
- package/dist/cli/index.d.mts +22 -0
- package/dist/cli/index.d.ts +22 -0
- package/dist/cli/index.js +676 -292
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +678 -293
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.d.mts +10 -1
- package/dist/client/index.d.ts +10 -1
- package/dist/client/index.js +5 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +7 -4
- package/dist/client/index.mjs.map +0 -0
- package/dist/codegen/index.d.mts +2 -1
- package/dist/codegen/index.d.ts +2 -1
- package/dist/codegen/index.js +6 -3
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/index.mjs +8 -5
- package/dist/codegen/index.mjs.map +0 -0
- package/dist/decorators-BT1FFqN0.d.mts +29 -0
- package/dist/decorators-DvS58PqC.d.ts +29 -0
- package/dist/dev-server/index.d.mts +1 -1
- package/dist/dev-server/index.d.ts +1 -1
- package/dist/dev-server/index.js +3 -3
- package/dist/dev-server/index.js.map +1 -1
- package/dist/dev-server/index.mjs +3 -3
- package/dist/dev-server/index.mjs.map +0 -0
- package/dist/{index-SjUaHgFr.d.ts → index-7QeQEf37.d.ts} +27 -10
- package/dist/{index-tFGPFVfQ.d.mts → index-7RvU-jGE.d.mts} +0 -1
- package/dist/{index-tFGPFVfQ.d.ts → index-7RvU-jGE.d.ts} +0 -1
- package/dist/{index-SjUaHgFr.d.mts → index-8nzxy0NN.d.mts} +27 -10
- package/dist/index-Co5ZsLqq.d.ts +58 -0
- package/dist/index-D94W1__r.d.mts +58 -0
- package/dist/index-DQmyVp6F.d.mts +27 -0
- package/dist/index-KL_1BrQb.d.ts +27 -0
- package/dist/index.d.mts +54 -7
- package/dist/index.d.ts +54 -7
- package/dist/index.js +70 -29
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +62 -21
- package/dist/index.mjs.map +1 -1
- package/dist/nest/index.d.mts +3 -1
- package/dist/nest/index.d.ts +3 -1
- package/dist/nest/index.js +20 -2
- package/dist/nest/index.js.map +1 -1
- package/dist/nest/index.mjs +21 -3
- package/dist/nest/index.mjs.map +0 -0
- package/dist/next/index.d.mts +7 -2
- package/dist/next/index.d.ts +7 -2
- package/dist/next/index.js +135 -5
- package/dist/next/index.js.map +1 -1
- package/dist/next/index.mjs +133 -4
- package/dist/next/index.mjs.map +1 -1
- package/dist/rpc/index.d.mts +2 -0
- package/dist/rpc/index.d.ts +2 -0
- package/dist/rpc/index.js +23 -0
- package/dist/rpc/index.js.map +1 -0
- package/dist/rpc/index.mjs +23 -0
- package/dist/{chunk-7NSRDJ5C.mjs.map → rpc/index.mjs.map} +0 -0
- package/dist/runtime/index.d.mts +55 -0
- package/dist/runtime/index.d.ts +55 -0
- package/dist/runtime/index.js +221 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/index.mjs +221 -0
- package/dist/runtime/index.mjs.map +1 -0
- package/dist/types/index.d.mts +0 -0
- package/dist/types/index.d.ts +0 -0
- package/dist/types/index.js +0 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs +1 -1
- package/dist/types/index.mjs.map +0 -0
- package/dist/types-7d_fC-C3.d.mts +32 -0
- package/dist/types-7d_fC-C3.d.ts +32 -0
- package/dist/vercel-builder/index.d.mts +58 -0
- package/dist/vercel-builder/index.d.ts +58 -0
- package/dist/vercel-builder/index.js +330 -0
- package/dist/vercel-builder/index.js.map +1 -0
- package/dist/vercel-builder/index.mjs +330 -0
- package/dist/vercel-builder/index.mjs.map +1 -0
- package/package.json +37 -16
- package/templates/.dockerignore +43 -43
- package/templates/.env.example +0 -0
- package/templates/Dockerfile +60 -60
- package/templates/Procfile +1 -1
- package/templates/README.md +67 -58
- package/templates/api-sdk.ts +115 -115
- package/templates/docker-compose.yml +34 -34
- package/templates/nestjs-api/.env.example +0 -0
- package/templates/nestjs-api/README.md +87 -79
- package/templates/nestjs-api/nest-cli.json +6 -6
- package/templates/nestjs-api/package.json +40 -40
- package/templates/nestjs-api/prisma/dev.db +0 -0
- package/templates/nestjs-api/prisma/migrations/20251123205437_init/migration.sql +0 -0
- package/templates/nestjs-api/prisma/migrations/migration_lock.toml +0 -0
- package/templates/nestjs-api/prisma/schema.prisma +29 -29
- package/templates/nestjs-api/src/app.module.ts +17 -17
- package/templates/nestjs-api/src/auth/auth.controller.ts +27 -27
- package/templates/nestjs-api/src/auth/auth.module.ts +37 -29
- package/templates/nestjs-api/src/auth/auth.service.ts +86 -86
- package/templates/nestjs-api/src/auth/dto/auth.dto.ts +22 -22
- package/templates/nestjs-api/src/auth/guards/jwt-auth.guard.ts +5 -5
- package/templates/nestjs-api/src/auth/strategies/jwt.strategy.ts +27 -19
- package/templates/nestjs-api/src/main.ts +32 -32
- package/templates/nestjs-api/src/prisma/prisma.module.ts +9 -9
- package/templates/nestjs-api/src/prisma/prisma.service.ts +14 -14
- package/templates/nestjs-api/src/todos/dto/todo.dto.ts +24 -24
- package/templates/nestjs-api/src/todos/todos.controller.ts +39 -39
- package/templates/nestjs-api/src/todos/todos.module.ts +11 -11
- package/templates/nestjs-api/src/todos/todos.service.ts +53 -53
- package/templates/nestjs-api/src/users/users.controller.ts +14 -14
- package/templates/nestjs-api/src/users/users.module.ts +12 -12
- package/templates/nestjs-api/src/users/users.service.ts +19 -19
- package/templates/nestjs-api/tsconfig.json +39 -39
- package/templates/nextjs-web/README.md +76 -68
- package/templates/nextjs-web/app/actions/auth.ts +108 -108
- package/templates/nextjs-web/app/dashboard/error.tsx +39 -39
- package/templates/nextjs-web/app/dashboard/loading.tsx +14 -14
- package/templates/nextjs-web/app/dashboard/page.tsx +5 -5
- package/templates/nextjs-web/app/globals.css +93 -93
- package/templates/nextjs-web/app/layout.tsx +29 -29
- package/templates/nextjs-web/app/login/page.tsx +5 -5
- package/templates/nextjs-web/app/page.tsx +28 -28
- package/templates/nextjs-web/app/register/page.tsx +5 -5
- package/templates/nextjs-web/components/ui/button.tsx +56 -56
- package/templates/nextjs-web/components/ui/card.tsx +79 -79
- package/templates/nextjs-web/components/ui/input.tsx +25 -25
- package/templates/nextjs-web/components/ui/label.tsx +24 -24
- package/templates/nextjs-web/features/auth/LoginForm.tsx +140 -140
- package/templates/nextjs-web/features/auth/RegisterForm.tsx +159 -159
- package/templates/nextjs-web/features/auth/api.ts +35 -35
- package/templates/nextjs-web/features/auth/index.ts +3 -3
- package/templates/nextjs-web/features/dashboard/DashboardView.tsx +204 -204
- package/templates/nextjs-web/features/dashboard/api.ts +9 -9
- package/templates/nextjs-web/features/dashboard/components.tsx +74 -74
- package/templates/nextjs-web/features/dashboard/index.ts +3 -3
- package/templates/nextjs-web/hooks/index.ts +4 -4
- package/templates/nextjs-web/lib/api-client.ts +89 -89
- package/templates/nextjs-web/lib/api.ts +115 -115
- package/templates/nextjs-web/lib/axios-global-config.ts +17 -17
- package/templates/nextjs-web/lib/utils.ts +6 -6
- package/templates/nextjs-web/lib/wexts-client.ts +4 -4
- package/templates/nextjs-web/next-env.d.ts +6 -6
- package/templates/nextjs-web/next.config.ts +20 -20
- package/templates/nextjs-web/package.json +37 -37
- package/templates/nextjs-web/postcss.config.js +6 -6
- package/templates/nextjs-web/tailwind.config.ts +69 -69
- package/templates/nextjs-web/tsconfig.json +1 -1
- package/templates/nixpacks.toml +11 -11
- package/templates/root-package.json +31 -31
- package/templates/server.ts +66 -66
- package/templates/tsconfig.json +30 -30
- package/dist/chunk-2MCBBWEA.js +0 -1
- package/dist/chunk-2MCBBWEA.js.map +0 -1
- package/dist/chunk-3OM7CHCA.js.map +0 -1
- package/dist/chunk-63MTCWU2.mjs +0 -361
- package/dist/chunk-63MTCWU2.mjs.map +0 -1
- package/dist/chunk-667BQCEM.js +0 -375
- package/dist/chunk-667BQCEM.js.map +0 -1
- package/dist/chunk-67IJ6H4J.mjs +0 -44
- package/dist/chunk-67IJ6H4J.mjs.map +0 -1
- package/dist/chunk-6SVQEGEX.mjs +0 -44
- package/dist/chunk-6SVQEGEX.mjs.map +0 -1
- package/dist/chunk-7NSRDJ5C.mjs +0 -1
- package/dist/chunk-ASDXAK6G.js +0 -44
- package/dist/chunk-ASDXAK6G.js.map +0 -1
- package/dist/chunk-CKZ4VSCB.mjs +0 -18
- package/dist/chunk-CKZ4VSCB.mjs.map +0 -1
- package/dist/chunk-DW6GOKMF.js +0 -57
- package/dist/chunk-DW6GOKMF.js.map +0 -1
- package/dist/chunk-EFZPSZWO.mjs +0 -1
- package/dist/chunk-EFZPSZWO.mjs.map +0 -1
- package/dist/chunk-FCEZDH42.mjs.map +0 -1
- package/dist/chunk-FYGXL4V7.js +0 -361
- package/dist/chunk-FYGXL4V7.js.map +0 -1
- package/dist/chunk-GKVPGKAH.js +0 -66
- package/dist/chunk-GKVPGKAH.js.map +0 -1
- package/dist/chunk-GWP6PNSP.js +0 -225
- package/dist/chunk-GWP6PNSP.js.map +0 -1
- package/dist/chunk-HQKTXE7E.mjs +0 -225
- package/dist/chunk-HQKTXE7E.mjs.map +0 -1
- package/dist/chunk-HSFLZUJN.mjs +0 -57
- package/dist/chunk-HSFLZUJN.mjs.map +0 -1
- package/dist/chunk-HU63F22V.js +0 -361
- package/dist/chunk-HU63F22V.js.map +0 -1
- package/dist/chunk-J5LGTIGS.mjs +0 -10
- package/dist/chunk-J5LGTIGS.mjs.map +0 -1
- package/dist/chunk-JMBD6DOP.js +0 -225
- package/dist/chunk-JMBD6DOP.js.map +0 -1
- package/dist/chunk-K7EIJSYQ.js +0 -1
- package/dist/chunk-K7EIJSYQ.js.map +0 -1
- package/dist/chunk-KXYLEUSW.mjs.map +0 -1
- package/dist/chunk-MTHKZO55.js +0 -44
- package/dist/chunk-MTHKZO55.js.map +0 -1
- package/dist/chunk-NNQFLD7O.mjs +0 -361
- package/dist/chunk-NNQFLD7O.mjs.map +0 -1
- package/dist/chunk-NU2UB242.js +0 -82
- package/dist/chunk-NU2UB242.js.map +0 -1
- package/dist/chunk-NULGSZFE.mjs +0 -57
- package/dist/chunk-NULGSZFE.mjs.map +0 -1
- package/dist/chunk-O42L6HOX.js.map +0 -1
- package/dist/chunk-ONXNE2A6.mjs +0 -375
- package/dist/chunk-ONXNE2A6.mjs.map +0 -1
- package/dist/chunk-OTBYRUBE.mjs +0 -225
- package/dist/chunk-OTBYRUBE.mjs.map +0 -1
- package/dist/chunk-OTSAVKLY.mjs +0 -66
- package/dist/chunk-OTSAVKLY.mjs.map +0 -1
- package/dist/chunk-PZ5AY32C.js +0 -10
- package/dist/chunk-PZ5AY32C.js.map +0 -1
- package/dist/chunk-QP2TMRLG.js +0 -57
- package/dist/chunk-QP2TMRLG.js.map +0 -1
- package/dist/chunk-RS23R3ZQ.mjs +0 -82
- package/dist/chunk-RS23R3ZQ.mjs.map +0 -1
- package/dist/chunk-STTOPUZ2.mjs.map +0 -1
- package/dist/chunk-VMT3LALB.mjs +0 -51
- package/dist/chunk-VMT3LALB.mjs.map +0 -1
- package/dist/chunk-VNNVLQLJ.mjs.map +0 -1
- package/dist/chunk-W3YRVEFQ.js +0 -66
- package/dist/chunk-W3YRVEFQ.js.map +0 -1
- package/dist/chunk-WF65EDRZ.js.map +0 -1
- package/dist/chunk-WMHVXEYQ.mjs +0 -66
- package/dist/chunk-WMHVXEYQ.mjs.map +0 -1
- package/dist/chunk-XVKTIYHY.js +0 -51
- package/dist/chunk-XVKTIYHY.js.map +0 -1
- package/dist/codegen-MRZDLCYI.js +0 -13
- package/dist/codegen-MRZDLCYI.js.map +0 -1
- package/dist/codegen-UI5HTMXE.mjs +0 -13
- package/dist/codegen-UI5HTMXE.mjs.map +0 -1
- package/dist/dev-server-JKRVBWPY.mjs +0 -13
- package/dist/dev-server-JKRVBWPY.mjs.map +0 -1
- package/dist/dev-server-TLL7UQMR.js +0 -13
- package/dist/dev-server-TLL7UQMR.js.map +0 -1
- package/dist/index-BsNaOUtH.d.mts +0 -44
- package/dist/index-BsNaOUtH.d.ts +0 -44
- package/dist/index-CrbXnXsO.d.ts +0 -62
- package/dist/index-kEbGExWM.d.mts +0 -62
- package/templates/nestjs-api/.env +0 -4
- package/templates/nestjs-api/package-lock.json +0 -5623
- package/templates/nextjs-web/.env +0 -1
- package/templates/nextjs-web/package-lock.json +0 -3254
package/dist/index.mjs
CHANGED
|
@@ -1,28 +1,41 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
dev_server_exports
|
|
3
|
+
} from "./chunk-YN6WIWNQ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
FusionFetcher,
|
|
6
|
+
createWextsRpcClient
|
|
7
|
+
} from "./chunk-7SSCNCTW.mjs";
|
|
4
8
|
import {
|
|
5
9
|
nest_exports
|
|
6
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UAL54DVV.mjs";
|
|
11
|
+
import {
|
|
12
|
+
rpc_exports
|
|
13
|
+
} from "./chunk-ZX7QIN24.mjs";
|
|
14
|
+
import "./chunk-YBM3IJEA.mjs";
|
|
7
15
|
import "./chunk-YSLEF5C5.mjs";
|
|
8
16
|
import {
|
|
9
17
|
FileSystem,
|
|
10
18
|
codegen_exports,
|
|
11
19
|
filesystem
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import {
|
|
14
|
-
dev_server_exports
|
|
15
|
-
} from "./chunk-KXYLEUSW.mjs";
|
|
20
|
+
} from "./chunk-342VRT25.mjs";
|
|
16
21
|
import {
|
|
17
22
|
LogLevel,
|
|
18
23
|
Logger,
|
|
19
24
|
createLogger,
|
|
20
25
|
logger
|
|
21
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-JHOVXH3X.mjs";
|
|
27
|
+
import {
|
|
28
|
+
WextsCodegenError,
|
|
29
|
+
WextsError,
|
|
30
|
+
WextsRpcError,
|
|
31
|
+
WextsRuntimeError,
|
|
32
|
+
WextsSecurityError,
|
|
33
|
+
formatWextsError
|
|
34
|
+
} from "./chunk-7TLSPR65.mjs";
|
|
22
35
|
import {
|
|
23
36
|
__export,
|
|
24
37
|
__name
|
|
25
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-7WULUGLH.mjs";
|
|
26
39
|
|
|
27
40
|
// src/core/index.ts
|
|
28
41
|
var core_exports = {};
|
|
@@ -242,7 +255,7 @@ var ProjectScaffolder = class {
|
|
|
242
255
|
logger.info(`
|
|
243
256
|
Next steps:`);
|
|
244
257
|
logger.info(` cd ${projectName}`);
|
|
245
|
-
logger.info(`
|
|
258
|
+
logger.info(` wexts dev`);
|
|
246
259
|
}
|
|
247
260
|
async createMonorepo(projectPath, projectName) {
|
|
248
261
|
await mkdir(join2(projectPath, "apps", "api"), {
|
|
@@ -266,31 +279,39 @@ Next steps:`);
|
|
|
266
279
|
"packages/*"
|
|
267
280
|
],
|
|
268
281
|
scripts: {
|
|
269
|
-
dev: "
|
|
270
|
-
build: "
|
|
282
|
+
dev: "wexts dev",
|
|
283
|
+
build: "wexts build"
|
|
271
284
|
},
|
|
272
285
|
devDependencies: {
|
|
273
|
-
"wexts": "^
|
|
286
|
+
"wexts": "^4.0.0"
|
|
274
287
|
}
|
|
275
288
|
};
|
|
276
289
|
await writeFile(join2(projectPath, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
277
290
|
const readme = `# ${projectName}
|
|
278
291
|
|
|
279
|
-
Created with
|
|
292
|
+
Created with the deprecated ProjectScaffolder compatibility API.
|
|
293
|
+
|
|
294
|
+
Use examples/hello-rpc as the canonical Wexts reference.
|
|
280
295
|
|
|
281
296
|
## Getting Started
|
|
282
297
|
|
|
283
298
|
\`\`\`bash
|
|
284
|
-
|
|
299
|
+
wexts dev
|
|
285
300
|
\`\`\`
|
|
286
301
|
`;
|
|
287
302
|
await writeFile(join2(projectPath, "README.md"), readme);
|
|
288
303
|
}
|
|
289
304
|
async createNestJSApp(projectPath, projectName) {
|
|
290
|
-
|
|
305
|
+
await writeFile(join2(projectPath, "README.md"), `# ${projectName}
|
|
306
|
+
|
|
307
|
+
Standalone API scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.
|
|
308
|
+
`);
|
|
291
309
|
}
|
|
292
310
|
async createNextJSApp(projectPath, projectName) {
|
|
293
|
-
|
|
311
|
+
await writeFile(join2(projectPath, "README.md"), `# ${projectName}
|
|
312
|
+
|
|
313
|
+
Standalone web scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.
|
|
314
|
+
`);
|
|
294
315
|
}
|
|
295
316
|
};
|
|
296
317
|
|
|
@@ -299,19 +320,27 @@ var next_exports = {};
|
|
|
299
320
|
__export(next_exports, {
|
|
300
321
|
FusionProvider: () => FusionProvider,
|
|
301
322
|
useAuth: () => useAuth,
|
|
302
|
-
useFusion: () => useFusion
|
|
323
|
+
useFusion: () => useFusion,
|
|
324
|
+
useWexts: () => useWexts
|
|
303
325
|
});
|
|
304
326
|
|
|
305
327
|
// src/next/provider.tsx
|
|
306
328
|
import React, { createContext, useContext } from "react";
|
|
307
329
|
var FusionContext = /* @__PURE__ */ createContext(null);
|
|
308
|
-
function FusionProvider({ children, baseUrl = "/api" }) {
|
|
330
|
+
function FusionProvider({ children, baseUrl = "/api", rpcBaseUrl = "/rpc", rpcClient }) {
|
|
309
331
|
const client = React.useMemo(() => new FusionFetcher(baseUrl), [
|
|
310
332
|
baseUrl
|
|
311
333
|
]);
|
|
334
|
+
const wexts = React.useMemo(() => rpcClient ?? createWextsRpcClient(void 0, {
|
|
335
|
+
baseUrl: rpcBaseUrl
|
|
336
|
+
}), [
|
|
337
|
+
rpcBaseUrl,
|
|
338
|
+
rpcClient
|
|
339
|
+
]);
|
|
312
340
|
return /* @__PURE__ */ React.createElement(FusionContext.Provider, {
|
|
313
341
|
value: {
|
|
314
|
-
client
|
|
342
|
+
client,
|
|
343
|
+
wexts
|
|
315
344
|
}
|
|
316
345
|
}, children);
|
|
317
346
|
}
|
|
@@ -324,6 +353,11 @@ function useFusion() {
|
|
|
324
353
|
return context;
|
|
325
354
|
}
|
|
326
355
|
__name(useFusion, "useFusion");
|
|
356
|
+
function useWexts() {
|
|
357
|
+
const context = useFusion();
|
|
358
|
+
return context.wexts;
|
|
359
|
+
}
|
|
360
|
+
__name(useWexts, "useWexts");
|
|
327
361
|
|
|
328
362
|
// src/next/useAuth.ts
|
|
329
363
|
import { useState, useEffect } from "react";
|
|
@@ -378,6 +412,13 @@ export {
|
|
|
378
412
|
dev_server_exports as DevServer,
|
|
379
413
|
insight_exports as Insight,
|
|
380
414
|
nest_exports as Nest,
|
|
381
|
-
next_exports as Next
|
|
415
|
+
next_exports as Next,
|
|
416
|
+
rpc_exports as Rpc,
|
|
417
|
+
WextsCodegenError,
|
|
418
|
+
WextsError,
|
|
419
|
+
WextsRpcError,
|
|
420
|
+
WextsRuntimeError,
|
|
421
|
+
WextsSecurityError,
|
|
422
|
+
formatWextsError
|
|
382
423
|
};
|
|
383
424
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/index.ts","../src/core/config.ts","../src/core/process-manager.ts","../src/core/errors.ts","../src/config/index.ts","../src/config/loader.ts","../src/insight/index.ts","../src/insight/server.ts","../src/create-fusion/index.ts","../src/create-fusion/scaffold.ts","../src/next/index.ts","../src/next/provider.tsx","../src/next/useAuth.ts"],"sourcesContent":["// Core exports placeholder\r\nexport * from './config';\r\nexport * from './logger';\r\nexport * from './filesystem';\r\nexport * from './process-manager';\r\nexport * from './errors';\r\n","import * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nexport interface FusionConfig {\r\n [key: string]: any;\r\n}\r\n\r\nexport class ConfigLoader {\r\n private config: Map<string, any> = new Map();\r\n private configDir: string;\r\n\r\n constructor(configDir: string = process.cwd()) {\r\n this.configDir = configDir;\r\n }\r\n\r\n /**\r\n * Load configuration from file or environment\r\n */\r\n load(key: string, defaultValue?: any): any {\r\n if (this.config.has(key)) {\r\n return this.config.get(key);\r\n }\r\n\r\n // Try to load from environment variable\r\n const envKey = `FUSION_${key.toUpperCase()}`;\r\n if (process.env[envKey]) {\r\n const value = this.parseEnvValue(process.env[envKey]!);\r\n this.config.set(key, value);\r\n return value;\r\n }\r\n\r\n // Try to load from config file\r\n const configPath = path.join(this.configDir, 'fusion.config.json');\r\n if (fs.existsSync(configPath)) {\r\n try {\r\n const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));\r\n if (fileConfig[key] !== undefined) {\r\n this.config.set(key, fileConfig[key]);\r\n return fileConfig[key];\r\n }\r\n } catch (error) {\r\n // Silently fail and use default\r\n }\r\n }\r\n\r\n return defaultValue;\r\n }\r\n\r\n /**\r\n * Set configuration value\r\n */\r\n set(key: string, value: any): void {\r\n this.config.set(key, value);\r\n }\r\n\r\n /**\r\n * Get all configuration\r\n */\r\n getAll(): FusionConfig {\r\n return Object.fromEntries(this.config);\r\n }\r\n\r\n /**\r\n * Parse environment value (handles JSON strings)\r\n */\r\n private parseEnvValue(value: string): any {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n}\r\n\r\n// Export singleton instance\r\nexport const config = new ConfigLoader();\r\n\r\n// Helper function for backward compatibility\r\nexport function load(key: string, defaultValue?: any): any {\r\n return config.load(key, defaultValue);\r\n}\r\n","export class ProcessManager {\r\n /**\r\n * Setup process error handlers\r\n */\r\n static initialize(): void {\r\n process.on('uncaughtException', (error) => {\r\n console.error('[Fusion] Uncaught Exception:', error);\r\n process.exit(1);\r\n });\r\n\r\n process.on('unhandledRejection', (reason, promise) => {\r\n console.error('[Fusion] Unhandled Rejection at:', promise, 'reason:', reason);\r\n });\r\n\r\n process.on('SIGTERM', () => {\r\n console.log('[Fusion] SIGTERM received, shutting down gracefully');\r\n process.exit(0);\r\n });\r\n\r\n process.on('SIGINT', () => {\r\n console.log('[Fusion] SIGINT received, shutting down gracefully');\r\n process.exit(0);\r\n });\r\n }\r\n\r\n /**\r\n * Graceful shutdown helper\r\n */\r\n static async shutdown(cleanup: () => Promise<void>): Promise<void> {\r\n try {\r\n await cleanup();\r\n process.exit(0);\r\n } catch (error) {\r\n console.error('[Fusion] Error during shutdown:', error);\r\n process.exit(1);\r\n }\r\n }\r\n}\r\n","export class FusionError extends Error {\r\n constructor(message: string, public code?: string) {\r\n super(message);\r\n this.name = 'FusionError';\r\n }\r\n}\r\n\r\nexport class ConfigError extends FusionError {\r\n constructor(message: string) {\r\n super(message, 'CONFIG_ERROR');\r\n this.name = 'ConfigError';\r\n }\r\n}\r\n\r\nexport class ValidationError extends FusionError {\r\n constructor(message: string) {\r\n super(message, 'VALIDATION_ERROR');\r\n this.name = 'ValidationError';\r\n }\r\n}\r\n\r\nexport class APIError extends FusionError {\r\n constructor(message: string, public statusCode?: number) {\r\n super(message, 'API_ERROR');\r\n this.name = 'APIError';\r\n }\r\n}\r\n","// Config exports placeholder\r\nexport * from './loader';\r\n","export const loader = {\r\n load: () => ({}),\r\n};\r\n","// Insight exports placeholder\r\nexport * from './server';\r\n","export const server = {\r\n start: () => console.log('Insight server started'),\r\n};\r\n","export * from './scaffold';\r\n","import { mkdir, writeFile } from 'fs/promises';\r\nimport { join } from 'path';\r\nimport { logger } from '../core/logger';\r\n\r\nexport interface ScaffoldOptions {\r\n projectName: string;\r\n template: 'monorepo' | 'api' | 'web';\r\n packageManager?: 'npm' | 'pnpm' | 'yarn';\r\n}\r\n\r\nexport class ProjectScaffolder {\r\n async scaffold(options: ScaffoldOptions): Promise<void> {\r\n const { projectName, template } = options;\r\n const projectPath = join(process.cwd(), projectName);\r\n\r\n logger.info(`Creating project at: ${projectPath}`);\r\n\r\n // Create base directory\r\n await mkdir(projectPath, { recursive: true });\r\n\r\n if (template === 'monorepo') {\r\n await this.createMonorepo(projectPath, projectName);\r\n } else if (template === 'api') {\r\n await this.createNestJSApp(projectPath, projectName);\r\n } else if (template === 'web') {\r\n await this.createNextJSApp(projectPath, projectName);\r\n }\r\n\r\n logger.success(`Project ${projectName} created successfully!`);\r\n logger.info(`\\nNext steps:`);\r\n logger.info(` cd ${projectName}`);\r\n logger.info(` fusion dev`);\r\n }\r\n\r\n private async createMonorepo(projectPath: string, projectName: string): Promise<void> {\r\n // Create directory structure\r\n await mkdir(join(projectPath, 'apps', 'api'), { recursive: true });\r\n await mkdir(join(projectPath, 'apps', 'web'), { recursive: true });\r\n await mkdir(join(projectPath, 'packages', 'types'), { recursive: true });\r\n await mkdir(join(projectPath, 'packages', 'api-client'), { recursive: true });\r\n\r\n // Create root package.json\r\n const packageJson = {\r\n name: projectName,\r\n version: '0.0.1',\r\n private: true,\r\n workspaces: ['apps/*', 'packages/*'],\r\n scripts: {\r\n dev: 'fusion dev',\r\n build: 'fusion build',\r\n },\r\n devDependencies: {\r\n 'wexts': '^1.0.0',\r\n },\r\n };\r\n\r\n await writeFile(\r\n join(projectPath, 'package.json'),\r\n JSON.stringify(packageJson, null, 2)\r\n );\r\n\r\n // Create README\r\n const readme = `# ${projectName}\\n\\nCreated with wexts\\n\\n## Getting Started\\n\\n\\`\\`\\`bash\\nfusion dev\\n\\`\\`\\`\\n`;\r\n await writeFile(join(projectPath, 'README.md'), readme);\r\n }\r\n\r\n private async createNestJSApp(projectPath: string, projectName: string): Promise<void> {\r\n // TODO: Implement NestJS scaffolding\r\n logger.info('Creating NestJS application...');\r\n }\r\n\r\n private async createNextJSApp(projectPath: string, projectName: string): Promise<void> {\r\n // TODO: Implement Next.js scaffolding\r\n logger.info('Creating Next.js application...');\r\n }\r\n}\r\n","export * from './provider';\r\nexport * from './useAuth';\r\n","'use client';\r\n\r\nimport React, { createContext, useContext, ReactNode } from 'react';\r\nimport { FusionFetcher } from '../client/fetcher';\r\n\r\ninterface FusionContextType {\r\n client: FusionFetcher;\r\n}\r\n\r\nconst FusionContext = createContext<FusionContextType | null>(null);\r\n\r\nexport interface FusionProviderProps {\r\n children: ReactNode;\r\n baseUrl?: string;\r\n}\r\n\r\n/**\r\n * FusionProvider - Provides API client to React components\r\n * Usage:\r\n * ```tsx\r\n * <FusionProvider baseUrl=\"/api\">\r\n * <App />\r\n * </FusionProvider>\r\n * ```\r\n */\r\nexport function FusionProvider({ children, baseUrl = '/api' }: FusionProviderProps) {\r\n const client = React.useMemo(() => new FusionFetcher(baseUrl), [baseUrl]);\r\n\r\n return (\r\n <FusionContext.Provider value={{ client }}>\r\n {children}\r\n </FusionContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * useFusion hook - Access API client in components\r\n * Usage:\r\n * ```tsx\r\n * const { client } = useFusion();\r\n * const data = await client.get('/users');\r\n * ```\r\n */\r\nexport function useFusion(): FusionContextType {\r\n const context = useContext(FusionContext);\r\n if (!context) {\r\n throw new Error('useFusion must be used within FusionProvider');\r\n }\r\n return context;\r\n}\r\n","'use client';\r\n\r\nimport { useState, useEffect } from 'react';\r\nimport { useFusion } from './provider';\r\n\r\nexport interface AuthUser {\r\n id: string;\r\n email: string;\r\n name?: string;\r\n}\r\n\r\nexport interface UseAuthReturn {\r\n user: AuthUser | null;\r\n loading: boolean;\r\n login: (email: string, password: string) => Promise<void>;\r\n logout: () => Promise<void>;\r\n isAuthenticated: boolean;\r\n}\r\n\r\n/**\r\n * useAuth hook - Authentication state management\r\n * Usage:\r\n * ```tsx\r\n * const { user, login, logout, isAuthenticated } = useAuth();\r\n * ```\r\n */\r\nexport function useAuth(): UseAuthReturn {\r\n const { client } = useFusion();\r\n const [user, setUser] = useState<AuthUser | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n // Check for existing session\r\n const token = localStorage.getItem('fusion_token');\r\n if (token) {\r\n // Validate token and load user\r\n loadUser();\r\n } else {\r\n setLoading(false);\r\n }\r\n }, []);\r\n\r\n const loadUser = async () => {\r\n try {\r\n const userData = await client.get<AuthUser>('/auth/me');\r\n setUser(userData);\r\n } catch (error) {\r\n localStorage.removeItem('fusion_token');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const login = async (email: string, password: string) => {\r\n const response = await client.post<{ token: string; user: AuthUser }>('/auth/login', {\r\n email,\r\n password,\r\n });\r\n localStorage.setItem('fusion_token', response.token);\r\n setUser(response.user);\r\n };\r\n\r\n const logout = async () => {\r\n localStorage.removeItem('fusion_token');\r\n setUser(null);\r\n };\r\n\r\n return {\r\n user,\r\n loading,\r\n login,\r\n logout,\r\n isAuthenticated: !!user,\r\n };\r\n}\r\n"],"mappings":"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","names":["fs","path","ConfigLoader","config","Map","configDir","process","cwd","load","key","defaultValue","has","get","envKey","toUpperCase","env","value","parseEnvValue","set","configPath","join","existsSync","fileConfig","JSON","parse","readFileSync","undefined","error","getAll","Object","fromEntries","ProcessManager","initialize","process","on","error","console","exit","reason","promise","log","shutdown","cleanup","FusionError","Error","message","code","name","ConfigError","ValidationError","APIError","statusCode","loader","load","server","start","console","log","mkdir","writeFile","join","ProjectScaffolder","scaffold","options","projectName","template","projectPath","join","process","cwd","logger","info","mkdir","recursive","createMonorepo","createNestJSApp","createNextJSApp","success","packageJson","name","version","private","workspaces","scripts","dev","build","devDependencies","writeFile","JSON","stringify","readme","React","createContext","useContext","FusionContext","createContext","FusionProvider","children","baseUrl","client","React","useMemo","FusionFetcher","Provider","value","useFusion","context","useContext","Error","useState","useEffect","useAuth","client","useFusion","user","setUser","useState","loading","setLoading","useEffect","token","localStorage","getItem","loadUser","userData","get","error","removeItem","login","email","password","response","post","setItem","logout","isAuthenticated"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts","../src/core/config.ts","../src/core/process-manager.ts","../src/core/errors.ts","../src/config/index.ts","../src/config/loader.ts","../src/insight/index.ts","../src/insight/server.ts","../src/create-fusion/index.ts","../src/create-fusion/scaffold.ts","../src/next/index.ts","../src/next/provider.tsx","../src/next/useAuth.ts"],"sourcesContent":["// Core exports placeholder\nexport * from './config';\nexport * from './logger';\nexport * from './filesystem';\nexport * from './process-manager';\nexport * from './errors';\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface FusionConfig {\n [key: string]: any;\n}\n\nexport class ConfigLoader {\n private config: Map<string, any> = new Map();\n private configDir: string;\n\n constructor(configDir: string = process.cwd()) {\n this.configDir = configDir;\n }\n\n /**\n * Load configuration from file or environment\n */\n load(key: string, defaultValue?: any): any {\n if (this.config.has(key)) {\n return this.config.get(key);\n }\n\n // Try to load from environment variable\n const envKey = `FUSION_${key.toUpperCase()}`;\n if (process.env[envKey]) {\n const value = this.parseEnvValue(process.env[envKey]!);\n this.config.set(key, value);\n return value;\n }\n\n // Try to load from config file\n const configPath = path.join(this.configDir, 'fusion.config.json');\n if (fs.existsSync(configPath)) {\n try {\n const fileConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));\n if (fileConfig[key] !== undefined) {\n this.config.set(key, fileConfig[key]);\n return fileConfig[key];\n }\n } catch (error) {\n // Silently fail and use default\n }\n }\n\n return defaultValue;\n }\n\n /**\n * Set configuration value\n */\n set(key: string, value: any): void {\n this.config.set(key, value);\n }\n\n /**\n * Get all configuration\n */\n getAll(): FusionConfig {\n return Object.fromEntries(this.config);\n }\n\n /**\n * Parse environment value (handles JSON strings)\n */\n private parseEnvValue(value: string): any {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n}\n\n// Export singleton instance\nexport const config = new ConfigLoader();\n\n// Helper function for backward compatibility\nexport function load(key: string, defaultValue?: any): any {\n return config.load(key, defaultValue);\n}\n","export class ProcessManager {\n /**\n * Setup process error handlers\n */\n static initialize(): void {\n process.on('uncaughtException', (error) => {\n console.error('[Fusion] Uncaught Exception:', error);\n process.exit(1);\n });\n\n process.on('unhandledRejection', (reason, promise) => {\n console.error('[Fusion] Unhandled Rejection at:', promise, 'reason:', reason);\n });\n\n process.on('SIGTERM', () => {\n console.log('[Fusion] SIGTERM received, shutting down gracefully');\n process.exit(0);\n });\n\n process.on('SIGINT', () => {\n console.log('[Fusion] SIGINT received, shutting down gracefully');\n process.exit(0);\n });\n }\n\n /**\n * Graceful shutdown helper\n */\n static async shutdown(cleanup: () => Promise<void>): Promise<void> {\n try {\n await cleanup();\n process.exit(0);\n } catch (error) {\n console.error('[Fusion] Error during shutdown:', error);\n process.exit(1);\n }\n }\n}\n","export class FusionError extends Error {\n constructor(message: string, public code?: string) {\n super(message);\n this.name = 'FusionError';\n }\n}\n\nexport class ConfigError extends FusionError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'ConfigError';\n }\n}\n\nexport class ValidationError extends FusionError {\n constructor(message: string) {\n super(message, 'VALIDATION_ERROR');\n this.name = 'ValidationError';\n }\n}\n\nexport class APIError extends FusionError {\n constructor(message: string, public statusCode?: number) {\n super(message, 'API_ERROR');\n this.name = 'APIError';\n }\n}\n","// Config exports placeholder\nexport * from './loader';\n","export const loader = {\n load: () => ({}),\n};\n","// Insight exports placeholder\nexport * from './server';\n","export const server = {\n start: () => console.log('Insight server started'),\n};\n","export * from './scaffold';\n","import { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport { logger } from '../core/logger';\n\nexport interface ScaffoldOptions {\n projectName: string;\n template: 'monorepo' | 'api' | 'web';\n packageManager?: 'npm' | 'pnpm' | 'yarn';\n}\n\n/**\n * @deprecated Use the `wexts create` CLI and `examples/hello-rpc` canonical scaffold instead.\n */\nexport class ProjectScaffolder {\n async scaffold(options: ScaffoldOptions): Promise<void> {\n const { projectName, template } = options;\n const projectPath = join(process.cwd(), projectName);\n\n logger.info(`Creating project at: ${projectPath}`);\n\n // Create base directory\n await mkdir(projectPath, { recursive: true });\n\n if (template === 'monorepo') {\n await this.createMonorepo(projectPath, projectName);\n } else if (template === 'api') {\n await this.createNestJSApp(projectPath, projectName);\n } else if (template === 'web') {\n await this.createNextJSApp(projectPath, projectName);\n }\n\n logger.success(`Project ${projectName} created successfully!`);\n logger.info(`\\nNext steps:`);\n logger.info(` cd ${projectName}`);\n logger.info(` wexts dev`);\n }\n\n private async createMonorepo(projectPath: string, projectName: string): Promise<void> {\n // Create directory structure\n await mkdir(join(projectPath, 'apps', 'api'), { recursive: true });\n await mkdir(join(projectPath, 'apps', 'web'), { recursive: true });\n await mkdir(join(projectPath, 'packages', 'types'), { recursive: true });\n await mkdir(join(projectPath, 'packages', 'api-client'), { recursive: true });\n\n // Create root package.json\n const packageJson = {\n name: projectName,\n version: '0.0.1',\n private: true,\n workspaces: ['apps/*', 'packages/*'],\n scripts: {\n dev: 'wexts dev',\n build: 'wexts build',\n },\n devDependencies: {\n 'wexts': '^4.0.0',\n },\n };\n\n await writeFile(\n join(projectPath, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n // Create README\n const readme = `# ${projectName}\\n\\nCreated with the deprecated ProjectScaffolder compatibility API.\\n\\nUse examples/hello-rpc as the canonical Wexts reference.\\n\\n## Getting Started\\n\\n\\`\\`\\`bash\\nwexts dev\\n\\`\\`\\`\\n`;\n await writeFile(join(projectPath, 'README.md'), readme);\n }\n\n private async createNestJSApp(projectPath: string, projectName: string): Promise<void> {\n await writeFile(\n join(projectPath, 'README.md'),\n `# ${projectName}\\n\\nStandalone API scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n );\n }\n\n private async createNextJSApp(projectPath: string, projectName: string): Promise<void> {\n await writeFile(\n join(projectPath, 'README.md'),\n `# ${projectName}\\n\\nStandalone web scaffolding through ProjectScaffolder is deprecated. Use examples/hello-rpc or wexts create for the canonical path.\\n`\n );\n }\n}\n","export * from './provider';\nexport * from './useAuth';\n","'use client';\n\nimport React, { createContext, useContext, ReactNode } from 'react';\nimport { createWextsRpcClient, FusionFetcher, WextsRpcClient } from '../client/fetcher';\n\ninterface FusionContextType {\n client: FusionFetcher;\n wexts: WextsRpcClient;\n}\n\nconst FusionContext = createContext<FusionContextType | null>(null);\n\nexport interface FusionProviderProps {\n children: ReactNode;\n baseUrl?: string;\n rpcBaseUrl?: string;\n rpcClient?: object;\n}\n\n/**\n * FusionProvider - Provides API client to React components\n * Usage:\n * ```tsx\n * <FusionProvider baseUrl=\"/api\">\n * <App />\n * </FusionProvider>\n * ```\n */\nexport function FusionProvider({ children, baseUrl = '/api', rpcBaseUrl = '/rpc', rpcClient }: FusionProviderProps) {\n const client = React.useMemo(() => new FusionFetcher(baseUrl), [baseUrl]);\n const wexts = React.useMemo(\n () => (rpcClient as WextsRpcClient | undefined) ?? createWextsRpcClient(undefined, { baseUrl: rpcBaseUrl }),\n [rpcBaseUrl, rpcClient]\n );\n\n return (\n <FusionContext.Provider value={{ client, wexts }}>\n {children}\n </FusionContext.Provider>\n );\n}\n\n/**\n * useFusion hook - Access API client in components\n * Usage:\n * ```tsx\n * const { client } = useFusion();\n * const data = await client.get('/users');\n * ```\n */\nexport function useFusion(): FusionContextType {\n const context = useContext(FusionContext);\n if (!context) {\n throw new Error('useFusion must be used within FusionProvider');\n }\n return context;\n}\n\nexport function useWexts<TClient = WextsRpcClient>(): TClient {\n const context = useFusion();\n return context.wexts as TClient;\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { useFusion } from './provider';\n\nexport interface AuthUser {\n id: string;\n email: string;\n name?: string;\n}\n\nexport interface UseAuthReturn {\n user: AuthUser | null;\n loading: boolean;\n login: (email: string, password: string) => Promise<void>;\n logout: () => Promise<void>;\n isAuthenticated: boolean;\n}\n\n/**\n * useAuth hook - Authentication state management\n * Usage:\n * ```tsx\n * const { user, login, logout, isAuthenticated } = useAuth();\n * ```\n */\nexport function useAuth(): UseAuthReturn {\n const { client } = useFusion();\n const [user, setUser] = useState<AuthUser | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n // Check for existing session\n const token = localStorage.getItem('fusion_token');\n if (token) {\n // Validate token and load user\n loadUser();\n } else {\n setLoading(false);\n }\n }, []);\n\n const loadUser = async () => {\n try {\n const userData = await client.get<AuthUser>('/auth/me');\n setUser(userData);\n } catch (error) {\n localStorage.removeItem('fusion_token');\n } finally {\n setLoading(false);\n }\n };\n\n const login = async (email: string, password: string) => {\n const response = await client.post<{ token: string; user: AuthUser }>('/auth/login', {\n email,\n password,\n });\n localStorage.setItem('fusion_token', response.token);\n setUser(response.user);\n };\n\n const logout = async () => {\n localStorage.removeItem('fusion_token');\n setUser(null);\n };\n\n return {\n user,\n loading,\n login,\n logout,\n isAuthenticated: !!user,\n };\n}\n"],"mappings":"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","names":["fs","path","ConfigLoader","config","Map","configDir","process","cwd","load","key","defaultValue","has","get","envKey","toUpperCase","env","value","parseEnvValue","set","configPath","join","existsSync","fileConfig","JSON","parse","readFileSync","undefined","error","getAll","Object","fromEntries","ProcessManager","initialize","process","on","error","console","exit","reason","promise","log","shutdown","cleanup","FusionError","Error","message","code","name","ConfigError","ValidationError","APIError","statusCode","loader","load","server","start","console","log","mkdir","writeFile","join","ProjectScaffolder","scaffold","options","projectName","template","projectPath","join","process","cwd","logger","info","mkdir","recursive","createMonorepo","createNestJSApp","createNextJSApp","success","packageJson","name","version","private","workspaces","scripts","dev","build","devDependencies","writeFile","JSON","stringify","readme","React","createContext","useContext","FusionContext","createContext","FusionProvider","children","baseUrl","rpcBaseUrl","rpcClient","client","React","useMemo","FusionFetcher","wexts","createWextsRpcClient","undefined","Provider","value","useFusion","context","useContext","Error","useWexts","useState","useEffect","useAuth","client","useFusion","user","setUser","useState","loading","setLoading","useEffect","token","localStorage","getItem","loadUser","userData","get","error","removeItem","login","email","password","response","post","setItem","logout","isAuthenticated"]}
|
package/dist/nest/index.d.mts
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { F as FusionController, a as FusionDelete, b as FusionGet, c as FusionPost, d as FusionPut, e as FusionRoute, f as FusionRouteMetadata, g as getFusionMetadata } from '../index-D94W1__r.mjs';
|
|
2
|
+
export { R as RequireAuth, a as RpcMethod, b as RpcMethodOptions, c as RpcService, d as RpcServiceOptions, e as RuntimeRpcMethodMetadata, f as RuntimeRpcServiceMetadata, W as WextsRpc, g as WextsRpcService, h as getRpcAuthPolicy, i as getRuntimeRpcMethodsMetadata, j as getRuntimeRpcServiceMetadata } from '../decorators-BT1FFqN0.mjs';
|
|
3
|
+
import '../types-7d_fC-C3.mjs';
|
package/dist/nest/index.d.ts
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { F as FusionController, a as FusionDelete, b as FusionGet, c as FusionPost, d as FusionPut, e as FusionRoute, f as FusionRouteMetadata, g as getFusionMetadata } from '../index-Co5ZsLqq.js';
|
|
2
|
+
export { R as RequireAuth, a as RpcMethod, b as RpcMethodOptions, c as RpcService, d as RpcServiceOptions, e as RuntimeRpcMethodMetadata, f as RuntimeRpcServiceMetadata, W as WextsRpc, g as WextsRpcService, h as getRpcAuthPolicy, i as getRuntimeRpcMethodsMetadata, j as getRuntimeRpcServiceMetadata } from '../decorators-DvS58PqC.js';
|
|
3
|
+
import '../types-7d_fC-C3.js';
|
package/dist/nest/index.js
CHANGED
|
@@ -6,7 +6,17 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkBG56B4DEjs = require('../chunk-BG56B4DE.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
var _chunk7QKLIVRFjs = require('../chunk-7QKLIVRF.js');
|
|
10
20
|
require('../chunk-XE4OXN2W.js');
|
|
11
21
|
|
|
12
22
|
|
|
@@ -16,5 +26,13 @@ require('../chunk-XE4OXN2W.js');
|
|
|
16
26
|
|
|
17
27
|
|
|
18
28
|
|
|
19
|
-
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
exports.FusionController = _chunkBG56B4DEjs.FusionController; exports.FusionDelete = _chunkBG56B4DEjs.FusionDelete; exports.FusionGet = _chunkBG56B4DEjs.FusionGet; exports.FusionPost = _chunkBG56B4DEjs.FusionPost; exports.FusionPut = _chunkBG56B4DEjs.FusionPut; exports.FusionRoute = _chunkBG56B4DEjs.FusionRoute; exports.RequireAuth = _chunk7QKLIVRFjs.RequireAuth; exports.RpcMethod = _chunk7QKLIVRFjs.RpcMethod; exports.RpcService = _chunk7QKLIVRFjs.RpcService; exports.WextsRpc = _chunk7QKLIVRFjs.WextsRpc; exports.WextsRpcService = _chunk7QKLIVRFjs.WextsRpcService; exports.getFusionMetadata = _chunkBG56B4DEjs.getFusionMetadata; exports.getRpcAuthPolicy = _chunk7QKLIVRFjs.getRpcAuthPolicy; exports.getRuntimeRpcMethodsMetadata = _chunk7QKLIVRFjs.getRuntimeRpcMethodsMetadata; exports.getRuntimeRpcServiceMetadata = _chunk7QKLIVRFjs.getRuntimeRpcServiceMetadata;
|
|
20
38
|
//# sourceMappingURL=index.js.map
|
package/dist/nest/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["/Volumes/Projects/wexts/packages/dist/nest/index.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,m2BAAC","file":"/Volumes/Projects/wexts/packages/dist/nest/index.js"}
|
package/dist/nest/index.mjs
CHANGED
|
@@ -6,8 +6,18 @@ import {
|
|
|
6
6
|
FusionPut,
|
|
7
7
|
FusionRoute,
|
|
8
8
|
getFusionMetadata
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import
|
|
9
|
+
} from "../chunk-UAL54DVV.mjs";
|
|
10
|
+
import {
|
|
11
|
+
RequireAuth,
|
|
12
|
+
RpcMethod,
|
|
13
|
+
RpcService,
|
|
14
|
+
WextsRpc,
|
|
15
|
+
WextsRpcService,
|
|
16
|
+
getRpcAuthPolicy,
|
|
17
|
+
getRuntimeRpcMethodsMetadata,
|
|
18
|
+
getRuntimeRpcServiceMetadata
|
|
19
|
+
} from "../chunk-YBM3IJEA.mjs";
|
|
20
|
+
import "../chunk-7WULUGLH.mjs";
|
|
11
21
|
export {
|
|
12
22
|
FusionController,
|
|
13
23
|
FusionDelete,
|
|
@@ -15,6 +25,14 @@ export {
|
|
|
15
25
|
FusionPost,
|
|
16
26
|
FusionPut,
|
|
17
27
|
FusionRoute,
|
|
18
|
-
|
|
28
|
+
RequireAuth,
|
|
29
|
+
RpcMethod,
|
|
30
|
+
RpcService,
|
|
31
|
+
WextsRpc,
|
|
32
|
+
WextsRpcService,
|
|
33
|
+
getFusionMetadata,
|
|
34
|
+
getRpcAuthPolicy,
|
|
35
|
+
getRuntimeRpcMethodsMetadata,
|
|
36
|
+
getRuntimeRpcServiceMetadata
|
|
19
37
|
};
|
|
20
38
|
//# sourceMappingURL=index.mjs.map
|
package/dist/nest/index.mjs.map
CHANGED
|
File without changes
|
package/dist/next/index.d.mts
CHANGED
|
@@ -9,13 +9,17 @@ declare class FusionFetcher {
|
|
|
9
9
|
put<T>(path: string, body: any): Promise<T>;
|
|
10
10
|
delete<T>(path: string): Promise<T>;
|
|
11
11
|
}
|
|
12
|
+
type WextsRpcClient = Record<string, Record<string, (...args: unknown[]) => Promise<unknown>>>;
|
|
12
13
|
|
|
13
14
|
interface FusionContextType {
|
|
14
15
|
client: FusionFetcher;
|
|
16
|
+
wexts: WextsRpcClient;
|
|
15
17
|
}
|
|
16
18
|
interface FusionProviderProps {
|
|
17
19
|
children: ReactNode;
|
|
18
20
|
baseUrl?: string;
|
|
21
|
+
rpcBaseUrl?: string;
|
|
22
|
+
rpcClient?: object;
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
21
25
|
* FusionProvider - Provides API client to React components
|
|
@@ -26,7 +30,7 @@ interface FusionProviderProps {
|
|
|
26
30
|
* </FusionProvider>
|
|
27
31
|
* ```
|
|
28
32
|
*/
|
|
29
|
-
declare function FusionProvider({ children, baseUrl }: FusionProviderProps): React.JSX.Element;
|
|
33
|
+
declare function FusionProvider({ children, baseUrl, rpcBaseUrl, rpcClient }: FusionProviderProps): React.JSX.Element;
|
|
30
34
|
/**
|
|
31
35
|
* useFusion hook - Access API client in components
|
|
32
36
|
* Usage:
|
|
@@ -36,6 +40,7 @@ declare function FusionProvider({ children, baseUrl }: FusionProviderProps): Rea
|
|
|
36
40
|
* ```
|
|
37
41
|
*/
|
|
38
42
|
declare function useFusion(): FusionContextType;
|
|
43
|
+
declare function useWexts<TClient = WextsRpcClient>(): TClient;
|
|
39
44
|
|
|
40
45
|
interface AuthUser {
|
|
41
46
|
id: string;
|
|
@@ -58,4 +63,4 @@ interface UseAuthReturn {
|
|
|
58
63
|
*/
|
|
59
64
|
declare function useAuth(): UseAuthReturn;
|
|
60
65
|
|
|
61
|
-
export { type AuthUser, FusionProvider, type FusionProviderProps, type UseAuthReturn, useAuth, useFusion };
|
|
66
|
+
export { type AuthUser, FusionProvider, type FusionProviderProps, type UseAuthReturn, useAuth, useFusion, useWexts };
|
package/dist/next/index.d.ts
CHANGED
|
@@ -9,13 +9,17 @@ declare class FusionFetcher {
|
|
|
9
9
|
put<T>(path: string, body: any): Promise<T>;
|
|
10
10
|
delete<T>(path: string): Promise<T>;
|
|
11
11
|
}
|
|
12
|
+
type WextsRpcClient = Record<string, Record<string, (...args: unknown[]) => Promise<unknown>>>;
|
|
12
13
|
|
|
13
14
|
interface FusionContextType {
|
|
14
15
|
client: FusionFetcher;
|
|
16
|
+
wexts: WextsRpcClient;
|
|
15
17
|
}
|
|
16
18
|
interface FusionProviderProps {
|
|
17
19
|
children: ReactNode;
|
|
18
20
|
baseUrl?: string;
|
|
21
|
+
rpcBaseUrl?: string;
|
|
22
|
+
rpcClient?: object;
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
21
25
|
* FusionProvider - Provides API client to React components
|
|
@@ -26,7 +30,7 @@ interface FusionProviderProps {
|
|
|
26
30
|
* </FusionProvider>
|
|
27
31
|
* ```
|
|
28
32
|
*/
|
|
29
|
-
declare function FusionProvider({ children, baseUrl }: FusionProviderProps): React.JSX.Element;
|
|
33
|
+
declare function FusionProvider({ children, baseUrl, rpcBaseUrl, rpcClient }: FusionProviderProps): React.JSX.Element;
|
|
30
34
|
/**
|
|
31
35
|
* useFusion hook - Access API client in components
|
|
32
36
|
* Usage:
|
|
@@ -36,6 +40,7 @@ declare function FusionProvider({ children, baseUrl }: FusionProviderProps): Rea
|
|
|
36
40
|
* ```
|
|
37
41
|
*/
|
|
38
42
|
declare function useFusion(): FusionContextType;
|
|
43
|
+
declare function useWexts<TClient = WextsRpcClient>(): TClient;
|
|
39
44
|
|
|
40
45
|
interface AuthUser {
|
|
41
46
|
id: string;
|
|
@@ -58,4 +63,4 @@ interface UseAuthReturn {
|
|
|
58
63
|
*/
|
|
59
64
|
declare function useAuth(): UseAuthReturn;
|
|
60
65
|
|
|
61
|
-
export { type AuthUser, FusionProvider, type FusionProviderProps, type UseAuthReturn, useAuth, useFusion };
|
|
66
|
+
export { type AuthUser, FusionProvider, type FusionProviderProps, type UseAuthReturn, useAuth, useFusion, useWexts };
|
package/dist/next/index.js
CHANGED
|
@@ -34,13 +34,48 @@ var next_exports = {};
|
|
|
34
34
|
__export(next_exports, {
|
|
35
35
|
FusionProvider: () => FusionProvider,
|
|
36
36
|
useAuth: () => useAuth,
|
|
37
|
-
useFusion: () => useFusion
|
|
37
|
+
useFusion: () => useFusion,
|
|
38
|
+
useWexts: () => useWexts
|
|
38
39
|
});
|
|
39
40
|
module.exports = __toCommonJS(next_exports);
|
|
40
41
|
|
|
41
42
|
// src/next/provider.tsx
|
|
42
43
|
var import_react = __toESM(require("react"));
|
|
43
44
|
|
|
45
|
+
// src/errors.ts
|
|
46
|
+
var WextsError = class extends Error {
|
|
47
|
+
static {
|
|
48
|
+
__name(this, "WextsError");
|
|
49
|
+
}
|
|
50
|
+
code;
|
|
51
|
+
suggestedFix;
|
|
52
|
+
docsSlug;
|
|
53
|
+
constructor(options) {
|
|
54
|
+
super(options.message, options.cause === void 0 ? void 0 : {
|
|
55
|
+
cause: options.cause
|
|
56
|
+
});
|
|
57
|
+
this.name = "WextsError";
|
|
58
|
+
this.code = options.code;
|
|
59
|
+
this.suggestedFix = options.suggestedFix;
|
|
60
|
+
this.docsSlug = options.docsSlug;
|
|
61
|
+
}
|
|
62
|
+
get docsUrl() {
|
|
63
|
+
return this.docsSlug ? `https://github.com/ziadmustafa1/wexts/blob/main/docs/${this.docsSlug}.md` : void 0;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var WextsRpcError = class extends WextsError {
|
|
67
|
+
static {
|
|
68
|
+
__name(this, "WextsRpcError");
|
|
69
|
+
}
|
|
70
|
+
constructor(options) {
|
|
71
|
+
super({
|
|
72
|
+
code: options.code ?? "WEXTS_RPC_ERROR",
|
|
73
|
+
...options
|
|
74
|
+
});
|
|
75
|
+
this.name = "WextsRpcError";
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
44
79
|
// src/client/fetcher.ts
|
|
45
80
|
var FusionFetcher = class {
|
|
46
81
|
static {
|
|
@@ -64,7 +99,15 @@ var FusionFetcher = class {
|
|
|
64
99
|
body: body ? JSON.stringify(body) : void 0
|
|
65
100
|
});
|
|
66
101
|
if (!response.ok) {
|
|
67
|
-
throw new
|
|
102
|
+
throw new WextsRpcError({
|
|
103
|
+
code: "WEXTS_API_REQUEST_FAILED",
|
|
104
|
+
message: `Fusion API Error: ${response.status} ${response.statusText}`,
|
|
105
|
+
suggestedFix: "Check the API route, server logs, and authentication headers.",
|
|
106
|
+
docsSlug: "troubleshooting"
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
if (response.status === 204) {
|
|
110
|
+
return void 0;
|
|
68
111
|
}
|
|
69
112
|
return response.json();
|
|
70
113
|
}
|
|
@@ -82,16 +125,97 @@ var FusionFetcher = class {
|
|
|
82
125
|
}
|
|
83
126
|
};
|
|
84
127
|
var apiFetcher = new FusionFetcher();
|
|
128
|
+
function createWextsRpcClient(manifest, options = {}) {
|
|
129
|
+
const hasManifest = Boolean(manifest);
|
|
130
|
+
const services = new Set((manifest?.services ?? []).map((service) => service.name));
|
|
131
|
+
const methodMap = /* @__PURE__ */ new Map();
|
|
132
|
+
for (const service of manifest?.services ?? []) {
|
|
133
|
+
methodMap.set(service.name, new Set(service.methods.map((method) => method.name)));
|
|
134
|
+
}
|
|
135
|
+
const createServiceProxy = /* @__PURE__ */ __name((serviceName) => new Proxy({}, {
|
|
136
|
+
get(_target, methodName) {
|
|
137
|
+
if (typeof methodName !== "string") return void 0;
|
|
138
|
+
if (methodName === "then") return void 0;
|
|
139
|
+
const knownMethods = methodMap.get(serviceName);
|
|
140
|
+
if (knownMethods && !knownMethods.has(methodName)) {
|
|
141
|
+
throw new WextsRpcError({
|
|
142
|
+
code: "WEXTS_RPC_METHOD_NOT_FOUND",
|
|
143
|
+
message: `Wexts RPC method not found: ${serviceName}.${methodName}`,
|
|
144
|
+
suggestedFix: "Run `wexts generate` and verify the method is decorated with @RpcMethod().",
|
|
145
|
+
docsSlug: "rpc"
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return (...args) => invokeRpc(serviceName, methodName, args, options);
|
|
149
|
+
}
|
|
150
|
+
}), "createServiceProxy");
|
|
151
|
+
return new Proxy({}, {
|
|
152
|
+
get(_target, serviceName) {
|
|
153
|
+
if (typeof serviceName !== "string") return void 0;
|
|
154
|
+
if (serviceName === "then") return void 0;
|
|
155
|
+
if (!hasManifest) {
|
|
156
|
+
throw new WextsRpcError({
|
|
157
|
+
code: "WEXTS_RPC_MANIFEST_MISSING",
|
|
158
|
+
message: "Wexts RPC manifest is missing.",
|
|
159
|
+
suggestedFix: "Run `wexts generate` and import the generated client/provider instead of creating an empty client.",
|
|
160
|
+
docsSlug: "codegen"
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
if (!services.has(serviceName)) {
|
|
164
|
+
throw new WextsRpcError({
|
|
165
|
+
code: "WEXTS_RPC_SERVICE_NOT_FOUND",
|
|
166
|
+
message: `Wexts RPC service not found: ${serviceName}`,
|
|
167
|
+
suggestedFix: "Run `wexts generate` and verify the service is decorated with @RpcService().",
|
|
168
|
+
docsSlug: "rpc"
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return createServiceProxy(serviceName);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
__name(createWextsRpcClient, "createWextsRpcClient");
|
|
176
|
+
async function invokeRpc(serviceName, methodName, args, options) {
|
|
177
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
178
|
+
const baseUrl = options.baseUrl ?? "/rpc";
|
|
179
|
+
const headers = {
|
|
180
|
+
"Content-Type": "application/json",
|
|
181
|
+
...await options.getHeaders?.() ?? {}
|
|
182
|
+
};
|
|
183
|
+
const response = await fetchImpl(`${baseUrl}/${encodeURIComponent(serviceName)}/${encodeURIComponent(methodName)}`, {
|
|
184
|
+
method: "POST",
|
|
185
|
+
headers,
|
|
186
|
+
body: JSON.stringify({
|
|
187
|
+
args
|
|
188
|
+
})
|
|
189
|
+
});
|
|
190
|
+
if (!response.ok) {
|
|
191
|
+
throw new WextsRpcError({
|
|
192
|
+
code: "WEXTS_RPC_REQUEST_FAILED",
|
|
193
|
+
message: `Wexts RPC Error: ${response.status} ${response.statusText}`,
|
|
194
|
+
suggestedFix: "Check the RPC route, service policy, and server logs.",
|
|
195
|
+
docsSlug: "troubleshooting"
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
const payload = await response.json();
|
|
199
|
+
return payload.data;
|
|
200
|
+
}
|
|
201
|
+
__name(invokeRpc, "invokeRpc");
|
|
85
202
|
|
|
86
203
|
// src/next/provider.tsx
|
|
87
204
|
var FusionContext = /* @__PURE__ */ (0, import_react.createContext)(null);
|
|
88
|
-
function FusionProvider({ children, baseUrl = "/api" }) {
|
|
205
|
+
function FusionProvider({ children, baseUrl = "/api", rpcBaseUrl = "/rpc", rpcClient }) {
|
|
89
206
|
const client = import_react.default.useMemo(() => new FusionFetcher(baseUrl), [
|
|
90
207
|
baseUrl
|
|
91
208
|
]);
|
|
209
|
+
const wexts = import_react.default.useMemo(() => rpcClient ?? createWextsRpcClient(void 0, {
|
|
210
|
+
baseUrl: rpcBaseUrl
|
|
211
|
+
}), [
|
|
212
|
+
rpcBaseUrl,
|
|
213
|
+
rpcClient
|
|
214
|
+
]);
|
|
92
215
|
return /* @__PURE__ */ import_react.default.createElement(FusionContext.Provider, {
|
|
93
216
|
value: {
|
|
94
|
-
client
|
|
217
|
+
client,
|
|
218
|
+
wexts
|
|
95
219
|
}
|
|
96
220
|
}, children);
|
|
97
221
|
}
|
|
@@ -104,6 +228,11 @@ function useFusion() {
|
|
|
104
228
|
return context;
|
|
105
229
|
}
|
|
106
230
|
__name(useFusion, "useFusion");
|
|
231
|
+
function useWexts() {
|
|
232
|
+
const context = useFusion();
|
|
233
|
+
return context.wexts;
|
|
234
|
+
}
|
|
235
|
+
__name(useWexts, "useWexts");
|
|
107
236
|
|
|
108
237
|
// src/next/useAuth.ts
|
|
109
238
|
var import_react2 = require("react");
|
|
@@ -154,6 +283,7 @@ __name(useAuth, "useAuth");
|
|
|
154
283
|
0 && (module.exports = {
|
|
155
284
|
FusionProvider,
|
|
156
285
|
useAuth,
|
|
157
|
-
useFusion
|
|
286
|
+
useFusion,
|
|
287
|
+
useWexts
|
|
158
288
|
});
|
|
159
289
|
//# sourceMappingURL=index.js.map
|