@orizm/cli 2.2.7 → 3.0.1
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 +111 -4
- package/dist/array-update-CMFUoQEe.mjs +41 -0
- package/dist/array-update-CMFUoQEe.mjs.map +1 -0
- package/dist/array-update-Dch4e9tI.cjs +58 -0
- package/dist/array-update-Dch4e9tI.cjs.map +1 -0
- package/dist/auth-BGW072BP.mjs +18 -0
- package/dist/auth-BGW072BP.mjs.map +1 -0
- package/dist/auth-CNbONZuf.cjs +18 -0
- package/dist/auth-CNbONZuf.cjs.map +1 -0
- package/dist/bucket-DqW-WEYb.mjs +17 -0
- package/dist/bucket-DqW-WEYb.mjs.map +1 -0
- package/dist/bucket-mg5QQORh.cjs +17 -0
- package/dist/bucket-mg5QQORh.cjs.map +1 -0
- package/dist/cli/main.cjs +231 -0
- package/dist/cli/main.cjs.map +1 -0
- package/dist/cli/main.d.cts +1 -0
- package/dist/cli/main.d.mts +1 -0
- package/dist/cli/main.mjs +196 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cms-BJnovGYT.mjs +172 -0
- package/dist/cms-BJnovGYT.mjs.map +1 -0
- package/dist/cms-Cnx-lDGu.cjs +172 -0
- package/dist/cms-Cnx-lDGu.cjs.map +1 -0
- package/dist/codegen-BF5b-u46.cjs +17 -0
- package/dist/codegen-BF5b-u46.cjs.map +1 -0
- package/dist/codegen-DZOB4ttR.mjs +17 -0
- package/dist/codegen-DZOB4ttR.mjs.map +1 -0
- package/dist/config/index.cjs +49 -96
- package/dist/config/index.cjs.map +1 -1
- package/dist/config/index.d.cts +1 -53
- package/dist/config/{index.d.ts → index.d.mts} +29 -28
- package/dist/config/index.d.mts.map +1 -0
- package/dist/config/index.mjs +59 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/config-loader-BEgS869e.mjs +65 -0
- package/dist/config-loader-BEgS869e.mjs.map +1 -0
- package/dist/config-loader-D8x32gEU.cjs +78 -0
- package/dist/config-loader-D8x32gEU.cjs.map +1 -0
- package/dist/confirm-delete-B9o73U7B.cjs +19 -0
- package/dist/confirm-delete-B9o73U7B.cjs.map +1 -0
- package/dist/confirm-delete-CsWkW69-.mjs +14 -0
- package/dist/confirm-delete-CsWkW69-.mjs.map +1 -0
- package/dist/consumer-C4WiGHWG.mjs +18 -0
- package/dist/consumer-C4WiGHWG.mjs.map +1 -0
- package/dist/consumer-OF6Z_eTP.cjs +95 -0
- package/dist/consumer-OF6Z_eTP.cjs.map +1 -0
- package/dist/consumer-l-8wUK8E.cjs +18 -0
- package/dist/consumer-l-8wUK8E.cjs.map +1 -0
- package/dist/consumer-pU2HyiyA.mjs +95 -0
- package/dist/consumer-pU2HyiyA.mjs.map +1 -0
- package/dist/content-BOb6NC8M.mjs +20 -0
- package/dist/content-BOb6NC8M.mjs.map +1 -0
- package/dist/content-DMjSwor1.cjs +20 -0
- package/dist/content-DMjSwor1.cjs.map +1 -0
- package/dist/create-B-PAOor6.mjs +66 -0
- package/dist/create-B-PAOor6.mjs.map +1 -0
- package/dist/create-B1ZBOqcV.mjs +58 -0
- package/dist/create-B1ZBOqcV.mjs.map +1 -0
- package/dist/create-BNYWcyuQ.cjs +66 -0
- package/dist/create-BNYWcyuQ.cjs.map +1 -0
- package/dist/create-Belwettw.mjs +54 -0
- package/dist/create-Belwettw.mjs.map +1 -0
- package/dist/create-BvERyMKa.cjs +81 -0
- package/dist/create-BvERyMKa.cjs.map +1 -0
- package/dist/create-CC814ixh.mjs +66 -0
- package/dist/create-CC814ixh.mjs.map +1 -0
- package/dist/create-CmOriwGo.cjs +58 -0
- package/dist/create-CmOriwGo.cjs.map +1 -0
- package/dist/create-DJY71sp9.cjs +54 -0
- package/dist/create-DJY71sp9.cjs.map +1 -0
- package/dist/create-Dups0gV2.mjs +81 -0
- package/dist/create-Dups0gV2.mjs.map +1 -0
- package/dist/create-Z-z3LXNW.cjs +66 -0
- package/dist/create-Z-z3LXNW.cjs.map +1 -0
- package/dist/delete-8yZ3j0vX.cjs +59 -0
- package/dist/delete-8yZ3j0vX.cjs.map +1 -0
- package/dist/delete-BOUObrDw.mjs +48 -0
- package/dist/delete-BOUObrDw.mjs.map +1 -0
- package/dist/delete-BSLIXrAh.mjs +59 -0
- package/dist/delete-BSLIXrAh.mjs.map +1 -0
- package/dist/delete-CCTiCYIL.cjs +51 -0
- package/dist/delete-CCTiCYIL.cjs.map +1 -0
- package/dist/delete-CIYY59v_.cjs +48 -0
- package/dist/delete-CIYY59v_.cjs.map +1 -0
- package/dist/delete-CSs5Czlo.mjs +59 -0
- package/dist/delete-CSs5Czlo.mjs.map +1 -0
- package/dist/delete-D4r1ve4v.cjs +56 -0
- package/dist/delete-D4r1ve4v.cjs.map +1 -0
- package/dist/delete-DVrafka1.cjs +56 -0
- package/dist/delete-DVrafka1.cjs.map +1 -0
- package/dist/delete-DhSU-Lx2.mjs +51 -0
- package/dist/delete-DhSU-Lx2.mjs.map +1 -0
- package/dist/delete-DozSxZQ7.cjs +59 -0
- package/dist/delete-DozSxZQ7.cjs.map +1 -0
- package/dist/delete-WpMIIvjj.cjs +56 -0
- package/dist/delete-WpMIIvjj.cjs.map +1 -0
- package/dist/delete-XWJRhBFs.mjs +56 -0
- package/dist/delete-XWJRhBFs.mjs.map +1 -0
- package/dist/delete-YYh_0khQ.mjs +56 -0
- package/dist/delete-YYh_0khQ.mjs.map +1 -0
- package/dist/delete-ZIifaG0i.mjs +56 -0
- package/dist/delete-ZIifaG0i.mjs.map +1 -0
- package/dist/detail-8CXNIhKw.cjs +16 -0
- package/dist/detail-8CXNIhKw.cjs.map +1 -0
- package/dist/detail-DN5jCQ4N.mjs +10 -0
- package/dist/detail-DN5jCQ4N.mjs.map +1 -0
- package/dist/download-oFGzg30E.mjs +68 -0
- package/dist/download-oFGzg30E.mjs.map +1 -0
- package/dist/download-ogGbb3FU.cjs +68 -0
- package/dist/download-ogGbb3FU.cjs.map +1 -0
- package/dist/erd-lKC5NB2l.cjs +124 -0
- package/dist/erd-lKC5NB2l.cjs.map +1 -0
- package/dist/erd-zDoF6I_y.mjs +123 -0
- package/dist/erd-zDoF6I_y.mjs.map +1 -0
- package/dist/get-BBOKSXkh.cjs +48 -0
- package/dist/get-BBOKSXkh.cjs.map +1 -0
- package/dist/get-BiPEF_m-.cjs +57 -0
- package/dist/get-BiPEF_m-.cjs.map +1 -0
- package/dist/get-C7dKoSIc.mjs +47 -0
- package/dist/get-C7dKoSIc.mjs.map +1 -0
- package/dist/get-CgEgETQa.mjs +52 -0
- package/dist/get-CgEgETQa.mjs.map +1 -0
- package/dist/get-DB80UNSR.mjs +47 -0
- package/dist/get-DB80UNSR.mjs.map +1 -0
- package/dist/get-DBxhbN1G.mjs +57 -0
- package/dist/get-DBxhbN1G.mjs.map +1 -0
- package/dist/get-DDB89cOs.mjs +48 -0
- package/dist/get-DDB89cOs.mjs.map +1 -0
- package/dist/get-DjRyK0hJ.cjs +47 -0
- package/dist/get-DjRyK0hJ.cjs.map +1 -0
- package/dist/get-IOU__2RP.cjs +52 -0
- package/dist/get-IOU__2RP.cjs.map +1 -0
- package/dist/get-KdWfYINc.cjs +47 -0
- package/dist/get-KdWfYINc.cjs.map +1 -0
- package/dist/get-RpxdnCKR.mjs +56 -0
- package/dist/get-RpxdnCKR.mjs.map +1 -0
- package/dist/get-jwXRlIBJ.cjs +57 -0
- package/dist/get-jwXRlIBJ.cjs.map +1 -0
- package/dist/group-roles-BIH7q8tf.mjs +36 -0
- package/dist/group-roles-BIH7q8tf.mjs.map +1 -0
- package/dist/group-roles-B_iAZog-.cjs +59 -0
- package/dist/group-roles-B_iAZog-.cjs.map +1 -0
- package/dist/invite-D66DSMvq.mjs +66 -0
- package/dist/invite-D66DSMvq.mjs.map +1 -0
- package/dist/invite-DPygtCoO.cjs +66 -0
- package/dist/invite-DPygtCoO.cjs.map +1 -0
- package/dist/key-C71Ffll9.mjs +17 -0
- package/dist/key-C71Ffll9.mjs.map +1 -0
- package/dist/key-DQr7qRL2.cjs +17 -0
- package/dist/key-DQr7qRL2.cjs.map +1 -0
- package/dist/link-BluFyxEL.mjs +42 -0
- package/dist/link-BluFyxEL.mjs.map +1 -0
- package/dist/link-DYu1Vjlw.cjs +42 -0
- package/dist/link-DYu1Vjlw.cjs.map +1 -0
- package/dist/list-57TUfNFd.mjs +48 -0
- package/dist/list-57TUfNFd.mjs.map +1 -0
- package/dist/list-B0N4-Q-5.mjs +81 -0
- package/dist/list-B0N4-Q-5.mjs.map +1 -0
- package/dist/list-BHvURTWd.cjs +40 -0
- package/dist/list-BHvURTWd.cjs.map +1 -0
- package/dist/list-BRh59EqI.cjs +35 -0
- package/dist/list-BRh59EqI.cjs.map +1 -0
- package/dist/list-Br6Cmi9S.cjs +95 -0
- package/dist/list-Br6Cmi9S.cjs.map +1 -0
- package/dist/list-BsYYq9wT.mjs +40 -0
- package/dist/list-BsYYq9wT.mjs.map +1 -0
- package/dist/list-BwfpuhmJ.cjs +37 -0
- package/dist/list-BwfpuhmJ.cjs.map +1 -0
- package/dist/list-BzLraBnA.cjs +82 -0
- package/dist/list-BzLraBnA.cjs.map +1 -0
- package/dist/list-CFwW0G9f.cjs +49 -0
- package/dist/list-CFwW0G9f.cjs.map +1 -0
- package/dist/list-CU42ERNY.cjs +81 -0
- package/dist/list-CU42ERNY.cjs.map +1 -0
- package/dist/list-CbvEh7eA.mjs +35 -0
- package/dist/list-CbvEh7eA.mjs.map +1 -0
- package/dist/list-D0-QrWmn.cjs +51 -0
- package/dist/list-D0-QrWmn.cjs.map +1 -0
- package/dist/list-D5PSDMWw.mjs +51 -0
- package/dist/list-D5PSDMWw.mjs.map +1 -0
- package/dist/list-DexBclfb.cjs +72 -0
- package/dist/list-DexBclfb.cjs.map +1 -0
- package/dist/list-DlJssPwy.cjs +48 -0
- package/dist/list-DlJssPwy.cjs.map +1 -0
- package/dist/list-DrZYlidZ.mjs +72 -0
- package/dist/list-DrZYlidZ.mjs.map +1 -0
- package/dist/list-ocfd7631.mjs +49 -0
- package/dist/list-ocfd7631.mjs.map +1 -0
- package/dist/list-rAn3uOA7.mjs +37 -0
- package/dist/list-rAn3uOA7.mjs.map +1 -0
- package/dist/list-sQk00GV5.mjs +95 -0
- package/dist/list-sQk00GV5.mjs.map +1 -0
- package/dist/list-vbMaOiza.mjs +82 -0
- package/dist/list-vbMaOiza.mjs.map +1 -0
- package/dist/login-2XcHd4wn.cjs +212 -0
- package/dist/login-2XcHd4wn.cjs.map +1 -0
- package/dist/login-FE_dbWMo.mjs +211 -0
- package/dist/login-FE_dbWMo.mjs.map +1 -0
- package/dist/logout-BDbWrGBm.mjs +35 -0
- package/dist/logout-BDbWrGBm.mjs.map +1 -0
- package/dist/logout-DC5TMJ5_.cjs +35 -0
- package/dist/logout-DC5TMJ5_.cjs.map +1 -0
- package/dist/management-BGYcZB4c.cjs +19 -0
- package/dist/management-BGYcZB4c.cjs.map +1 -0
- package/dist/management-DDACMgbU.mjs +19 -0
- package/dist/management-DDACMgbU.mjs.map +1 -0
- package/dist/mask-B1qD73jb.mjs +22 -0
- package/dist/mask-B1qD73jb.mjs.map +1 -0
- package/dist/mask-CqYLib9p.cjs +40 -0
- package/dist/mask-CqYLib9p.cjs.map +1 -0
- package/dist/oauth-client-CdD0evAV.cjs +170 -0
- package/dist/oauth-client-CdD0evAV.cjs.map +1 -0
- package/dist/oauth-client-QHuDa4fW.mjs +139 -0
- package/dist/oauth-client-QHuDa4fW.mjs.map +1 -0
- package/dist/object-DVqidsEc.cjs +20 -0
- package/dist/object-DVqidsEc.cjs.map +1 -0
- package/dist/object-qdBdEghr.mjs +20 -0
- package/dist/object-qdBdEghr.mjs.map +1 -0
- package/dist/org-C4cVovOM.cjs +14 -0
- package/dist/org-C4cVovOM.cjs.map +1 -0
- package/dist/org-CPhTRTks.mjs +14 -0
- package/dist/org-CPhTRTks.mjs.map +1 -0
- package/dist/org-context-Bewx2NEW.cjs +30 -0
- package/dist/org-context-Bewx2NEW.cjs.map +1 -0
- package/dist/org-context-D0dwWC2M.mjs +25 -0
- package/dist/org-context-D0dwWC2M.mjs.map +1 -0
- package/dist/parse-C8oHgQXx.cjs +229 -0
- package/dist/parse-C8oHgQXx.cjs.map +1 -0
- package/dist/parse-DA0k5AHa.mjs +150 -0
- package/dist/parse-DA0k5AHa.mjs.map +1 -0
- package/dist/project-BX7zvWB1.cjs +20 -0
- package/dist/project-BX7zvWB1.cjs.map +1 -0
- package/dist/project-CaXD3QBs.mjs +20 -0
- package/dist/project-CaXD3QBs.mjs.map +1 -0
- package/dist/project-name-CEoM-OL4.cjs +18 -0
- package/dist/project-name-CEoM-OL4.cjs.map +1 -0
- package/dist/project-name-DNMejnzZ.mjs +12 -0
- package/dist/project-name-DNMejnzZ.mjs.map +1 -0
- package/dist/project-user-Cp7i6orv.mjs +20 -0
- package/dist/project-user-Cp7i6orv.mjs.map +1 -0
- package/dist/project-user-Dm0qR-sh.cjs +20 -0
- package/dist/project-user-Dm0qR-sh.cjs.map +1 -0
- package/dist/push-0u6PDz4E.cjs +166 -0
- package/dist/push-0u6PDz4E.cjs.map +1 -0
- package/dist/push-D7co0keA.mjs +166 -0
- package/dist/push-D7co0keA.mjs.map +1 -0
- package/dist/run-codegen-Ceeosw5x.cjs +272 -0
- package/dist/run-codegen-Ceeosw5x.cjs.map +1 -0
- package/dist/run-codegen-DgaFaIQ1.mjs +190 -0
- package/dist/run-codegen-DgaFaIQ1.mjs.map +1 -0
- package/dist/run-with-context-CVhmzAFZ.mjs +876 -0
- package/dist/run-with-context-CVhmzAFZ.mjs.map +1 -0
- package/dist/run-with-context-DJNnEigg.cjs +943 -0
- package/dist/run-with-context-DJNnEigg.cjs.map +1 -0
- package/dist/schema-B3iRqvYK.cjs +20 -0
- package/dist/schema-B3iRqvYK.cjs.map +1 -0
- package/dist/schema-exG250MU.mjs +20 -0
- package/dist/schema-exG250MU.mjs.map +1 -0
- package/dist/shared-CZZimGxc.mjs +35 -0
- package/dist/shared-CZZimGxc.mjs.map +1 -0
- package/dist/shared-DHRPzzKl.cjs +59 -0
- package/dist/shared-DHRPzzKl.cjs.map +1 -0
- package/dist/status-Dq_NJE71.cjs +49 -0
- package/dist/status-Dq_NJE71.cjs.map +1 -0
- package/dist/status-fWqXzV0P.mjs +49 -0
- package/dist/status-fWqXzV0P.mjs.map +1 -0
- package/dist/table-C74eOSh8.cjs +27 -0
- package/dist/table-C74eOSh8.cjs.map +1 -0
- package/dist/table-MHEfbnWO.mjs +20 -0
- package/dist/table-MHEfbnWO.mjs.map +1 -0
- package/dist/table-event-C7gORNlb.mjs +72 -0
- package/dist/table-event-C7gORNlb.mjs.map +1 -0
- package/dist/table-event-DXkCK29f.cjs +101 -0
- package/dist/table-event-DXkCK29f.cjs.map +1 -0
- package/dist/token-store--9GYVL7N.cjs +139 -0
- package/dist/token-store--9GYVL7N.cjs.map +1 -0
- package/dist/token-store-reCGF86F.mjs +124 -0
- package/dist/token-store-reCGF86F.mjs.map +1 -0
- package/dist/update-B4lv4dAz.mjs +109 -0
- package/dist/update-B4lv4dAz.mjs.map +1 -0
- package/dist/update-BXhSosHG.cjs +171 -0
- package/dist/update-BXhSosHG.cjs.map +1 -0
- package/dist/update-CIH6sSVk.cjs +109 -0
- package/dist/update-CIH6sSVk.cjs.map +1 -0
- package/dist/update-CQ4n4Xuf.mjs +117 -0
- package/dist/update-CQ4n4Xuf.mjs.map +1 -0
- package/dist/update-CuPRoVw3.mjs +171 -0
- package/dist/update-CuPRoVw3.mjs.map +1 -0
- package/dist/update-Cx_2GkQj.cjs +61 -0
- package/dist/update-Cx_2GkQj.cjs.map +1 -0
- package/dist/update-DRnN1kiu.cjs +117 -0
- package/dist/update-DRnN1kiu.cjs.map +1 -0
- package/dist/update-Do9HHWzs.cjs +73 -0
- package/dist/update-Do9HHWzs.cjs.map +1 -0
- package/dist/update-mEmULIau.mjs +73 -0
- package/dist/update-mEmULIau.mjs.map +1 -0
- package/dist/update-rzij1b_o.mjs +61 -0
- package/dist/update-rzij1b_o.mjs.map +1 -0
- package/dist/upload-C43ZXxyb.cjs +95 -0
- package/dist/upload-C43ZXxyb.cjs.map +1 -0
- package/dist/upload-DGgJ1TQk.mjs +94 -0
- package/dist/upload-DGgJ1TQk.mjs.map +1 -0
- package/dist/validate-BpxZ8LTl.cjs +31 -0
- package/dist/validate-BpxZ8LTl.cjs.map +1 -0
- package/dist/validate-Ca0CRo16.mjs +31 -0
- package/dist/validate-Ca0CRo16.mjs.map +1 -0
- package/dist/webhook-CVFmch5W.cjs +20 -0
- package/dist/webhook-CVFmch5W.cjs.map +1 -0
- package/dist/webhook-Cy850dNs.mjs +20 -0
- package/dist/webhook-Cy850dNs.mjs.map +1 -0
- package/package.json +28 -17
- package/bin/index.js +0 -3
- package/dist/cli.cjs +0 -1978
- package/dist/cli.cjs.map +0 -1
- package/dist/cli.d.cts +0 -2
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -1954
- package/dist/cli.js.map +0 -1
- package/dist/config/index.js +0 -81
- package/dist/config/index.js.map +0 -1
package/dist/cli.cjs
DELETED
|
@@ -1,1978 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
-
}
|
|
14
|
-
return to;
|
|
15
|
-
};
|
|
16
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
|
-
|
|
25
|
-
// src/cli.ts
|
|
26
|
-
var import_commander8 = require("commander");
|
|
27
|
-
|
|
28
|
-
// src/cms/generate/command.ts
|
|
29
|
-
var import_commander = require("commander");
|
|
30
|
-
|
|
31
|
-
// src/lib/load-config.ts
|
|
32
|
-
var import_esbuild = __toESM(require("esbuild"), 1);
|
|
33
|
-
var import_config_validator = require("@orizm/common/config-validator");
|
|
34
|
-
var v = __toESM(require("valibot"), 1);
|
|
35
|
-
async function loadConfig(configFile) {
|
|
36
|
-
const buildResult = await import_esbuild.default.build({
|
|
37
|
-
entryPoints: [configFile],
|
|
38
|
-
bundle: true,
|
|
39
|
-
write: false,
|
|
40
|
-
format: "esm",
|
|
41
|
-
target: "node22",
|
|
42
|
-
platform: "node"
|
|
43
|
-
});
|
|
44
|
-
const moduleURL = `data:text/javascript,${encodeURIComponent(
|
|
45
|
-
buildResult.outputFiles[0].text
|
|
46
|
-
)}`;
|
|
47
|
-
const { default: orizmConfigRaw } = await import(moduleURL);
|
|
48
|
-
return v.parse(import_config_validator.OrizmConfigDef, orizmConfigRaw);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// src/lib/cli-spinner.ts
|
|
52
|
-
var import_readline = __toESM(require("readline"), 1);
|
|
53
|
-
|
|
54
|
-
// src/lib/cli-symbol.ts
|
|
55
|
-
var import_chalk = __toESM(require("chalk"), 1);
|
|
56
|
-
var success = import_chalk.default.green("\u2713");
|
|
57
|
-
var error = import_chalk.default.red("\u2717");
|
|
58
|
-
|
|
59
|
-
// src/lib/cli-cursor.ts
|
|
60
|
-
function hide() {
|
|
61
|
-
process.stdout.write("\x1B[?25l");
|
|
62
|
-
}
|
|
63
|
-
function show() {
|
|
64
|
-
process.stdout.write("\x1B[?25h");
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// src/lib/cli-spinner.ts
|
|
68
|
-
var FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
69
|
-
var FRAME_INTERVAL = 80;
|
|
70
|
-
var Spinner = class {
|
|
71
|
-
text = "";
|
|
72
|
-
currentFrame = 0;
|
|
73
|
-
timer = null;
|
|
74
|
-
isSpinning = false;
|
|
75
|
-
start(text) {
|
|
76
|
-
if (text) {
|
|
77
|
-
this.text = text;
|
|
78
|
-
}
|
|
79
|
-
if (this.isSpinning) {
|
|
80
|
-
return this;
|
|
81
|
-
}
|
|
82
|
-
this.isSpinning = true;
|
|
83
|
-
this.currentFrame = 0;
|
|
84
|
-
hide();
|
|
85
|
-
this.render();
|
|
86
|
-
this.timer = setInterval(() => {
|
|
87
|
-
this.render();
|
|
88
|
-
}, FRAME_INTERVAL);
|
|
89
|
-
return this;
|
|
90
|
-
}
|
|
91
|
-
stop() {
|
|
92
|
-
if (!this.isSpinning) {
|
|
93
|
-
return this;
|
|
94
|
-
}
|
|
95
|
-
this.isSpinning = false;
|
|
96
|
-
if (this.timer) {
|
|
97
|
-
clearInterval(this.timer);
|
|
98
|
-
this.timer = null;
|
|
99
|
-
}
|
|
100
|
-
import_readline.default.clearLine(process.stdout, 0);
|
|
101
|
-
import_readline.default.cursorTo(process.stdout, 0);
|
|
102
|
-
show();
|
|
103
|
-
return this;
|
|
104
|
-
}
|
|
105
|
-
succeed(text) {
|
|
106
|
-
this.stop();
|
|
107
|
-
const finalText = text || this.text;
|
|
108
|
-
console.log(`${success} ${finalText}`);
|
|
109
|
-
}
|
|
110
|
-
render() {
|
|
111
|
-
const frame = FRAMES[this.currentFrame];
|
|
112
|
-
this.currentFrame = (this.currentFrame + 1) % FRAMES.length;
|
|
113
|
-
import_readline.default.clearLine(process.stdout, 0);
|
|
114
|
-
import_readline.default.cursorTo(process.stdout, 0);
|
|
115
|
-
process.stdout.write(`${frame} ${this.text}`);
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
function createSpinner() {
|
|
119
|
-
return new Spinner();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// src/lib/handle-error.ts
|
|
123
|
-
var v3 = __toESM(require("valibot"), 1);
|
|
124
|
-
var import_chalk3 = __toESM(require("chalk"), 1);
|
|
125
|
-
|
|
126
|
-
// src/lib/display-valibot-error.ts
|
|
127
|
-
var v2 = __toESM(require("valibot"), 1);
|
|
128
|
-
var import_chalk2 = __toESM(require("chalk"), 1);
|
|
129
|
-
function displayValibotError(error2) {
|
|
130
|
-
if (!v2.isValiError(error2)) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
console.error(`Error: ${error2.issues.length} problem(s) found.`);
|
|
134
|
-
console.error(buildValiErrorMessage(error2));
|
|
135
|
-
}
|
|
136
|
-
function buildValiErrorMessage(e, options) {
|
|
137
|
-
const { color = true } = options ?? {};
|
|
138
|
-
return e.issues.map((issue) => {
|
|
139
|
-
const path3 = getPath(issue);
|
|
140
|
-
return ` ${getIssueMessage(issue.message, color)} (at ${getLocationPath(path3, color)})`;
|
|
141
|
-
}).join("\n");
|
|
142
|
-
}
|
|
143
|
-
function getIssueMessage(message, color) {
|
|
144
|
-
return color ? import_chalk2.default.red(message) : message;
|
|
145
|
-
}
|
|
146
|
-
function getLocationPath(path3, color) {
|
|
147
|
-
return color ? import_chalk2.default.yellow(path3) : path3;
|
|
148
|
-
}
|
|
149
|
-
function getPath(issue) {
|
|
150
|
-
const issueDotPath = v2.getDotPath(issue);
|
|
151
|
-
const pathInfo = issue.path;
|
|
152
|
-
if (!issueDotPath || !pathInfo) {
|
|
153
|
-
return "";
|
|
154
|
-
}
|
|
155
|
-
const pathParts = issueDotPath.split(".");
|
|
156
|
-
let pathInfoIndex = 0;
|
|
157
|
-
for (let i = 0; i < pathParts.length; i++) {
|
|
158
|
-
const part = pathParts[i];
|
|
159
|
-
if (!isNumberIndex(part)) {
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
const index = parseInt(part);
|
|
163
|
-
for (let j = pathInfoIndex; j < pathInfo.length; j++) {
|
|
164
|
-
const pathItem = pathInfo[j];
|
|
165
|
-
if (pathItem.type === "array" && pathItem.key === index) {
|
|
166
|
-
if (pathItem.value != null && typeof pathItem.value === "object" && "name" in pathItem.value) {
|
|
167
|
-
pathParts[i] = String(pathItem.value.name);
|
|
168
|
-
pathInfoIndex = j + 1;
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return pathParts.join(".");
|
|
175
|
-
}
|
|
176
|
-
function isNumberIndex(part) {
|
|
177
|
-
return /^\d+$/.test(part);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// src/lib/handle-error.ts
|
|
181
|
-
function handleError(error2) {
|
|
182
|
-
show();
|
|
183
|
-
if (v3.isValiError(error2)) {
|
|
184
|
-
console.error();
|
|
185
|
-
displayValibotError(error2);
|
|
186
|
-
console.error();
|
|
187
|
-
process.exit(1);
|
|
188
|
-
}
|
|
189
|
-
console.error();
|
|
190
|
-
console.error(
|
|
191
|
-
import_chalk3.default.red(
|
|
192
|
-
"Something went wrong. Please check the error below for more details."
|
|
193
|
-
)
|
|
194
|
-
);
|
|
195
|
-
console.error();
|
|
196
|
-
console.error(error2);
|
|
197
|
-
console.error();
|
|
198
|
-
process.exit(1);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// src/cms/generate/generator.ts
|
|
202
|
-
var import_promises = require("fs/promises");
|
|
203
|
-
var import_path = __toESM(require("path"), 1);
|
|
204
|
-
|
|
205
|
-
// src/lib/format-ts-with-prettier.ts
|
|
206
|
-
var prettier = __toESM(require("prettier/standalone"), 1);
|
|
207
|
-
var import_estree = __toESM(require("prettier/plugins/estree.js"), 1);
|
|
208
|
-
var import_typescript = __toESM(require("prettier/plugins/typescript.js"), 1);
|
|
209
|
-
function formatTsWithPrettier(code) {
|
|
210
|
-
return prettier.format(code, {
|
|
211
|
-
parser: "typescript",
|
|
212
|
-
plugins: [import_estree.default, import_typescript.default]
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// src/lib/render-helpers.ts
|
|
217
|
-
function toCodeTypeName(str) {
|
|
218
|
-
str = str.charAt(0).toUpperCase() + str.slice(1);
|
|
219
|
-
return str.replace(/_([a-z])/g, (g) => g[1].toUpperCase());
|
|
220
|
-
}
|
|
221
|
-
function typeName(column, moduleSuffix = "") {
|
|
222
|
-
switch (column.type) {
|
|
223
|
-
case "reference":
|
|
224
|
-
return "string";
|
|
225
|
-
case "module":
|
|
226
|
-
return toCodeTypeName(column.moduleName ?? "") + moduleSuffix;
|
|
227
|
-
case "module-array":
|
|
228
|
-
return toCodeTypeName(column.moduleName ?? "") + moduleSuffix + "[]";
|
|
229
|
-
case "json":
|
|
230
|
-
return "unknown";
|
|
231
|
-
case "storage":
|
|
232
|
-
return "StorageItemType";
|
|
233
|
-
default:
|
|
234
|
-
return column.type;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
function nullableSuffix(column) {
|
|
238
|
-
return !column.required && column.type !== "module-array" ? " | null" : "";
|
|
239
|
-
}
|
|
240
|
-
function filterRefColumns(columns) {
|
|
241
|
-
return columns.filter(
|
|
242
|
-
(c) => c.type === "reference" && c.tableName !== void 0 && c.includeName !== void 0 && c.includeName !== "" || c.type === "module" && c.moduleName !== void 0 || c.type === "module-array" && c.moduleName !== void 0
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
function getIncludeName(column) {
|
|
246
|
-
return column.type === "reference" ? column.includeName || column.name : column.name;
|
|
247
|
-
}
|
|
248
|
-
function getIncludeType(column) {
|
|
249
|
-
if (column.type === "reference" && column.tableName) {
|
|
250
|
-
return toCodeTypeName(column.tableName) + "__Descriptor";
|
|
251
|
-
}
|
|
252
|
-
if (column.type === "module" && column.moduleName) {
|
|
253
|
-
return `_ModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;
|
|
254
|
-
}
|
|
255
|
-
if (column.type === "module-array" && column.moduleName) {
|
|
256
|
-
return `_ArrayModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;
|
|
257
|
-
}
|
|
258
|
-
return "";
|
|
259
|
-
}
|
|
260
|
-
function renderColumnField(col, options) {
|
|
261
|
-
const optional2 = options?.optional === true ? "?" : "";
|
|
262
|
-
const suffix = options?.suffix ?? "";
|
|
263
|
-
return `${col.name}${optional2}: ${typeName(col, suffix)}${nullableSuffix(col)};`;
|
|
264
|
-
}
|
|
265
|
-
function renderTypeBlock(name, fields) {
|
|
266
|
-
return `export type ${name} = {
|
|
267
|
-
${fields.join("\n")}
|
|
268
|
-
};`;
|
|
269
|
-
}
|
|
270
|
-
function renderRefsFieldLines(columns) {
|
|
271
|
-
const refCols = filterRefColumns(columns);
|
|
272
|
-
if (refCols.length === 0) return ["refs: object;"];
|
|
273
|
-
return [
|
|
274
|
-
"refs: {",
|
|
275
|
-
...refCols.map((c) => `${getIncludeName(c)}: ${getIncludeType(c)};`),
|
|
276
|
-
"}"
|
|
277
|
-
];
|
|
278
|
-
}
|
|
279
|
-
function renderUniqueFieldLines(table) {
|
|
280
|
-
const uniqueIndexes = (table.indexes ?? []).filter((i) => i.unique);
|
|
281
|
-
if (uniqueIndexes.length === 0) return ["unique: [];"];
|
|
282
|
-
const entries = uniqueIndexes.map((index) => {
|
|
283
|
-
const cols = index.columns.map((colName) => {
|
|
284
|
-
const col = table.columns.find((c) => c.name === colName);
|
|
285
|
-
if (!col) throw new Error(`column ${colName} not found`);
|
|
286
|
-
const nullable = !col.required && index.nullsNotDistinct ? " | null" : "";
|
|
287
|
-
return `${col.name}:${typeName(col)}${nullable},`;
|
|
288
|
-
});
|
|
289
|
-
return `{ ${cols.join("")} },`;
|
|
290
|
-
});
|
|
291
|
-
return ["unique: [", ...entries, "]"];
|
|
292
|
-
}
|
|
293
|
-
function renderModuleRowTypeBlock(mod) {
|
|
294
|
-
return renderTypeBlock(toCodeTypeName(mod.name), [
|
|
295
|
-
"id: string;",
|
|
296
|
-
...mod.columns.map((col) => renderColumnField(col))
|
|
297
|
-
]);
|
|
298
|
-
}
|
|
299
|
-
function renderModuleDescriptorBlock(mod) {
|
|
300
|
-
const name = toCodeTypeName(mod.name);
|
|
301
|
-
return renderTypeBlock(`${name}__Descriptor`, [
|
|
302
|
-
`row: ${name};`,
|
|
303
|
-
...renderRefsFieldLines(mod.columns),
|
|
304
|
-
"unique: [];"
|
|
305
|
-
]);
|
|
306
|
-
}
|
|
307
|
-
function renderPreamble(importFrom) {
|
|
308
|
-
return `// This file was automatically generated and should not be edited.
|
|
309
|
-
|
|
310
|
-
import { FormValidationRules, StorageItemType } from "${importFrom}";
|
|
311
|
-
|
|
312
|
-
// Utilities
|
|
313
|
-
type _ModuleRef<T> = T & _ModuleDescriptor;
|
|
314
|
-
type _ModuleDescriptor = {
|
|
315
|
-
isModule: true;
|
|
316
|
-
};
|
|
317
|
-
type _ArrayModuleRef<T> = T & _ArrayModuleDescriptor;
|
|
318
|
-
type _ArrayModuleDescriptor = {
|
|
319
|
-
isModuleArray: true;
|
|
320
|
-
};`;
|
|
321
|
-
}
|
|
322
|
-
function renderSection(title, blocks) {
|
|
323
|
-
if (blocks.length === 0) return "";
|
|
324
|
-
return `// ${title}
|
|
325
|
-
${blocks.join("\n\n")}`;
|
|
326
|
-
}
|
|
327
|
-
function renderWebhookTypesSection(tables) {
|
|
328
|
-
const lines = [
|
|
329
|
-
"// Webhook types",
|
|
330
|
-
'export type WebhookEvent = "content.create" | "content.update" | "content.delete";',
|
|
331
|
-
"",
|
|
332
|
-
"type WebhookPayloadBase = {",
|
|
333
|
-
" event: WebhookEvent;",
|
|
334
|
-
" timestamp: string;",
|
|
335
|
-
" project: string;",
|
|
336
|
-
"};",
|
|
337
|
-
""
|
|
338
|
-
];
|
|
339
|
-
if (tables.length > 0) {
|
|
340
|
-
const unionMembers = tables.map((t) => {
|
|
341
|
-
const name = toCodeTypeName(t.name);
|
|
342
|
-
return `| {
|
|
343
|
-
table: "${t.name}";
|
|
344
|
-
content: ${name};
|
|
345
|
-
old?: ${name};
|
|
346
|
-
}`;
|
|
347
|
-
}).join("\n");
|
|
348
|
-
lines.push(
|
|
349
|
-
`export type WebhookPayload = WebhookPayloadBase & (
|
|
350
|
-
${unionMembers}
|
|
351
|
-
);`
|
|
352
|
-
);
|
|
353
|
-
} else {
|
|
354
|
-
lines.push("export type WebhookPayload = WebhookPayloadBase;");
|
|
355
|
-
}
|
|
356
|
-
return lines.join("\n");
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// src/cms/generate/generator.ts
|
|
360
|
-
async function generate(options) {
|
|
361
|
-
const config = options.config;
|
|
362
|
-
await (0, import_promises.mkdir)(options.output, { recursive: true });
|
|
363
|
-
const renderedTypes = await renderTypes(config);
|
|
364
|
-
await (0, import_promises.writeFile)(
|
|
365
|
-
import_path.default.join(options.output, "types.ts"),
|
|
366
|
-
renderedTypes,
|
|
367
|
-
"utf-8"
|
|
368
|
-
);
|
|
369
|
-
const renderedClient = await renderClient(config);
|
|
370
|
-
await (0, import_promises.writeFile)(
|
|
371
|
-
import_path.default.join(options.output, "client.ts"),
|
|
372
|
-
renderedClient,
|
|
373
|
-
"utf-8"
|
|
374
|
-
);
|
|
375
|
-
}
|
|
376
|
-
async function renderTypes(config) {
|
|
377
|
-
const submissionTables = config.tables.filter((t) => t.enableForm).map((t) => ({
|
|
378
|
-
name: t.name + "__submission",
|
|
379
|
-
columns: t.formOptions?.submissionColumns ?? [],
|
|
380
|
-
isSubmissions: true
|
|
381
|
-
}));
|
|
382
|
-
const allTables = [...config.tables, ...submissionTables];
|
|
383
|
-
const modules = config.tableModules ?? [];
|
|
384
|
-
const source = [
|
|
385
|
-
renderPreamble("@orizm/cms-sdk/common"),
|
|
386
|
-
renderSection("Tables", allTables.map(renderTableTypes)),
|
|
387
|
-
renderSection("Module types", modules.map(renderModuleTypes)),
|
|
388
|
-
// CMS: モジュール descriptor 間は空行なし(スナップショット互換)
|
|
389
|
-
"// Descriptor types\n" + [
|
|
390
|
-
...allTables.map(renderTableDescriptor),
|
|
391
|
-
modules.map(renderModuleDescriptorBlock).join("\n")
|
|
392
|
-
].join("\n\n"),
|
|
393
|
-
renderWebhookTypesSection(allTables)
|
|
394
|
-
].filter(Boolean).join("\n\n\n");
|
|
395
|
-
return await formatTsWithPrettier(source);
|
|
396
|
-
}
|
|
397
|
-
function renderTableTypes(table) {
|
|
398
|
-
const cols = table.columns;
|
|
399
|
-
const name = toCodeTypeName(table.name);
|
|
400
|
-
const rowType = renderTypeBlock(name, [
|
|
401
|
-
"id: string;",
|
|
402
|
-
"createdAt: string;",
|
|
403
|
-
"updatedAt: string;",
|
|
404
|
-
...!table.isSubmissions ? [
|
|
405
|
-
"group: string | null;",
|
|
406
|
-
"publishedAt: string | null;",
|
|
407
|
-
"_draft: boolean | null;",
|
|
408
|
-
"_published: boolean | null;",
|
|
409
|
-
"scheduledPublishAt: string | null;",
|
|
410
|
-
"scheduledUnpublishAt: string | null;"
|
|
411
|
-
] : [
|
|
412
|
-
"_formId: string;",
|
|
413
|
-
"_content: unknown;",
|
|
414
|
-
"_formSchema: unknown;",
|
|
415
|
-
"_attachments: StorageItemType[];"
|
|
416
|
-
],
|
|
417
|
-
...cols.map((col) => renderColumnField(col)),
|
|
418
|
-
...table.enableForm ? ["formSchema: FormValidationRules;"] : []
|
|
419
|
-
]);
|
|
420
|
-
const createType = renderTypeBlock(`${name}CreateInput`, [
|
|
421
|
-
...!table.isSubmissions ? [
|
|
422
|
-
"group?: string | null;",
|
|
423
|
-
"publishedAt?: string | null;",
|
|
424
|
-
"scheduledPublishAt?: string | null;",
|
|
425
|
-
"scheduledUnpublishAt?: string | null;",
|
|
426
|
-
"createdAt?: string;"
|
|
427
|
-
] : [],
|
|
428
|
-
...cols.map(
|
|
429
|
-
(col) => renderColumnField(col, {
|
|
430
|
-
optional: !col.required,
|
|
431
|
-
suffix: "CreateInput"
|
|
432
|
-
})
|
|
433
|
-
),
|
|
434
|
-
...table.enableForm ? ["formSchema: FormValidationRules;"] : []
|
|
435
|
-
]);
|
|
436
|
-
const updateType = renderTypeBlock(`${name}UpdateInput`, [
|
|
437
|
-
...cols.filter((col) => !col.readOnly).map(
|
|
438
|
-
(col) => renderColumnField(col, { optional: true, suffix: "UpdateInput" })
|
|
439
|
-
),
|
|
440
|
-
...!table.isSubmissions ? [
|
|
441
|
-
"publishedAt?: string | null;",
|
|
442
|
-
"scheduledPublishAt?: string | null;",
|
|
443
|
-
"scheduledUnpublishAt?: string | null;",
|
|
444
|
-
"createdAt?: string;"
|
|
445
|
-
] : [],
|
|
446
|
-
...table.enableForm ? ["formSchema: FormValidationRules;"] : []
|
|
447
|
-
]);
|
|
448
|
-
return [rowType, createType, updateType].join("\n\n");
|
|
449
|
-
}
|
|
450
|
-
function renderModuleTypes(mod) {
|
|
451
|
-
const name = toCodeTypeName(mod.name);
|
|
452
|
-
const cols = mod.columns;
|
|
453
|
-
const rowType = renderModuleRowTypeBlock(mod);
|
|
454
|
-
const createType = renderTypeBlock(`${name}CreateInput`, [
|
|
455
|
-
...cols.map(
|
|
456
|
-
(col) => renderColumnField(col, {
|
|
457
|
-
optional: !col.required,
|
|
458
|
-
suffix: "CreateInput"
|
|
459
|
-
})
|
|
460
|
-
)
|
|
461
|
-
]);
|
|
462
|
-
const updateType = renderTypeBlock(`${name}UpdateInput`, [
|
|
463
|
-
"id?: string;",
|
|
464
|
-
...cols.map(
|
|
465
|
-
(col) => renderColumnField(col, {
|
|
466
|
-
optional: !col.required,
|
|
467
|
-
suffix: "UpdateInput"
|
|
468
|
-
})
|
|
469
|
-
)
|
|
470
|
-
]);
|
|
471
|
-
return [rowType, createType, updateType].join("\n\n");
|
|
472
|
-
}
|
|
473
|
-
function renderTableDescriptor(table) {
|
|
474
|
-
const name = toCodeTypeName(table.name);
|
|
475
|
-
return renderTypeBlock(`${name}__Descriptor`, [
|
|
476
|
-
`row: ${name};`,
|
|
477
|
-
`create: ${name}CreateInput;`,
|
|
478
|
-
`update: ${name}UpdateInput;`,
|
|
479
|
-
...renderRefsFieldLines(table.columns),
|
|
480
|
-
...renderUniqueFieldLines(table),
|
|
481
|
-
...table.enableDrafts ? ["enableDrafts: true;"] : [],
|
|
482
|
-
...table.enableForm ? [`submissionDescriptor: ${name}_Submission__Descriptor;`] : ["submissionDescriptor: never;"]
|
|
483
|
-
]);
|
|
484
|
-
}
|
|
485
|
-
async function renderClient(config) {
|
|
486
|
-
const tableEntries = config.tables.map(
|
|
487
|
-
(t) => `${t.name}: this.client.getTableClient<Models.${toCodeTypeName(t.name)}__Descriptor>("${t.name}"),`
|
|
488
|
-
).join("\n");
|
|
489
|
-
const bucketEntries = (config.buckets ?? []).map((b) => `${b.name}: this.client.getBucketClient("${b.name}"),`).join("\n");
|
|
490
|
-
const source = `// This file was automatically generated and should not be edited.
|
|
491
|
-
|
|
492
|
-
import { OrizmCMSClient } from "@orizm/cms-sdk";
|
|
493
|
-
|
|
494
|
-
import * as Models from "./types";
|
|
495
|
-
|
|
496
|
-
export class CMSClient {
|
|
497
|
-
constructor(protected client: OrizmCMSClient) {
|
|
498
|
-
this.tables = {
|
|
499
|
-
${tableEntries}
|
|
500
|
-
};
|
|
501
|
-
|
|
502
|
-
this.buckets = {
|
|
503
|
-
${bucketEntries}
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
this.userManagement = this.client.userManagement;
|
|
507
|
-
|
|
508
|
-
this.userinfo = this.client.userinfo;
|
|
509
|
-
|
|
510
|
-
this.auth = this.client.auth;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
readonly tables;
|
|
514
|
-
readonly buckets;
|
|
515
|
-
readonly userManagement;
|
|
516
|
-
readonly userinfo;
|
|
517
|
-
readonly auth;
|
|
518
|
-
}
|
|
519
|
-
`;
|
|
520
|
-
return await formatTsWithPrettier(source);
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
// src/cms/generate/command.ts
|
|
524
|
-
var spinner = createSpinner();
|
|
525
|
-
var cmsGenerateCommand = new import_commander.Command("generate").description("generate orizm client and types.").option("-c, --config <path>", "orizm config file path.", "orizm.config.ts").option("-o, --output <path>", "output directory.", "./src/orizm").action(async (options) => {
|
|
526
|
-
try {
|
|
527
|
-
spinner.start("Loading project schema...");
|
|
528
|
-
const config = await loadConfig(options.config);
|
|
529
|
-
spinner.succeed("Loaded project schema.");
|
|
530
|
-
spinner.start("Generating code...");
|
|
531
|
-
await generate({
|
|
532
|
-
config,
|
|
533
|
-
output: options.output
|
|
534
|
-
});
|
|
535
|
-
spinner.succeed(`Generated code to '${options.output}'`);
|
|
536
|
-
} catch (error2) {
|
|
537
|
-
handleError(error2);
|
|
538
|
-
}
|
|
539
|
-
});
|
|
540
|
-
|
|
541
|
-
// src/cms/pull/command.ts
|
|
542
|
-
var import_commander2 = require("commander");
|
|
543
|
-
|
|
544
|
-
// ../internal-shared/dist/chunk-TTAO2AN2.js
|
|
545
|
-
var PATH_PARAM_RE = /\{[^{}]+\}/g;
|
|
546
|
-
var supportsRequestInitExt = () => {
|
|
547
|
-
return typeof process === "object" && Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 && process.versions.undici;
|
|
548
|
-
};
|
|
549
|
-
function randomID() {
|
|
550
|
-
return Math.random().toString(36).slice(2, 11);
|
|
551
|
-
}
|
|
552
|
-
function createClient(clientOptions) {
|
|
553
|
-
let {
|
|
554
|
-
baseUrl = "",
|
|
555
|
-
Request: CustomRequest = globalThis.Request,
|
|
556
|
-
fetch: baseFetch = globalThis.fetch,
|
|
557
|
-
querySerializer: globalQuerySerializer,
|
|
558
|
-
bodySerializer: globalBodySerializer,
|
|
559
|
-
pathSerializer: globalPathSerializer,
|
|
560
|
-
headers: baseHeaders,
|
|
561
|
-
requestInitExt = void 0,
|
|
562
|
-
...baseOptions
|
|
563
|
-
} = { ...clientOptions };
|
|
564
|
-
requestInitExt = supportsRequestInitExt() ? requestInitExt : void 0;
|
|
565
|
-
baseUrl = removeTrailingSlash(baseUrl);
|
|
566
|
-
const globalMiddlewares = [];
|
|
567
|
-
async function coreFetch(schemaPath, fetchOptions) {
|
|
568
|
-
const {
|
|
569
|
-
baseUrl: localBaseUrl,
|
|
570
|
-
fetch = baseFetch,
|
|
571
|
-
Request = CustomRequest,
|
|
572
|
-
headers,
|
|
573
|
-
params = {},
|
|
574
|
-
parseAs = "json",
|
|
575
|
-
querySerializer: requestQuerySerializer,
|
|
576
|
-
bodySerializer = globalBodySerializer ?? defaultBodySerializer,
|
|
577
|
-
pathSerializer: requestPathSerializer,
|
|
578
|
-
body,
|
|
579
|
-
middleware: requestMiddlewares = [],
|
|
580
|
-
...init
|
|
581
|
-
} = fetchOptions || {};
|
|
582
|
-
let finalBaseUrl = baseUrl;
|
|
583
|
-
if (localBaseUrl) {
|
|
584
|
-
finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;
|
|
585
|
-
}
|
|
586
|
-
let querySerializer = typeof globalQuerySerializer === "function" ? globalQuerySerializer : createQuerySerializer(globalQuerySerializer);
|
|
587
|
-
if (requestQuerySerializer) {
|
|
588
|
-
querySerializer = typeof requestQuerySerializer === "function" ? requestQuerySerializer : createQuerySerializer({
|
|
589
|
-
...typeof globalQuerySerializer === "object" ? globalQuerySerializer : {},
|
|
590
|
-
...requestQuerySerializer
|
|
591
|
-
});
|
|
592
|
-
}
|
|
593
|
-
const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;
|
|
594
|
-
const serializedBody = body === void 0 ? void 0 : bodySerializer(
|
|
595
|
-
body,
|
|
596
|
-
// Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:
|
|
597
|
-
// bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,
|
|
598
|
-
// the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,
|
|
599
|
-
// setting the content-type at the very beginning to be overwritten.
|
|
600
|
-
// Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.
|
|
601
|
-
mergeHeaders(baseHeaders, headers, params.header)
|
|
602
|
-
);
|
|
603
|
-
const finalHeaders = mergeHeaders(
|
|
604
|
-
// with no body, we should not to set Content-Type
|
|
605
|
-
serializedBody === void 0 || // if serialized body is FormData; browser will correctly set Content-Type & boundary expression
|
|
606
|
-
serializedBody instanceof FormData ? {} : {
|
|
607
|
-
"Content-Type": "application/json"
|
|
608
|
-
},
|
|
609
|
-
baseHeaders,
|
|
610
|
-
headers,
|
|
611
|
-
params.header
|
|
612
|
-
);
|
|
613
|
-
const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];
|
|
614
|
-
const requestInit = {
|
|
615
|
-
redirect: "follow",
|
|
616
|
-
...baseOptions,
|
|
617
|
-
...init,
|
|
618
|
-
body: serializedBody,
|
|
619
|
-
headers: finalHeaders
|
|
620
|
-
};
|
|
621
|
-
let id;
|
|
622
|
-
let options;
|
|
623
|
-
let request = new Request(
|
|
624
|
-
createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),
|
|
625
|
-
requestInit
|
|
626
|
-
);
|
|
627
|
-
let response;
|
|
628
|
-
for (const key in init) {
|
|
629
|
-
if (!(key in request)) {
|
|
630
|
-
request[key] = init[key];
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
if (finalMiddlewares.length) {
|
|
634
|
-
id = randomID();
|
|
635
|
-
options = Object.freeze({
|
|
636
|
-
baseUrl: finalBaseUrl,
|
|
637
|
-
fetch,
|
|
638
|
-
parseAs,
|
|
639
|
-
querySerializer,
|
|
640
|
-
bodySerializer,
|
|
641
|
-
pathSerializer
|
|
642
|
-
});
|
|
643
|
-
for (const m of finalMiddlewares) {
|
|
644
|
-
if (m && typeof m === "object" && typeof m.onRequest === "function") {
|
|
645
|
-
const result = await m.onRequest({
|
|
646
|
-
request,
|
|
647
|
-
schemaPath,
|
|
648
|
-
params,
|
|
649
|
-
options,
|
|
650
|
-
id
|
|
651
|
-
});
|
|
652
|
-
if (result) {
|
|
653
|
-
if (result instanceof Request) {
|
|
654
|
-
request = result;
|
|
655
|
-
} else if (result instanceof Response) {
|
|
656
|
-
response = result;
|
|
657
|
-
break;
|
|
658
|
-
} else {
|
|
659
|
-
throw new Error("onRequest: must return new Request() or Response() when modifying the request");
|
|
660
|
-
}
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
if (!response) {
|
|
666
|
-
try {
|
|
667
|
-
response = await fetch(request, requestInitExt);
|
|
668
|
-
} catch (error22) {
|
|
669
|
-
let errorAfterMiddleware = error22;
|
|
670
|
-
if (finalMiddlewares.length) {
|
|
671
|
-
for (let i = finalMiddlewares.length - 1; i >= 0; i--) {
|
|
672
|
-
const m = finalMiddlewares[i];
|
|
673
|
-
if (m && typeof m === "object" && typeof m.onError === "function") {
|
|
674
|
-
const result = await m.onError({
|
|
675
|
-
request,
|
|
676
|
-
error: errorAfterMiddleware,
|
|
677
|
-
schemaPath,
|
|
678
|
-
params,
|
|
679
|
-
options,
|
|
680
|
-
id
|
|
681
|
-
});
|
|
682
|
-
if (result) {
|
|
683
|
-
if (result instanceof Response) {
|
|
684
|
-
errorAfterMiddleware = void 0;
|
|
685
|
-
response = result;
|
|
686
|
-
break;
|
|
687
|
-
}
|
|
688
|
-
if (result instanceof Error) {
|
|
689
|
-
errorAfterMiddleware = result;
|
|
690
|
-
continue;
|
|
691
|
-
}
|
|
692
|
-
throw new Error("onError: must return new Response() or instance of Error");
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
if (errorAfterMiddleware) {
|
|
698
|
-
throw errorAfterMiddleware;
|
|
699
|
-
}
|
|
700
|
-
}
|
|
701
|
-
if (finalMiddlewares.length) {
|
|
702
|
-
for (let i = finalMiddlewares.length - 1; i >= 0; i--) {
|
|
703
|
-
const m = finalMiddlewares[i];
|
|
704
|
-
if (m && typeof m === "object" && typeof m.onResponse === "function") {
|
|
705
|
-
const result = await m.onResponse({
|
|
706
|
-
request,
|
|
707
|
-
response,
|
|
708
|
-
schemaPath,
|
|
709
|
-
params,
|
|
710
|
-
options,
|
|
711
|
-
id
|
|
712
|
-
});
|
|
713
|
-
if (result) {
|
|
714
|
-
if (!(result instanceof Response)) {
|
|
715
|
-
throw new Error("onResponse: must return new Response() when modifying the response");
|
|
716
|
-
}
|
|
717
|
-
response = result;
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
const contentLength = response.headers.get("Content-Length");
|
|
724
|
-
if (response.status === 204 || request.method === "HEAD" || contentLength === "0" && !response.headers.get("Transfer-Encoding")?.includes("chunked")) {
|
|
725
|
-
return response.ok ? { data: void 0, response } : { error: void 0, response };
|
|
726
|
-
}
|
|
727
|
-
if (response.ok) {
|
|
728
|
-
const getResponseData = async () => {
|
|
729
|
-
if (parseAs === "stream") {
|
|
730
|
-
return response.body;
|
|
731
|
-
}
|
|
732
|
-
if (parseAs === "json" && !contentLength) {
|
|
733
|
-
const raw = await response.text();
|
|
734
|
-
return raw ? JSON.parse(raw) : void 0;
|
|
735
|
-
}
|
|
736
|
-
return await response[parseAs]();
|
|
737
|
-
};
|
|
738
|
-
return { data: await getResponseData(), response };
|
|
739
|
-
}
|
|
740
|
-
let error2 = await response.text();
|
|
741
|
-
try {
|
|
742
|
-
error2 = JSON.parse(error2);
|
|
743
|
-
} catch {
|
|
744
|
-
}
|
|
745
|
-
return { error: error2, response };
|
|
746
|
-
}
|
|
747
|
-
return {
|
|
748
|
-
request(method, url, init) {
|
|
749
|
-
return coreFetch(url, { ...init, method: method.toUpperCase() });
|
|
750
|
-
},
|
|
751
|
-
/** Call a GET endpoint */
|
|
752
|
-
GET(url, init) {
|
|
753
|
-
return coreFetch(url, { ...init, method: "GET" });
|
|
754
|
-
},
|
|
755
|
-
/** Call a PUT endpoint */
|
|
756
|
-
PUT(url, init) {
|
|
757
|
-
return coreFetch(url, { ...init, method: "PUT" });
|
|
758
|
-
},
|
|
759
|
-
/** Call a POST endpoint */
|
|
760
|
-
POST(url, init) {
|
|
761
|
-
return coreFetch(url, { ...init, method: "POST" });
|
|
762
|
-
},
|
|
763
|
-
/** Call a DELETE endpoint */
|
|
764
|
-
DELETE(url, init) {
|
|
765
|
-
return coreFetch(url, { ...init, method: "DELETE" });
|
|
766
|
-
},
|
|
767
|
-
/** Call a OPTIONS endpoint */
|
|
768
|
-
OPTIONS(url, init) {
|
|
769
|
-
return coreFetch(url, { ...init, method: "OPTIONS" });
|
|
770
|
-
},
|
|
771
|
-
/** Call a HEAD endpoint */
|
|
772
|
-
HEAD(url, init) {
|
|
773
|
-
return coreFetch(url, { ...init, method: "HEAD" });
|
|
774
|
-
},
|
|
775
|
-
/** Call a PATCH endpoint */
|
|
776
|
-
PATCH(url, init) {
|
|
777
|
-
return coreFetch(url, { ...init, method: "PATCH" });
|
|
778
|
-
},
|
|
779
|
-
/** Call a TRACE endpoint */
|
|
780
|
-
TRACE(url, init) {
|
|
781
|
-
return coreFetch(url, { ...init, method: "TRACE" });
|
|
782
|
-
},
|
|
783
|
-
/** Register middleware */
|
|
784
|
-
use(...middleware) {
|
|
785
|
-
for (const m of middleware) {
|
|
786
|
-
if (!m) {
|
|
787
|
-
continue;
|
|
788
|
-
}
|
|
789
|
-
if (typeof m !== "object" || !("onRequest" in m || "onResponse" in m || "onError" in m)) {
|
|
790
|
-
throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");
|
|
791
|
-
}
|
|
792
|
-
globalMiddlewares.push(m);
|
|
793
|
-
}
|
|
794
|
-
},
|
|
795
|
-
/** Unregister middleware */
|
|
796
|
-
eject(...middleware) {
|
|
797
|
-
for (const m of middleware) {
|
|
798
|
-
const i = globalMiddlewares.indexOf(m);
|
|
799
|
-
if (i !== -1) {
|
|
800
|
-
globalMiddlewares.splice(i, 1);
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
};
|
|
805
|
-
}
|
|
806
|
-
function serializePrimitiveParam(name, value, options) {
|
|
807
|
-
if (value === void 0 || value === null) {
|
|
808
|
-
return "";
|
|
809
|
-
}
|
|
810
|
-
if (typeof value === "object") {
|
|
811
|
-
throw new Error(
|
|
812
|
-
"Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these."
|
|
813
|
-
);
|
|
814
|
-
}
|
|
815
|
-
return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;
|
|
816
|
-
}
|
|
817
|
-
function serializeObjectParam(name, value, options) {
|
|
818
|
-
if (!value || typeof value !== "object") {
|
|
819
|
-
return "";
|
|
820
|
-
}
|
|
821
|
-
const values = [];
|
|
822
|
-
const joiner = {
|
|
823
|
-
simple: ",",
|
|
824
|
-
label: ".",
|
|
825
|
-
matrix: ";"
|
|
826
|
-
}[options.style] || "&";
|
|
827
|
-
if (options.style !== "deepObject" && options.explode === false) {
|
|
828
|
-
for (const k in value) {
|
|
829
|
-
values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));
|
|
830
|
-
}
|
|
831
|
-
const final2 = values.join(",");
|
|
832
|
-
switch (options.style) {
|
|
833
|
-
case "form": {
|
|
834
|
-
return `${name}=${final2}`;
|
|
835
|
-
}
|
|
836
|
-
case "label": {
|
|
837
|
-
return `.${final2}`;
|
|
838
|
-
}
|
|
839
|
-
case "matrix": {
|
|
840
|
-
return `;${name}=${final2}`;
|
|
841
|
-
}
|
|
842
|
-
default: {
|
|
843
|
-
return final2;
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
}
|
|
847
|
-
for (const k in value) {
|
|
848
|
-
const finalName = options.style === "deepObject" ? `${name}[${k}]` : k;
|
|
849
|
-
values.push(serializePrimitiveParam(finalName, value[k], options));
|
|
850
|
-
}
|
|
851
|
-
const final = values.join(joiner);
|
|
852
|
-
return options.style === "label" || options.style === "matrix" ? `${joiner}${final}` : final;
|
|
853
|
-
}
|
|
854
|
-
function serializeArrayParam(name, value, options) {
|
|
855
|
-
if (!Array.isArray(value)) {
|
|
856
|
-
return "";
|
|
857
|
-
}
|
|
858
|
-
if (options.explode === false) {
|
|
859
|
-
const joiner2 = { form: ",", spaceDelimited: "%20", pipeDelimited: "|" }[options.style] || ",";
|
|
860
|
-
const final = (options.allowReserved === true ? value : value.map((v6) => encodeURIComponent(v6))).join(joiner2);
|
|
861
|
-
switch (options.style) {
|
|
862
|
-
case "simple": {
|
|
863
|
-
return final;
|
|
864
|
-
}
|
|
865
|
-
case "label": {
|
|
866
|
-
return `.${final}`;
|
|
867
|
-
}
|
|
868
|
-
case "matrix": {
|
|
869
|
-
return `;${name}=${final}`;
|
|
870
|
-
}
|
|
871
|
-
// case "spaceDelimited":
|
|
872
|
-
// case "pipeDelimited":
|
|
873
|
-
default: {
|
|
874
|
-
return `${name}=${final}`;
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
}
|
|
878
|
-
const joiner = { simple: ",", label: ".", matrix: ";" }[options.style] || "&";
|
|
879
|
-
const values = [];
|
|
880
|
-
for (const v6 of value) {
|
|
881
|
-
if (options.style === "simple" || options.style === "label") {
|
|
882
|
-
values.push(options.allowReserved === true ? v6 : encodeURIComponent(v6));
|
|
883
|
-
} else {
|
|
884
|
-
values.push(serializePrimitiveParam(name, v6, options));
|
|
885
|
-
}
|
|
886
|
-
}
|
|
887
|
-
return options.style === "label" || options.style === "matrix" ? `${joiner}${values.join(joiner)}` : values.join(joiner);
|
|
888
|
-
}
|
|
889
|
-
function createQuerySerializer(options) {
|
|
890
|
-
return function querySerializer(queryParams) {
|
|
891
|
-
const search = [];
|
|
892
|
-
if (queryParams && typeof queryParams === "object") {
|
|
893
|
-
for (const name in queryParams) {
|
|
894
|
-
const value = queryParams[name];
|
|
895
|
-
if (value === void 0 || value === null) {
|
|
896
|
-
continue;
|
|
897
|
-
}
|
|
898
|
-
if (Array.isArray(value)) {
|
|
899
|
-
if (value.length === 0) {
|
|
900
|
-
continue;
|
|
901
|
-
}
|
|
902
|
-
search.push(
|
|
903
|
-
serializeArrayParam(name, value, {
|
|
904
|
-
style: "form",
|
|
905
|
-
explode: true,
|
|
906
|
-
...options?.array,
|
|
907
|
-
allowReserved: options?.allowReserved || false
|
|
908
|
-
})
|
|
909
|
-
);
|
|
910
|
-
continue;
|
|
911
|
-
}
|
|
912
|
-
if (typeof value === "object") {
|
|
913
|
-
search.push(
|
|
914
|
-
serializeObjectParam(name, value, {
|
|
915
|
-
style: "deepObject",
|
|
916
|
-
explode: true,
|
|
917
|
-
...options?.object,
|
|
918
|
-
allowReserved: options?.allowReserved || false
|
|
919
|
-
})
|
|
920
|
-
);
|
|
921
|
-
continue;
|
|
922
|
-
}
|
|
923
|
-
search.push(serializePrimitiveParam(name, value, options));
|
|
924
|
-
}
|
|
925
|
-
}
|
|
926
|
-
return search.join("&");
|
|
927
|
-
};
|
|
928
|
-
}
|
|
929
|
-
function defaultPathSerializer(pathname, pathParams) {
|
|
930
|
-
let nextURL = pathname;
|
|
931
|
-
for (const match of pathname.match(PATH_PARAM_RE) ?? []) {
|
|
932
|
-
let name = match.substring(1, match.length - 1);
|
|
933
|
-
let explode = false;
|
|
934
|
-
let style = "simple";
|
|
935
|
-
if (name.endsWith("*")) {
|
|
936
|
-
explode = true;
|
|
937
|
-
name = name.substring(0, name.length - 1);
|
|
938
|
-
}
|
|
939
|
-
if (name.startsWith(".")) {
|
|
940
|
-
style = "label";
|
|
941
|
-
name = name.substring(1);
|
|
942
|
-
} else if (name.startsWith(";")) {
|
|
943
|
-
style = "matrix";
|
|
944
|
-
name = name.substring(1);
|
|
945
|
-
}
|
|
946
|
-
if (!pathParams || pathParams[name] === void 0 || pathParams[name] === null) {
|
|
947
|
-
continue;
|
|
948
|
-
}
|
|
949
|
-
const value = pathParams[name];
|
|
950
|
-
if (Array.isArray(value)) {
|
|
951
|
-
nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));
|
|
952
|
-
continue;
|
|
953
|
-
}
|
|
954
|
-
if (typeof value === "object") {
|
|
955
|
-
nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));
|
|
956
|
-
continue;
|
|
957
|
-
}
|
|
958
|
-
if (style === "matrix") {
|
|
959
|
-
nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);
|
|
960
|
-
continue;
|
|
961
|
-
}
|
|
962
|
-
nextURL = nextURL.replace(match, style === "label" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));
|
|
963
|
-
}
|
|
964
|
-
return nextURL;
|
|
965
|
-
}
|
|
966
|
-
function defaultBodySerializer(body, headers) {
|
|
967
|
-
if (body instanceof FormData) {
|
|
968
|
-
return body;
|
|
969
|
-
}
|
|
970
|
-
if (headers) {
|
|
971
|
-
const contentType = headers.get instanceof Function ? headers.get("Content-Type") ?? headers.get("content-type") : headers["Content-Type"] ?? headers["content-type"];
|
|
972
|
-
if (contentType === "application/x-www-form-urlencoded") {
|
|
973
|
-
return new URLSearchParams(body).toString();
|
|
974
|
-
}
|
|
975
|
-
}
|
|
976
|
-
return JSON.stringify(body);
|
|
977
|
-
}
|
|
978
|
-
function createFinalURL(pathname, options) {
|
|
979
|
-
let finalURL = `${options.baseUrl}${pathname}`;
|
|
980
|
-
if (options.params?.path) {
|
|
981
|
-
finalURL = options.pathSerializer(finalURL, options.params.path);
|
|
982
|
-
}
|
|
983
|
-
let search = options.querySerializer(options.params.query ?? {});
|
|
984
|
-
if (search.startsWith("?")) {
|
|
985
|
-
search = search.substring(1);
|
|
986
|
-
}
|
|
987
|
-
if (search) {
|
|
988
|
-
finalURL += `?${search}`;
|
|
989
|
-
}
|
|
990
|
-
return finalURL;
|
|
991
|
-
}
|
|
992
|
-
function mergeHeaders(...allHeaders) {
|
|
993
|
-
const finalHeaders = new Headers();
|
|
994
|
-
for (const h of allHeaders) {
|
|
995
|
-
if (!h || typeof h !== "object") {
|
|
996
|
-
continue;
|
|
997
|
-
}
|
|
998
|
-
const iterator = h instanceof Headers ? h.entries() : Object.entries(h);
|
|
999
|
-
for (const [k, v6] of iterator) {
|
|
1000
|
-
if (v6 === null) {
|
|
1001
|
-
finalHeaders.delete(k);
|
|
1002
|
-
} else if (Array.isArray(v6)) {
|
|
1003
|
-
for (const v22 of v6) {
|
|
1004
|
-
finalHeaders.append(k, v22);
|
|
1005
|
-
}
|
|
1006
|
-
} else if (v6 !== void 0) {
|
|
1007
|
-
finalHeaders.set(k, v6);
|
|
1008
|
-
}
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
return finalHeaders;
|
|
1012
|
-
}
|
|
1013
|
-
function removeTrailingSlash(url) {
|
|
1014
|
-
if (url.endsWith("/")) {
|
|
1015
|
-
return url.substring(0, url.length - 1);
|
|
1016
|
-
}
|
|
1017
|
-
return url;
|
|
1018
|
-
}
|
|
1019
|
-
function assertValidUrlOrigin(origin) {
|
|
1020
|
-
const url = new URL(origin);
|
|
1021
|
-
if (url.origin !== origin) {
|
|
1022
|
-
throw new Error(`${origin} is not a valid URL origin`);
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
// ../internal-shared/dist/api-clients/dev-v2-api-client.js
|
|
1027
|
-
function createDeveloperAPIv2Client({
|
|
1028
|
-
serverOrigin = "",
|
|
1029
|
-
fetch,
|
|
1030
|
-
headers
|
|
1031
|
-
}) {
|
|
1032
|
-
if (serverOrigin) assertValidUrlOrigin(serverOrigin);
|
|
1033
|
-
return createClient({
|
|
1034
|
-
baseUrl: `${serverOrigin}/api/dev/v2`,
|
|
1035
|
-
fetch,
|
|
1036
|
-
headers
|
|
1037
|
-
});
|
|
1038
|
-
}
|
|
1039
|
-
|
|
1040
|
-
// src/lib/fetch-current-definition.ts
|
|
1041
|
-
async function fetchCurrentDefinition(options) {
|
|
1042
|
-
const client = createDeveloperAPIv2Client({
|
|
1043
|
-
serverOrigin: options.baseUrl,
|
|
1044
|
-
headers: {
|
|
1045
|
-
"x-api-key": options.apiKey
|
|
1046
|
-
}
|
|
1047
|
-
});
|
|
1048
|
-
const abortController = new AbortController();
|
|
1049
|
-
const timeout = setTimeout(() => {
|
|
1050
|
-
abortController.abort();
|
|
1051
|
-
}, 1e4);
|
|
1052
|
-
try {
|
|
1053
|
-
const response = await client.GET(
|
|
1054
|
-
"/projects/{projectName}/definitions/current",
|
|
1055
|
-
{
|
|
1056
|
-
params: { path: { projectName: options.projectName } },
|
|
1057
|
-
signal: abortController.signal
|
|
1058
|
-
}
|
|
1059
|
-
);
|
|
1060
|
-
if (response.data) {
|
|
1061
|
-
return response.data;
|
|
1062
|
-
}
|
|
1063
|
-
if (response.response.status === 404) {
|
|
1064
|
-
throw new Error(`Project ${options.projectName} not found.`);
|
|
1065
|
-
}
|
|
1066
|
-
if (response.response.status === 401) {
|
|
1067
|
-
throw new Error(`API Key is invalid.`);
|
|
1068
|
-
}
|
|
1069
|
-
throw new Error(
|
|
1070
|
-
`Unknown error occurred when fetching definitions for project ${options.projectName}.`
|
|
1071
|
-
);
|
|
1072
|
-
} catch (error2) {
|
|
1073
|
-
if (error2 instanceof Error && error2.name === "AbortError") {
|
|
1074
|
-
throw new Error("Request timed out.");
|
|
1075
|
-
}
|
|
1076
|
-
throw error2;
|
|
1077
|
-
} finally {
|
|
1078
|
-
clearTimeout(timeout);
|
|
1079
|
-
}
|
|
1080
|
-
}
|
|
1081
|
-
|
|
1082
|
-
// src/lib/load-env.ts
|
|
1083
|
-
var import_promises2 = __toESM(require("fs/promises"), 1);
|
|
1084
|
-
var v4 = __toESM(require("valibot"), 1);
|
|
1085
|
-
var import_dotenv = __toESM(require("dotenv"), 1);
|
|
1086
|
-
var DEFAULT_ENV_FILE_PATH = ".env";
|
|
1087
|
-
var EnvSchema = v4.object({
|
|
1088
|
-
ORIZM_PROJECT: v4.pipe(
|
|
1089
|
-
v4.string(),
|
|
1090
|
-
v4.minLength(1, "ORIZM_PROJECT is required"),
|
|
1091
|
-
v4.brand("ORIZM_PROJECT")
|
|
1092
|
-
),
|
|
1093
|
-
ORIZM_BASE_URL: v4.pipe(
|
|
1094
|
-
v4.optional(v4.string(), "https://app.orizm.com"),
|
|
1095
|
-
// if null, use default value
|
|
1096
|
-
v4.transform((v6) => v6.replace(/\/$/, "")),
|
|
1097
|
-
// remove trailing slash
|
|
1098
|
-
v4.brand("ORIZM_BASE_URL")
|
|
1099
|
-
),
|
|
1100
|
-
ORIZM_API_KEY: v4.pipe(
|
|
1101
|
-
v4.string(),
|
|
1102
|
-
v4.minLength(1, "ORIZM_API_KEY is required"),
|
|
1103
|
-
v4.brand("ORIZM_API_KEY")
|
|
1104
|
-
)
|
|
1105
|
-
});
|
|
1106
|
-
async function loadEnv(envPath) {
|
|
1107
|
-
let envFileContent;
|
|
1108
|
-
if (envPath) {
|
|
1109
|
-
envFileContent = await import_promises2.default.readFile(envPath, "utf-8").catch(() => null);
|
|
1110
|
-
if (!envFileContent) {
|
|
1111
|
-
throw new Error(`Environment variables file: '${envPath}' is not found.`);
|
|
1112
|
-
}
|
|
1113
|
-
} else {
|
|
1114
|
-
envFileContent = await import_promises2.default.readFile(DEFAULT_ENV_FILE_PATH, "utf-8").catch(() => null);
|
|
1115
|
-
}
|
|
1116
|
-
if (envFileContent !== null) {
|
|
1117
|
-
const dotenvParsed = import_dotenv.default.parse(envFileContent);
|
|
1118
|
-
const envParseResult = v4.safeParse(EnvSchema, dotenvParsed);
|
|
1119
|
-
if (!envParseResult.success) {
|
|
1120
|
-
throw new Error(
|
|
1121
|
-
`Environment variables are not valid.
|
|
1122
|
-
` + envParseResult.issues.map((issue) => issue.message).join("\n")
|
|
1123
|
-
);
|
|
1124
|
-
}
|
|
1125
|
-
return envParseResult.output;
|
|
1126
|
-
}
|
|
1127
|
-
const processEnvParseResult = v4.safeParse(EnvSchema, process.env);
|
|
1128
|
-
if (!processEnvParseResult.success) {
|
|
1129
|
-
throw new Error(
|
|
1130
|
-
"Environment variables are not valid. Put .env file or set environment variables in process.env.\n" + processEnvParseResult.issues.map((issue) => issue.message).join("\n")
|
|
1131
|
-
);
|
|
1132
|
-
}
|
|
1133
|
-
return processEnvParseResult.output;
|
|
1134
|
-
}
|
|
1135
|
-
|
|
1136
|
-
// src/cms/pull/action.ts
|
|
1137
|
-
var spinner2 = createSpinner();
|
|
1138
|
-
async function pullAction(options) {
|
|
1139
|
-
spinner2.start("Loading environment variables...");
|
|
1140
|
-
const env = await loadEnv(options.envPath);
|
|
1141
|
-
spinner2.succeed("Loaded environment variables.");
|
|
1142
|
-
spinner2.start("Loading project config...");
|
|
1143
|
-
const definitionReference = await fetchCurrentDefinition({
|
|
1144
|
-
baseUrl: env.ORIZM_BASE_URL,
|
|
1145
|
-
apiKey: env.ORIZM_API_KEY,
|
|
1146
|
-
projectName: env.ORIZM_PROJECT
|
|
1147
|
-
});
|
|
1148
|
-
spinner2.succeed("Loaded project config.");
|
|
1149
|
-
spinner2.start("Generating code...");
|
|
1150
|
-
await generate({
|
|
1151
|
-
output: options.destination,
|
|
1152
|
-
config: definitionReference.parsed
|
|
1153
|
-
});
|
|
1154
|
-
spinner2.succeed(`Generated code to '${options.destination}'`);
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
|
-
// src/cms/pull/command.ts
|
|
1158
|
-
var cmsPullCommand = new import_commander2.Command("pull").description("pull orizm schema and generate client and types.").option("-e, --env [path]", "env file path.").option("-o, --output <path>", "output directory.", "./src/orizm").action(async (options) => {
|
|
1159
|
-
try {
|
|
1160
|
-
await pullAction({
|
|
1161
|
-
destination: options.output,
|
|
1162
|
-
envPath: options.env
|
|
1163
|
-
});
|
|
1164
|
-
} catch (error2) {
|
|
1165
|
-
handleError(error2);
|
|
1166
|
-
}
|
|
1167
|
-
});
|
|
1168
|
-
|
|
1169
|
-
// src/consumer/generate/command.ts
|
|
1170
|
-
var import_commander3 = require("commander");
|
|
1171
|
-
|
|
1172
|
-
// src/consumer/pull/generate.ts
|
|
1173
|
-
var import_promises3 = require("fs/promises");
|
|
1174
|
-
var import_path2 = __toESM(require("path"), 1);
|
|
1175
|
-
async function generate2(options) {
|
|
1176
|
-
await (0, import_promises3.mkdir)(options.output, { recursive: true });
|
|
1177
|
-
const renderedTypes = await renderTypes2(options.definition);
|
|
1178
|
-
const targetTypesPath = import_path2.default.join(options.output, "types.ts");
|
|
1179
|
-
await (0, import_promises3.writeFile)(targetTypesPath, renderedTypes, "utf-8");
|
|
1180
|
-
const renderedClient = await renderClient2(options.definition);
|
|
1181
|
-
const targetClientPath = import_path2.default.join(options.output, "client.ts");
|
|
1182
|
-
await (0, import_promises3.writeFile)(targetClientPath, renderedClient, "utf-8");
|
|
1183
|
-
}
|
|
1184
|
-
async function renderTypes2(config) {
|
|
1185
|
-
const tables = config.tables;
|
|
1186
|
-
const modules = config.tableModules ?? [];
|
|
1187
|
-
const source = [
|
|
1188
|
-
renderPreamble("@orizm/consumer-sdk/common"),
|
|
1189
|
-
renderSection("Tables", tables.map(renderTableRowType)),
|
|
1190
|
-
modules.map(renderModuleRowTypeBlock).join("\n\n"),
|
|
1191
|
-
renderSection("Descriptor types", [
|
|
1192
|
-
...tables.map(renderTableDescriptor2),
|
|
1193
|
-
...modules.map(renderModuleDescriptorBlock)
|
|
1194
|
-
]),
|
|
1195
|
-
renderWebhookTypesSection(tables)
|
|
1196
|
-
].filter(Boolean).join("\n\n\n");
|
|
1197
|
-
return await formatTsWithPrettier(source);
|
|
1198
|
-
}
|
|
1199
|
-
function renderTableRowType(table) {
|
|
1200
|
-
return renderTypeBlock(toCodeTypeName(table.name), [
|
|
1201
|
-
"id: string;",
|
|
1202
|
-
"createdAt: string;",
|
|
1203
|
-
"updatedAt: string;",
|
|
1204
|
-
"group: string | null;",
|
|
1205
|
-
"publishedAt: string | null;",
|
|
1206
|
-
"_draft: boolean | null;",
|
|
1207
|
-
"_published: boolean | null;",
|
|
1208
|
-
...table.columns.map((col) => renderColumnField(col)),
|
|
1209
|
-
...table.enableForm ? ["formSchema: FormValidationRules;"] : []
|
|
1210
|
-
]);
|
|
1211
|
-
}
|
|
1212
|
-
function renderTableDescriptor2(table) {
|
|
1213
|
-
const name = toCodeTypeName(table.name);
|
|
1214
|
-
return renderTypeBlock(`${name}__Descriptor`, [
|
|
1215
|
-
`row: ${name};`,
|
|
1216
|
-
...renderRefsFieldLines(table.columns),
|
|
1217
|
-
...renderUniqueFieldLines(table),
|
|
1218
|
-
...table.enableDrafts ? ["enableDrafts: true;"] : []
|
|
1219
|
-
]);
|
|
1220
|
-
}
|
|
1221
|
-
async function renderClient2(config) {
|
|
1222
|
-
const tableEntries = config.tables.map(
|
|
1223
|
-
(t) => `${t.name}: this.getTableClient<Models.${toCodeTypeName(t.name)}__Descriptor>("${t.name}"),`
|
|
1224
|
-
).join("\n");
|
|
1225
|
-
const source = `// This file was automatically generated and should not be edited.
|
|
1226
|
-
|
|
1227
|
-
import { ConsumerClientOptions, OrizmConsumerClientBase } from "@orizm/consumer-sdk";
|
|
1228
|
-
import * as Models from "./types";
|
|
1229
|
-
|
|
1230
|
-
export class OrizmClient extends OrizmConsumerClientBase {
|
|
1231
|
-
constructor(options: ConsumerClientOptions) {
|
|
1232
|
-
super(options);
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
|
-
readonly tables = {
|
|
1236
|
-
${tableEntries}
|
|
1237
|
-
};
|
|
1238
|
-
}
|
|
1239
|
-
`;
|
|
1240
|
-
return await formatTsWithPrettier(source);
|
|
1241
|
-
}
|
|
1242
|
-
|
|
1243
|
-
// src/consumer/generate/action.ts
|
|
1244
|
-
var spinner3 = createSpinner();
|
|
1245
|
-
async function generateAction(orizmConfigTs, destination) {
|
|
1246
|
-
spinner3.start("Loading project config...");
|
|
1247
|
-
const definition = await loadConfig(orizmConfigTs);
|
|
1248
|
-
spinner3.succeed("Loaded project config.");
|
|
1249
|
-
spinner3.start("Generating code...");
|
|
1250
|
-
await generate2({
|
|
1251
|
-
definition,
|
|
1252
|
-
output: destination
|
|
1253
|
-
});
|
|
1254
|
-
spinner3.succeed(`Generated code to '${destination}'`);
|
|
1255
|
-
}
|
|
1256
|
-
|
|
1257
|
-
// src/consumer/generate/command.ts
|
|
1258
|
-
var consumerGenerateCommand = new import_commander3.Command("generate").description("generate orizm client and types.").option("-c, --config <path>", "orizm config file path.", "orizm.config.ts").option("-o, --output <path>", "output directory.", "./src/orizm").action(async (options) => {
|
|
1259
|
-
try {
|
|
1260
|
-
await generateAction(options.config, options.output);
|
|
1261
|
-
} catch (error2) {
|
|
1262
|
-
handleError(error2);
|
|
1263
|
-
}
|
|
1264
|
-
});
|
|
1265
|
-
|
|
1266
|
-
// src/consumer/pull/command.ts
|
|
1267
|
-
var import_commander4 = require("commander");
|
|
1268
|
-
|
|
1269
|
-
// src/consumer/pull/action.ts
|
|
1270
|
-
var spinner4 = createSpinner();
|
|
1271
|
-
async function pullAction2(options) {
|
|
1272
|
-
spinner4.start("Loading environment variables...");
|
|
1273
|
-
const config = await loadEnv(options.envPath);
|
|
1274
|
-
spinner4.succeed("Loaded environment variables.");
|
|
1275
|
-
spinner4.start("Loading project config...");
|
|
1276
|
-
const definition = await fetchCurrentDefinition({
|
|
1277
|
-
baseUrl: config.ORIZM_BASE_URL,
|
|
1278
|
-
apiKey: config.ORIZM_API_KEY,
|
|
1279
|
-
projectName: config.ORIZM_PROJECT
|
|
1280
|
-
});
|
|
1281
|
-
spinner4.succeed("Loaded project config.");
|
|
1282
|
-
spinner4.start("Generating code...");
|
|
1283
|
-
await generate2({
|
|
1284
|
-
definition: definition.parsed,
|
|
1285
|
-
output: options.destination
|
|
1286
|
-
});
|
|
1287
|
-
spinner4.succeed(`Generated code to '${options.destination}'`);
|
|
1288
|
-
}
|
|
1289
|
-
|
|
1290
|
-
// src/consumer/pull/command.ts
|
|
1291
|
-
var consumerPullCommand = new import_commander4.Command("pull").description("pull orizm schema and generate client and types.").option("-e, --env [path]", "env file path.").option("-o, --output <path>", "output directory.", "./src/orizm").action(async (options) => {
|
|
1292
|
-
try {
|
|
1293
|
-
await pullAction2({
|
|
1294
|
-
destination: options.output,
|
|
1295
|
-
envPath: options.env
|
|
1296
|
-
});
|
|
1297
|
-
} catch (error2) {
|
|
1298
|
-
handleError(error2);
|
|
1299
|
-
}
|
|
1300
|
-
});
|
|
1301
|
-
|
|
1302
|
-
// src/push/command.ts
|
|
1303
|
-
var import_commander5 = require("commander");
|
|
1304
|
-
var import_chalk6 = __toESM(require("chalk"), 1);
|
|
1305
|
-
|
|
1306
|
-
// src/lib/developer-api.ts
|
|
1307
|
-
var import_chalk4 = __toESM(require("chalk"), 1);
|
|
1308
|
-
async function applyDefinition(env, projectDef) {
|
|
1309
|
-
const client = createDeveloperAPIv2Client({
|
|
1310
|
-
serverOrigin: env.ORIZM_BASE_URL,
|
|
1311
|
-
headers: {
|
|
1312
|
-
"x-api-key": env.ORIZM_API_KEY
|
|
1313
|
-
}
|
|
1314
|
-
});
|
|
1315
|
-
const response = await client.POST("/projects/{projectName}/definitions", {
|
|
1316
|
-
params: { path: { projectName: env.ORIZM_PROJECT } },
|
|
1317
|
-
body: { definition: projectDef }
|
|
1318
|
-
});
|
|
1319
|
-
if (!response.data) {
|
|
1320
|
-
const status = response.response.status;
|
|
1321
|
-
if (status === 401) {
|
|
1322
|
-
throw new Error(
|
|
1323
|
-
"401 Unauthorized. Please check your Developer API key and try again."
|
|
1324
|
-
);
|
|
1325
|
-
}
|
|
1326
|
-
if (response.error.type === "bad-request") {
|
|
1327
|
-
console.log(import_chalk4.default.red(response.error.detail));
|
|
1328
|
-
process.exit(1);
|
|
1329
|
-
}
|
|
1330
|
-
throw new Error(
|
|
1331
|
-
`${status} ${response.response.statusText}: Unexpected error occurred while applying schema.`
|
|
1332
|
-
);
|
|
1333
|
-
}
|
|
1334
|
-
}
|
|
1335
|
-
var getChangeEvents = async (env, projectDef) => {
|
|
1336
|
-
const client = createDeveloperAPIv2Client({
|
|
1337
|
-
serverOrigin: env.ORIZM_BASE_URL,
|
|
1338
|
-
headers: {
|
|
1339
|
-
"x-api-key": env.ORIZM_API_KEY
|
|
1340
|
-
}
|
|
1341
|
-
});
|
|
1342
|
-
const response = await client.POST(
|
|
1343
|
-
"/projects/{projectName}/definitions/dry-run",
|
|
1344
|
-
{
|
|
1345
|
-
params: { path: { projectName: env.ORIZM_PROJECT } },
|
|
1346
|
-
body: { definition: projectDef }
|
|
1347
|
-
}
|
|
1348
|
-
);
|
|
1349
|
-
if (!response.data) {
|
|
1350
|
-
const status = response.response.status;
|
|
1351
|
-
if (status === 401) {
|
|
1352
|
-
throw new Error(
|
|
1353
|
-
"401 Unauthorized. Please check your Developer API key and try again."
|
|
1354
|
-
);
|
|
1355
|
-
}
|
|
1356
|
-
throw new Error(
|
|
1357
|
-
`${status} ${response.response.statusText}: Unexpected error occurred while fetching schema change events.
|
|
1358
|
-
${JSON.stringify(response.error, null, 2)}`
|
|
1359
|
-
);
|
|
1360
|
-
}
|
|
1361
|
-
return response.data;
|
|
1362
|
-
};
|
|
1363
|
-
|
|
1364
|
-
// src/lib/display-change-events.ts
|
|
1365
|
-
var import_chalk5 = __toESM(require("chalk"), 1);
|
|
1366
|
-
|
|
1367
|
-
// src/lib/cli-table.ts
|
|
1368
|
-
var COLORS = {
|
|
1369
|
-
reset: "\x1B[0m",
|
|
1370
|
-
green: "\x1B[32m",
|
|
1371
|
-
red: "\x1B[31m"
|
|
1372
|
-
};
|
|
1373
|
-
var CliTable = class {
|
|
1374
|
-
headers = [];
|
|
1375
|
-
rows = [];
|
|
1376
|
-
columnWidths = [];
|
|
1377
|
-
rowColors = [];
|
|
1378
|
-
// 各行の色を保持する配列
|
|
1379
|
-
constructor(headers) {
|
|
1380
|
-
this.headers = headers;
|
|
1381
|
-
this.updateColumnWidths(headers);
|
|
1382
|
-
}
|
|
1383
|
-
// データ行を追加
|
|
1384
|
-
addRow(row, options) {
|
|
1385
|
-
if (row.length !== this.headers.length) {
|
|
1386
|
-
throw new Error(
|
|
1387
|
-
`The length of the row (${row.length}) does not match the length of the header (${this.headers.length})`
|
|
1388
|
-
);
|
|
1389
|
-
}
|
|
1390
|
-
this.rows.push(row);
|
|
1391
|
-
if (options?.color) {
|
|
1392
|
-
this.rowColors.push(COLORS[options.color]);
|
|
1393
|
-
} else {
|
|
1394
|
-
this.rowColors.push(null);
|
|
1395
|
-
}
|
|
1396
|
-
this.updateColumnWidths(row);
|
|
1397
|
-
}
|
|
1398
|
-
// 列幅を更新
|
|
1399
|
-
updateColumnWidths(row) {
|
|
1400
|
-
for (let i = 0; i < row.length; i++) {
|
|
1401
|
-
const cellLength = row[i].length;
|
|
1402
|
-
if (this.columnWidths[i] == null || cellLength > this.columnWidths[i]) {
|
|
1403
|
-
this.columnWidths[i] = cellLength;
|
|
1404
|
-
}
|
|
1405
|
-
}
|
|
1406
|
-
}
|
|
1407
|
-
// 水平線を生成
|
|
1408
|
-
createHorizontalLine(position) {
|
|
1409
|
-
let line = "";
|
|
1410
|
-
if (position === "top") line += "\u250C";
|
|
1411
|
-
else if (position === "middle") line += "\u251C";
|
|
1412
|
-
else if (position === "bottom") line += "\u2514";
|
|
1413
|
-
for (let i = 0; i < this.columnWidths.length; i++) {
|
|
1414
|
-
line += "\u2500".repeat(this.columnWidths[i] + 2);
|
|
1415
|
-
if (i < this.columnWidths.length - 1) {
|
|
1416
|
-
if (position === "top") line += "\u252C";
|
|
1417
|
-
else if (position === "middle") line += "\u253C";
|
|
1418
|
-
else if (position === "bottom") line += "\u2534";
|
|
1419
|
-
} else {
|
|
1420
|
-
if (position === "top") line += "\u2510";
|
|
1421
|
-
else if (position === "middle") line += "\u2524";
|
|
1422
|
-
else if (position === "bottom") line += "\u2518";
|
|
1423
|
-
}
|
|
1424
|
-
}
|
|
1425
|
-
return line;
|
|
1426
|
-
}
|
|
1427
|
-
// 行を整形
|
|
1428
|
-
formatRow(row, color) {
|
|
1429
|
-
let formattedRow = "\u2502";
|
|
1430
|
-
for (let i = 0; i < row.length; i++) {
|
|
1431
|
-
const cell = row[i];
|
|
1432
|
-
const padding = " ".repeat(this.columnWidths[i] - cell.length);
|
|
1433
|
-
if (color) {
|
|
1434
|
-
formattedRow += ` ${color}${cell}${COLORS.reset}${padding} \u2502`;
|
|
1435
|
-
} else {
|
|
1436
|
-
formattedRow += ` ${cell}${padding} \u2502`;
|
|
1437
|
-
}
|
|
1438
|
-
}
|
|
1439
|
-
return formattedRow;
|
|
1440
|
-
}
|
|
1441
|
-
// テーブルを文字列として取得
|
|
1442
|
-
toString() {
|
|
1443
|
-
if (this.headers.length === 0) {
|
|
1444
|
-
return "";
|
|
1445
|
-
}
|
|
1446
|
-
const topLine = this.createHorizontalLine("top");
|
|
1447
|
-
const middleLine = this.createHorizontalLine("middle");
|
|
1448
|
-
const bottomLine = this.createHorizontalLine("bottom");
|
|
1449
|
-
let table = topLine + "\n";
|
|
1450
|
-
table += this.formatRow(this.headers, null) + "\n";
|
|
1451
|
-
table += middleLine + "\n";
|
|
1452
|
-
for (let i = 0; i < this.rows.length; i++) {
|
|
1453
|
-
const color = this.rowColors[i] || null;
|
|
1454
|
-
table += this.formatRow(this.rows[i], color) + "\n";
|
|
1455
|
-
}
|
|
1456
|
-
table += bottomLine;
|
|
1457
|
-
return table;
|
|
1458
|
-
}
|
|
1459
|
-
// テーブルを出力
|
|
1460
|
-
print() {
|
|
1461
|
-
console.log(this.toString());
|
|
1462
|
-
}
|
|
1463
|
-
};
|
|
1464
|
-
|
|
1465
|
-
// src/lib/display-change-events.ts
|
|
1466
|
-
function displayChangeEvents(changeEvents) {
|
|
1467
|
-
const {
|
|
1468
|
-
tableChangeEvents = [],
|
|
1469
|
-
bucketChangeEvents = [],
|
|
1470
|
-
authorityChangeEvents = []
|
|
1471
|
-
} = changeEvents;
|
|
1472
|
-
if (tableChangeEvents.length === 0 && bucketChangeEvents.length === 0 && authorityChangeEvents.length === 0) {
|
|
1473
|
-
console.log();
|
|
1474
|
-
console.log(import_chalk5.default.green("No changes."));
|
|
1475
|
-
return;
|
|
1476
|
-
}
|
|
1477
|
-
displayTableChangeEvents(tableChangeEvents);
|
|
1478
|
-
displayBucketChangeEvents(bucketChangeEvents);
|
|
1479
|
-
displayAuthorityChangeEvents(authorityChangeEvents);
|
|
1480
|
-
console.log();
|
|
1481
|
-
}
|
|
1482
|
-
function displayTableChangeEvents(tableChangeEvents) {
|
|
1483
|
-
if (tableChangeEvents.length === 0) {
|
|
1484
|
-
return;
|
|
1485
|
-
}
|
|
1486
|
-
const eventsByTable = /* @__PURE__ */ new Map();
|
|
1487
|
-
for (const event of tableChangeEvents) {
|
|
1488
|
-
const tableName = event.tableDef.name;
|
|
1489
|
-
const tableEvents = eventsByTable.get(tableName) ?? [];
|
|
1490
|
-
tableEvents.push(event);
|
|
1491
|
-
eventsByTable.set(tableName, tableEvents);
|
|
1492
|
-
}
|
|
1493
|
-
for (const [tableName, events] of eventsByTable.entries()) {
|
|
1494
|
-
console.log();
|
|
1495
|
-
console.log(`\u26AB\uFE0ETable: ${tableName}`);
|
|
1496
|
-
const table = new CliTable(["Type", "Name", "Event", "Detail"]);
|
|
1497
|
-
for (const event of events) {
|
|
1498
|
-
const eventName = event.event;
|
|
1499
|
-
switch (eventName) {
|
|
1500
|
-
case "table:create":
|
|
1501
|
-
case "table:update": {
|
|
1502
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1503
|
-
color: "green"
|
|
1504
|
-
});
|
|
1505
|
-
break;
|
|
1506
|
-
}
|
|
1507
|
-
case "table:delete": {
|
|
1508
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1509
|
-
color: "red"
|
|
1510
|
-
});
|
|
1511
|
-
break;
|
|
1512
|
-
}
|
|
1513
|
-
case "column:create":
|
|
1514
|
-
case "column:update": {
|
|
1515
|
-
table.addRow(
|
|
1516
|
-
[
|
|
1517
|
-
"column",
|
|
1518
|
-
event.columnDef.name,
|
|
1519
|
-
eventName,
|
|
1520
|
-
JSON.stringify(event.columnDef)
|
|
1521
|
-
],
|
|
1522
|
-
{ color: "green" }
|
|
1523
|
-
);
|
|
1524
|
-
break;
|
|
1525
|
-
}
|
|
1526
|
-
case "column:delete": {
|
|
1527
|
-
table.addRow(
|
|
1528
|
-
[
|
|
1529
|
-
"column",
|
|
1530
|
-
event.columnDef.name,
|
|
1531
|
-
eventName,
|
|
1532
|
-
JSON.stringify(event.columnDef)
|
|
1533
|
-
],
|
|
1534
|
-
{
|
|
1535
|
-
color: "red"
|
|
1536
|
-
}
|
|
1537
|
-
);
|
|
1538
|
-
break;
|
|
1539
|
-
}
|
|
1540
|
-
case "index:create":
|
|
1541
|
-
case "index:update": {
|
|
1542
|
-
table.addRow(
|
|
1543
|
-
[
|
|
1544
|
-
"index",
|
|
1545
|
-
event.indexDef.columns.join(", "),
|
|
1546
|
-
eventName,
|
|
1547
|
-
JSON.stringify(event.indexDef)
|
|
1548
|
-
],
|
|
1549
|
-
{ color: "green" }
|
|
1550
|
-
);
|
|
1551
|
-
break;
|
|
1552
|
-
}
|
|
1553
|
-
case "index:delete": {
|
|
1554
|
-
table.addRow(
|
|
1555
|
-
[
|
|
1556
|
-
"index",
|
|
1557
|
-
event.indexDef.columns.join(", "),
|
|
1558
|
-
eventName,
|
|
1559
|
-
JSON.stringify(event.indexDef)
|
|
1560
|
-
],
|
|
1561
|
-
{ color: "red" }
|
|
1562
|
-
);
|
|
1563
|
-
break;
|
|
1564
|
-
}
|
|
1565
|
-
case "module:create":
|
|
1566
|
-
case "module:update": {
|
|
1567
|
-
table.addRow(
|
|
1568
|
-
[
|
|
1569
|
-
"module",
|
|
1570
|
-
event.columnDef.name,
|
|
1571
|
-
eventName,
|
|
1572
|
-
JSON.stringify(event.columnDef)
|
|
1573
|
-
],
|
|
1574
|
-
{
|
|
1575
|
-
color: "green"
|
|
1576
|
-
}
|
|
1577
|
-
);
|
|
1578
|
-
break;
|
|
1579
|
-
}
|
|
1580
|
-
case "module:delete": {
|
|
1581
|
-
table.addRow(
|
|
1582
|
-
[
|
|
1583
|
-
"module",
|
|
1584
|
-
event.columnDef.name,
|
|
1585
|
-
eventName,
|
|
1586
|
-
JSON.stringify(event.columnDef)
|
|
1587
|
-
],
|
|
1588
|
-
{
|
|
1589
|
-
color: "red"
|
|
1590
|
-
}
|
|
1591
|
-
);
|
|
1592
|
-
break;
|
|
1593
|
-
}
|
|
1594
|
-
case "search:enable":
|
|
1595
|
-
case "search:update": {
|
|
1596
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1597
|
-
color: "green"
|
|
1598
|
-
});
|
|
1599
|
-
break;
|
|
1600
|
-
}
|
|
1601
|
-
case "search:disable": {
|
|
1602
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1603
|
-
color: "red"
|
|
1604
|
-
});
|
|
1605
|
-
break;
|
|
1606
|
-
}
|
|
1607
|
-
case "history:enable": {
|
|
1608
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1609
|
-
color: "green"
|
|
1610
|
-
});
|
|
1611
|
-
break;
|
|
1612
|
-
}
|
|
1613
|
-
case "history:disable": {
|
|
1614
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1615
|
-
color: "red"
|
|
1616
|
-
});
|
|
1617
|
-
break;
|
|
1618
|
-
}
|
|
1619
|
-
case "draft:enable": {
|
|
1620
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1621
|
-
color: "green"
|
|
1622
|
-
});
|
|
1623
|
-
break;
|
|
1624
|
-
}
|
|
1625
|
-
case "draft:disable": {
|
|
1626
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1627
|
-
color: "red"
|
|
1628
|
-
});
|
|
1629
|
-
break;
|
|
1630
|
-
}
|
|
1631
|
-
case "formSubmissions:create":
|
|
1632
|
-
case "formSubmissions:update": {
|
|
1633
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1634
|
-
color: "green"
|
|
1635
|
-
});
|
|
1636
|
-
break;
|
|
1637
|
-
}
|
|
1638
|
-
case "formSubmissions:delete": {
|
|
1639
|
-
table.addRow(["table", event.tableDef.name, eventName, ""], {
|
|
1640
|
-
color: "red"
|
|
1641
|
-
});
|
|
1642
|
-
break;
|
|
1643
|
-
}
|
|
1644
|
-
}
|
|
1645
|
-
}
|
|
1646
|
-
table.print();
|
|
1647
|
-
}
|
|
1648
|
-
}
|
|
1649
|
-
function displayBucketChangeEvents(bucketChangeEvents) {
|
|
1650
|
-
if (bucketChangeEvents.length === 0) {
|
|
1651
|
-
return;
|
|
1652
|
-
}
|
|
1653
|
-
const eventsByBucket = /* @__PURE__ */ new Map();
|
|
1654
|
-
for (const event of bucketChangeEvents) {
|
|
1655
|
-
const bucketName = event.bucketDef.name;
|
|
1656
|
-
const bucketEvents = eventsByBucket.get(bucketName) ?? [];
|
|
1657
|
-
bucketEvents.push(event);
|
|
1658
|
-
eventsByBucket.set(bucketName, bucketEvents);
|
|
1659
|
-
}
|
|
1660
|
-
const table = new CliTable(["Type", "Name", "Event", "Detail"]);
|
|
1661
|
-
console.log();
|
|
1662
|
-
console.log("\u26AB\uFE0EBuckets");
|
|
1663
|
-
for (const [_, events] of eventsByBucket.entries()) {
|
|
1664
|
-
for (const event of events) {
|
|
1665
|
-
const eventName = event.event;
|
|
1666
|
-
switch (eventName) {
|
|
1667
|
-
case "bucket:create":
|
|
1668
|
-
case "bucket:update": {
|
|
1669
|
-
table.addRow(
|
|
1670
|
-
[
|
|
1671
|
-
"bucket",
|
|
1672
|
-
event.bucketDef.name,
|
|
1673
|
-
eventName,
|
|
1674
|
-
JSON.stringify(event.bucketDef)
|
|
1675
|
-
],
|
|
1676
|
-
{
|
|
1677
|
-
color: "green"
|
|
1678
|
-
}
|
|
1679
|
-
);
|
|
1680
|
-
break;
|
|
1681
|
-
}
|
|
1682
|
-
case "bucket:delete": {
|
|
1683
|
-
table.addRow(
|
|
1684
|
-
[
|
|
1685
|
-
"bucket",
|
|
1686
|
-
event.bucketDef.name,
|
|
1687
|
-
eventName,
|
|
1688
|
-
JSON.stringify(event.bucketDef)
|
|
1689
|
-
],
|
|
1690
|
-
{
|
|
1691
|
-
color: "red"
|
|
1692
|
-
}
|
|
1693
|
-
);
|
|
1694
|
-
break;
|
|
1695
|
-
}
|
|
1696
|
-
}
|
|
1697
|
-
}
|
|
1698
|
-
}
|
|
1699
|
-
table.print();
|
|
1700
|
-
}
|
|
1701
|
-
function displayAuthorityChangeEvents(authorityChangeEvents) {
|
|
1702
|
-
if (authorityChangeEvents.length === 0) {
|
|
1703
|
-
return;
|
|
1704
|
-
}
|
|
1705
|
-
const table = new CliTable(["Type", "Event", "Detail"]);
|
|
1706
|
-
console.log();
|
|
1707
|
-
console.log("\u26AB\uFE0EAuthorities");
|
|
1708
|
-
for (const event of authorityChangeEvents) {
|
|
1709
|
-
const eventName = event.event;
|
|
1710
|
-
switch (eventName) {
|
|
1711
|
-
case "authority:update": {
|
|
1712
|
-
table.addRow(
|
|
1713
|
-
["authority", eventName, JSON.stringify(event.authorityDef)],
|
|
1714
|
-
{ color: "green" }
|
|
1715
|
-
);
|
|
1716
|
-
break;
|
|
1717
|
-
}
|
|
1718
|
-
}
|
|
1719
|
-
}
|
|
1720
|
-
table.print();
|
|
1721
|
-
}
|
|
1722
|
-
|
|
1723
|
-
// src/lib/cli-input.ts
|
|
1724
|
-
var import_promises4 = require("readline/promises");
|
|
1725
|
-
async function input(prompt) {
|
|
1726
|
-
const rl = (0, import_promises4.createInterface)({
|
|
1727
|
-
input: process.stdin,
|
|
1728
|
-
output: process.stdout
|
|
1729
|
-
});
|
|
1730
|
-
const input2 = await rl.question(prompt).finally(() => {
|
|
1731
|
-
rl.close();
|
|
1732
|
-
});
|
|
1733
|
-
return input2.trim();
|
|
1734
|
-
}
|
|
1735
|
-
|
|
1736
|
-
// src/push/command.ts
|
|
1737
|
-
var spinner5 = createSpinner();
|
|
1738
|
-
var pushCommand = new import_commander5.Command("push").description("apply schema to project.").option("-e, --env <path>", "env file path.").option("-c, --config <path>", "orizm config file path.", "orizm.config.ts").option("--dry-run", "display change-events without applying schema.", false).option("-y, --yes", "apply schema without confirmation.", false).action(
|
|
1739
|
-
async (options) => {
|
|
1740
|
-
try {
|
|
1741
|
-
spinner5.start("Loading environment variables...");
|
|
1742
|
-
const env = await loadEnv(options.env);
|
|
1743
|
-
spinner5.succeed("Loaded environment variables.");
|
|
1744
|
-
spinner5.start("Loading project config...");
|
|
1745
|
-
const projectDef = await loadConfig(options.config);
|
|
1746
|
-
spinner5.succeed("Loaded project config.");
|
|
1747
|
-
spinner5.start("Fetch schema change events...");
|
|
1748
|
-
const changeEvents = await getChangeEvents(env, projectDef);
|
|
1749
|
-
spinner5.succeed("Fetch schema change events.");
|
|
1750
|
-
await displayChangeEvents(changeEvents);
|
|
1751
|
-
if (changeEvents.tableChangeEvents.length === 0 && changeEvents.bucketChangeEvents.length === 0 && changeEvents.authorityChangeEvents.length === 0) {
|
|
1752
|
-
return;
|
|
1753
|
-
}
|
|
1754
|
-
if (options.dryRun) {
|
|
1755
|
-
return;
|
|
1756
|
-
}
|
|
1757
|
-
if (!options.yes) {
|
|
1758
|
-
const confirm = await input("Do you want to apply schema? (y/N): ");
|
|
1759
|
-
if (confirm !== "y") {
|
|
1760
|
-
console.log(import_chalk6.default.red("Canceled."));
|
|
1761
|
-
return;
|
|
1762
|
-
}
|
|
1763
|
-
}
|
|
1764
|
-
spinner5.start("Applying schema...");
|
|
1765
|
-
await applyDefinition(env, projectDef);
|
|
1766
|
-
spinner5.succeed("Schema applied.");
|
|
1767
|
-
} catch (error2) {
|
|
1768
|
-
handleError(error2);
|
|
1769
|
-
}
|
|
1770
|
-
}
|
|
1771
|
-
);
|
|
1772
|
-
|
|
1773
|
-
// src/config/validate/command.ts
|
|
1774
|
-
var import_commander6 = require("commander");
|
|
1775
|
-
var import_chalk7 = __toESM(require("chalk"), 1);
|
|
1776
|
-
var v5 = __toESM(require("valibot"), 1);
|
|
1777
|
-
|
|
1778
|
-
// src/config/validate/watcher.ts
|
|
1779
|
-
var import_chokidar = __toESM(require("chokidar"), 1);
|
|
1780
|
-
function watchConfigFile(configPath, onFileChange) {
|
|
1781
|
-
const watcher = import_chokidar.default.watch(configPath, {
|
|
1782
|
-
persistent: true,
|
|
1783
|
-
ignoreInitial: true
|
|
1784
|
-
});
|
|
1785
|
-
let isProcessing = false;
|
|
1786
|
-
let timeoutId = null;
|
|
1787
|
-
const debouncedOnChange = () => {
|
|
1788
|
-
if (isProcessing) return;
|
|
1789
|
-
if (timeoutId) {
|
|
1790
|
-
clearTimeout(timeoutId);
|
|
1791
|
-
}
|
|
1792
|
-
timeoutId = setTimeout(async () => {
|
|
1793
|
-
isProcessing = true;
|
|
1794
|
-
try {
|
|
1795
|
-
await onFileChange();
|
|
1796
|
-
} catch (error2) {
|
|
1797
|
-
handleError(error2);
|
|
1798
|
-
} finally {
|
|
1799
|
-
isProcessing = false;
|
|
1800
|
-
}
|
|
1801
|
-
}, 300);
|
|
1802
|
-
};
|
|
1803
|
-
watcher.on("change", debouncedOnChange);
|
|
1804
|
-
watcher.on("add", debouncedOnChange);
|
|
1805
|
-
watcher.on("unlink", debouncedOnChange);
|
|
1806
|
-
const terminate = () => {
|
|
1807
|
-
watcher.close();
|
|
1808
|
-
process.exit(0);
|
|
1809
|
-
};
|
|
1810
|
-
process.on("SIGINT", terminate);
|
|
1811
|
-
process.on("SIGTERM", terminate);
|
|
1812
|
-
watcher.on("error", (error2) => {
|
|
1813
|
-
handleError(error2);
|
|
1814
|
-
});
|
|
1815
|
-
return watcher;
|
|
1816
|
-
}
|
|
1817
|
-
|
|
1818
|
-
// src/config/validate/command.ts
|
|
1819
|
-
var validateConfigCommand = new import_commander6.Command("validate").description("validate orizm.config.ts for validation errors").option("-c, --config <path>", "Path to config file", "./orizm.config.ts").option("-w, --watch", "Watch for file changes and re-validate").action(async (options) => {
|
|
1820
|
-
try {
|
|
1821
|
-
const validateConfig = async () => {
|
|
1822
|
-
try {
|
|
1823
|
-
if (options.watch) {
|
|
1824
|
-
console.clear();
|
|
1825
|
-
console.log(
|
|
1826
|
-
`\u{1F440} Watching ${options.config} for changes... (Press Ctrl+C to stop)`
|
|
1827
|
-
);
|
|
1828
|
-
console.log();
|
|
1829
|
-
}
|
|
1830
|
-
await loadConfig(options.config);
|
|
1831
|
-
console.log(import_chalk7.default.green("\u2705 Config is valid."));
|
|
1832
|
-
} catch (error2) {
|
|
1833
|
-
if (v5.isValiError(error2)) {
|
|
1834
|
-
console.error(import_chalk7.default.red("\u274C Config validation failed:"));
|
|
1835
|
-
displayValibotError(error2);
|
|
1836
|
-
return;
|
|
1837
|
-
}
|
|
1838
|
-
throw error2;
|
|
1839
|
-
}
|
|
1840
|
-
};
|
|
1841
|
-
await validateConfig();
|
|
1842
|
-
if (options.watch) {
|
|
1843
|
-
watchConfigFile(options.config, validateConfig);
|
|
1844
|
-
}
|
|
1845
|
-
} catch (error2) {
|
|
1846
|
-
handleError(error2);
|
|
1847
|
-
}
|
|
1848
|
-
});
|
|
1849
|
-
|
|
1850
|
-
// src/config/generate-erd/command.ts
|
|
1851
|
-
var import_commander7 = require("commander");
|
|
1852
|
-
|
|
1853
|
-
// src/config/generate-erd/generate.ts
|
|
1854
|
-
function generate3(input2) {
|
|
1855
|
-
const tables = input2.tables.map((table) => {
|
|
1856
|
-
const columns = [
|
|
1857
|
-
" id string PK",
|
|
1858
|
-
...table.columns.map(
|
|
1859
|
-
(col) => ` ${col.name} ${col.type}${col.isForeignKey ? " FK" : ""}`
|
|
1860
|
-
)
|
|
1861
|
-
].join("\n");
|
|
1862
|
-
return ` ${table.name} {
|
|
1863
|
-
${columns}
|
|
1864
|
-
}`;
|
|
1865
|
-
}).join("\n");
|
|
1866
|
-
const relations = input2.relations.map((rel) => ` ${rel.from} ${rel.type} ${rel.to} : ${rel.comment}`).join("\n");
|
|
1867
|
-
return `generated by @orizm/cli
|
|
1868
|
-
|
|
1869
|
-
\`\`\`mermaid
|
|
1870
|
-
erDiagram
|
|
1871
|
-
${tables}
|
|
1872
|
-
|
|
1873
|
-
${relations}
|
|
1874
|
-
\`\`\``;
|
|
1875
|
-
}
|
|
1876
|
-
|
|
1877
|
-
// src/config/generate-erd/convert-to-input.ts
|
|
1878
|
-
function convertToInput(config) {
|
|
1879
|
-
const tables = [];
|
|
1880
|
-
const relations = [];
|
|
1881
|
-
for (const table of config.tables) {
|
|
1882
|
-
const modules = [];
|
|
1883
|
-
const erdTable = {
|
|
1884
|
-
name: table.name,
|
|
1885
|
-
columns: []
|
|
1886
|
-
};
|
|
1887
|
-
for (const column of table.columns) {
|
|
1888
|
-
erdTable.columns.push({
|
|
1889
|
-
name: column.name,
|
|
1890
|
-
type: column.type,
|
|
1891
|
-
isForeignKey: column.type === "reference"
|
|
1892
|
-
});
|
|
1893
|
-
if (column.type === "reference") {
|
|
1894
|
-
relations.push({
|
|
1895
|
-
from: column.tableName,
|
|
1896
|
-
to: table.name,
|
|
1897
|
-
type: RELATION.ONE_TO_MANY,
|
|
1898
|
-
comment: "reference"
|
|
1899
|
-
});
|
|
1900
|
-
}
|
|
1901
|
-
if (column.type === "module" || column.type === "module-array") {
|
|
1902
|
-
const module2 = config.tableModules?.find(
|
|
1903
|
-
(m) => m.name === column.moduleName
|
|
1904
|
-
);
|
|
1905
|
-
if (!module2) {
|
|
1906
|
-
continue;
|
|
1907
|
-
}
|
|
1908
|
-
const moduleTableName = `${table.name}_${column.name}_${column.moduleName}`;
|
|
1909
|
-
modules.push({
|
|
1910
|
-
name: moduleTableName,
|
|
1911
|
-
columns: module2.columns.map((c) => ({
|
|
1912
|
-
name: c.name,
|
|
1913
|
-
type: c.type,
|
|
1914
|
-
isForeignKey: c.type === "reference"
|
|
1915
|
-
}))
|
|
1916
|
-
});
|
|
1917
|
-
relations.push({
|
|
1918
|
-
from: table.name,
|
|
1919
|
-
to: moduleTableName,
|
|
1920
|
-
type: column.type === "module" ? RELATION.ONE_TO_ONE : RELATION.ONE_TO_MANY,
|
|
1921
|
-
comment: column.type === "module" ? "module" : "module-array"
|
|
1922
|
-
});
|
|
1923
|
-
for (const moduleColumn of module2.columns) {
|
|
1924
|
-
if (moduleColumn.type === "reference" && moduleColumn.tableName) {
|
|
1925
|
-
relations.push({
|
|
1926
|
-
from: moduleTableName,
|
|
1927
|
-
to: moduleColumn.tableName,
|
|
1928
|
-
type: RELATION.ONE_TO_MANY,
|
|
1929
|
-
comment: "reference"
|
|
1930
|
-
});
|
|
1931
|
-
}
|
|
1932
|
-
}
|
|
1933
|
-
}
|
|
1934
|
-
}
|
|
1935
|
-
tables.push(erdTable);
|
|
1936
|
-
tables.push(...modules);
|
|
1937
|
-
}
|
|
1938
|
-
return {
|
|
1939
|
-
tables,
|
|
1940
|
-
relations
|
|
1941
|
-
};
|
|
1942
|
-
}
|
|
1943
|
-
var RELATION = {
|
|
1944
|
-
ONE_TO_MANY: "||--o{",
|
|
1945
|
-
ONE_TO_ONE: "||--||"
|
|
1946
|
-
};
|
|
1947
|
-
|
|
1948
|
-
// src/config/generate-erd/command.ts
|
|
1949
|
-
var generateErdCommand = new import_commander7.Command("generate-erd").description("generate er diagram in mermaid format from orizm.config.ts").option("-c, --config <path>", "orizm config file path.", "orizm.config.ts").action(async (options) => {
|
|
1950
|
-
try {
|
|
1951
|
-
const config = await loadConfig(options.config);
|
|
1952
|
-
const input2 = convertToInput(config);
|
|
1953
|
-
const mermaidText = generate3(input2);
|
|
1954
|
-
console.log(mermaidText);
|
|
1955
|
-
} catch (error2) {
|
|
1956
|
-
handleError(error2);
|
|
1957
|
-
}
|
|
1958
|
-
});
|
|
1959
|
-
|
|
1960
|
-
// src/cli.ts
|
|
1961
|
-
import_commander8.program.name("orizm CLI");
|
|
1962
|
-
import_commander8.program.addCommand(pushCommand);
|
|
1963
|
-
var cmsCommands = new import_commander8.Command("cms").description("cms commands.");
|
|
1964
|
-
cmsCommands.addCommand(cmsGenerateCommand);
|
|
1965
|
-
cmsCommands.addCommand(cmsPullCommand);
|
|
1966
|
-
import_commander8.program.addCommand(cmsCommands);
|
|
1967
|
-
var consumerCommands = new import_commander8.Command("consumer").description(
|
|
1968
|
-
"consumer commands."
|
|
1969
|
-
);
|
|
1970
|
-
consumerCommands.addCommand(consumerGenerateCommand);
|
|
1971
|
-
consumerCommands.addCommand(consumerPullCommand);
|
|
1972
|
-
import_commander8.program.addCommand(consumerCommands);
|
|
1973
|
-
var configCommands = new import_commander8.Command("config").description("config commands.");
|
|
1974
|
-
configCommands.addCommand(validateConfigCommand);
|
|
1975
|
-
configCommands.addCommand(generateErdCommand);
|
|
1976
|
-
import_commander8.program.addCommand(configCommands);
|
|
1977
|
-
import_commander8.program.parse();
|
|
1978
|
-
//# sourceMappingURL=cli.cjs.map
|