@deenruv/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE +23 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +64 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/add/add.d.ts +1 -0
  6. package/dist/commands/add/add.js +70 -0
  7. package/dist/commands/add/add.js.map +1 -0
  8. package/dist/commands/add/api-extension/add-api-extension.d.ts +9 -0
  9. package/dist/commands/add/api-extension/add-api-extension.js +524 -0
  10. package/dist/commands/add/api-extension/add-api-extension.js.map +1 -0
  11. package/dist/commands/add/api-extension/templates/api-extensions.template.ts +3 -0
  12. package/dist/commands/add/api-extension/templates/crud-resolver.template.ts +127 -0
  13. package/dist/commands/add/api-extension/templates/simple-resolver.template.ts +37 -0
  14. package/dist/commands/add/codegen/add-codegen.d.ts +8 -0
  15. package/dist/commands/add/codegen/add-codegen.js +113 -0
  16. package/dist/commands/add/codegen/add-codegen.js.map +1 -0
  17. package/dist/commands/add/codegen/codegen-config-ref.d.ts +10 -0
  18. package/dist/commands/add/codegen/codegen-config-ref.js +52 -0
  19. package/dist/commands/add/codegen/codegen-config-ref.js.map +1 -0
  20. package/dist/commands/add/codegen/templates/codegen.template.ts +17 -0
  21. package/dist/commands/add/entity/add-entity.d.ts +17 -0
  22. package/dist/commands/add/entity/add-entity.js +160 -0
  23. package/dist/commands/add/entity/add-entity.js.map +1 -0
  24. package/dist/commands/add/entity/codemods/add-entity-to-plugin/add-entity-to-plugin.d.ts +3 -0
  25. package/dist/commands/add/entity/codemods/add-entity-to-plugin/add-entity-to-plugin.js +17 -0
  26. package/dist/commands/add/entity/codemods/add-entity-to-plugin/add-entity-to-plugin.js.map +1 -0
  27. package/dist/commands/add/entity/templates/entity-translation.template.ts +31 -0
  28. package/dist/commands/add/entity/templates/entity.template.ts +36 -0
  29. package/dist/commands/add/job-queue/add-job-queue.d.ts +9 -0
  30. package/dist/commands/add/job-queue/add-job-queue.js +139 -0
  31. package/dist/commands/add/job-queue/add-job-queue.js.map +1 -0
  32. package/dist/commands/add/plugin/create-new-plugin.d.ts +10 -0
  33. package/dist/commands/add/plugin/create-new-plugin.js +240 -0
  34. package/dist/commands/add/plugin/create-new-plugin.js.map +1 -0
  35. package/dist/commands/add/plugin/templates/constants.template.ts +2 -0
  36. package/dist/commands/add/plugin/templates/plugin.template.ts +30 -0
  37. package/dist/commands/add/plugin/templates/types.template.ts +7 -0
  38. package/dist/commands/add/plugin/types.d.ts +8 -0
  39. package/dist/commands/add/plugin/types.js +3 -0
  40. package/dist/commands/add/plugin/types.js.map +1 -0
  41. package/dist/commands/add/service/add-service.d.ts +5 -0
  42. package/dist/commands/add/service/add-service.js +317 -0
  43. package/dist/commands/add/service/add-service.js.map +1 -0
  44. package/dist/commands/add/service/templates/basic-service.template.ts +20 -0
  45. package/dist/commands/add/service/templates/entity-service.template.ts +182 -0
  46. package/dist/commands/add/ui-extensions/add-ui-extensions.d.ts +6 -0
  47. package/dist/commands/add/ui-extensions/add-ui-extensions.js +101 -0
  48. package/dist/commands/add/ui-extensions/add-ui-extensions.js.map +1 -0
  49. package/dist/commands/add/ui-extensions/codemods/add-ui-extension-static-prop/add-ui-extension-static-prop.d.ts +2 -0
  50. package/dist/commands/add/ui-extensions/codemods/add-ui-extension-static-prop/add-ui-extension-static-prop.js +36 -0
  51. package/dist/commands/add/ui-extensions/codemods/add-ui-extension-static-prop/add-ui-extension-static-prop.js.map +1 -0
  52. package/dist/commands/add/ui-extensions/codemods/update-admin-ui-plugin-init/update-admin-ui-plugin-init.d.ts +5 -0
  53. package/dist/commands/add/ui-extensions/codemods/update-admin-ui-plugin-init/update-admin-ui-plugin-init.js +63 -0
  54. package/dist/commands/add/ui-extensions/codemods/update-admin-ui-plugin-init/update-admin-ui-plugin-init.js.map +1 -0
  55. package/dist/commands/add/ui-extensions/templates/providers.template.ts +3 -0
  56. package/dist/commands/add/ui-extensions/templates/routes.template.ts +3 -0
  57. package/dist/commands/migrate/generate-migration/generate-migration.d.ts +2 -0
  58. package/dist/commands/migrate/generate-migration/generate-migration.js +112 -0
  59. package/dist/commands/migrate/generate-migration/generate-migration.js.map +1 -0
  60. package/dist/commands/migrate/load-deenruv-config-file.d.ts +3 -0
  61. package/dist/commands/migrate/load-deenruv-config-file.js +66 -0
  62. package/dist/commands/migrate/load-deenruv-config-file.js.map +1 -0
  63. package/dist/commands/migrate/migrate.d.ts +1 -0
  64. package/dist/commands/migrate/migrate.js +50 -0
  65. package/dist/commands/migrate/migrate.js.map +1 -0
  66. package/dist/commands/migrate/revert-migration/revert-migration.d.ts +2 -0
  67. package/dist/commands/migrate/revert-migration/revert-migration.js +31 -0
  68. package/dist/commands/migrate/revert-migration/revert-migration.js.map +1 -0
  69. package/dist/commands/migrate/run-migration/run-migration.d.ts +2 -0
  70. package/dist/commands/migrate/run-migration/run-migration.js +34 -0
  71. package/dist/commands/migrate/run-migration/run-migration.js.map +1 -0
  72. package/dist/constants.d.ts +10 -0
  73. package/dist/constants.js +17 -0
  74. package/dist/constants.js.map +1 -0
  75. package/dist/shared/cli-command.d.ts +24 -0
  76. package/dist/shared/cli-command.js +22 -0
  77. package/dist/shared/cli-command.js.map +1 -0
  78. package/dist/shared/deenruv-config-ref.d.ts +14 -0
  79. package/dist/shared/deenruv-config-ref.js +69 -0
  80. package/dist/shared/deenruv-config-ref.js.map +1 -0
  81. package/dist/shared/deenruv-plugin-ref.d.ts +22 -0
  82. package/dist/shared/deenruv-plugin-ref.js +184 -0
  83. package/dist/shared/deenruv-plugin-ref.js.map +1 -0
  84. package/dist/shared/entity-ref.d.ts +16 -0
  85. package/dist/shared/entity-ref.js +61 -0
  86. package/dist/shared/entity-ref.js.map +1 -0
  87. package/dist/shared/package-json-ref.d.ts +25 -0
  88. package/dist/shared/package-json-ref.js +181 -0
  89. package/dist/shared/package-json-ref.js.map +1 -0
  90. package/dist/shared/service-ref.d.ts +25 -0
  91. package/dist/shared/service-ref.js +92 -0
  92. package/dist/shared/service-ref.js.map +1 -0
  93. package/dist/shared/shared-prompts.d.ts +16 -0
  94. package/dist/shared/shared-prompts.js +170 -0
  95. package/dist/shared/shared-prompts.js.map +1 -0
  96. package/dist/utilities/ast-utils.d.ts +20 -0
  97. package/dist/utilities/ast-utils.js +173 -0
  98. package/dist/utilities/ast-utils.js.map +1 -0
  99. package/dist/utilities/utils.d.ts +2 -0
  100. package/dist/utilities/utils.js +12 -0
  101. package/dist/utilities/utils.js.map +1 -0
  102. package/package.json +57 -0
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceRef = void 0;
4
+ const ts_morph_1 = require("ts-morph");
5
+ const entity_ref_1 = require("./entity-ref");
6
+ class ServiceRef {
7
+ get name() {
8
+ return this.classDeclaration.getName();
9
+ }
10
+ get nameCamelCase() {
11
+ return this.name.charAt(0).toLowerCase() + this.name.slice(1);
12
+ }
13
+ get isCrudService() {
14
+ return this.crudEntityRef !== undefined;
15
+ }
16
+ constructor(classDeclaration) {
17
+ this.classDeclaration = classDeclaration;
18
+ this.features = {
19
+ findOne: !!this.classDeclaration.getMethod("findOne"),
20
+ findAll: !!this.classDeclaration.getMethod("findAll"),
21
+ create: !!this.classDeclaration.getMethod("create"),
22
+ update: !!this.classDeclaration.getMethod("update"),
23
+ delete: !!this.classDeclaration.getMethod("delete"),
24
+ };
25
+ this.crudEntityRef = this.getEntityRef();
26
+ }
27
+ injectDependency(dependency) {
28
+ var _a;
29
+ for (const constructorDeclaration of this.classDeclaration.getConstructors()) {
30
+ const existingParam = constructorDeclaration.getParameter(dependency.name);
31
+ if (!existingParam) {
32
+ constructorDeclaration.addParameter({
33
+ name: dependency.name,
34
+ type: dependency.type,
35
+ hasQuestionToken: false,
36
+ isReadonly: false,
37
+ scope: (_a = dependency.scope) !== null && _a !== void 0 ? _a : ts_morph_1.Scope.Private,
38
+ });
39
+ }
40
+ }
41
+ }
42
+ getEntityRef() {
43
+ var _a;
44
+ if (this.features.findOne) {
45
+ const potentialCrudMethodNames = [
46
+ "findOne",
47
+ "findAll",
48
+ "create",
49
+ "update",
50
+ "delete",
51
+ ];
52
+ for (const methodName of potentialCrudMethodNames) {
53
+ const findOneMethod = this.classDeclaration.getMethod(methodName);
54
+ const returnType = findOneMethod === null || findOneMethod === void 0 ? void 0 : findOneMethod.getReturnType();
55
+ if (returnType) {
56
+ const unwrappedReturnType = this.unwrapReturnType(returnType);
57
+ const typeDeclaration = unwrappedReturnType
58
+ .getSymbolOrThrow()
59
+ .getDeclarations()[0];
60
+ if (typeDeclaration && ts_morph_1.Node.isClassDeclaration(typeDeclaration)) {
61
+ if (((_a = typeDeclaration.getExtends()) === null || _a === void 0 ? void 0 : _a.getText()) === "DeenruvEntity") {
62
+ return new entity_ref_1.EntityRef(typeDeclaration);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ return;
69
+ }
70
+ unwrapReturnType(returnType) {
71
+ if (returnType.isUnion()) {
72
+ const nonNullType = returnType
73
+ .getUnionTypes()
74
+ .find((t) => !t.isNull() && !t.isUndefined());
75
+ if (!nonNullType) {
76
+ throw new Error("Could not find non-null type in union");
77
+ }
78
+ return this.unwrapReturnType(nonNullType);
79
+ }
80
+ const typeArguments = returnType.getTypeArguments();
81
+ if (typeArguments.length) {
82
+ return this.unwrapReturnType(typeArguments[0]);
83
+ }
84
+ const aliasTypeArguments = returnType.getAliasTypeArguments();
85
+ if (aliasTypeArguments.length) {
86
+ return this.unwrapReturnType(aliasTypeArguments[0]);
87
+ }
88
+ return returnType;
89
+ }
90
+ }
91
+ exports.ServiceRef = ServiceRef;
92
+ //# sourceMappingURL=service-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-ref.js","sourceRoot":"","sources":["../../src/shared/service-ref.ts"],"names":[],"mappings":";;;AAAA,uCAA+D;AAE/D,6CAAyC;AAUzC,MAAa,UAAU;IAIrB,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAY,CAAC;IACnD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;IAC1C,CAAC;IAED,YAA4B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAC5D,IAAI,CAAC,QAAQ,GAAG;YACd,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC;YACrD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC;YACrD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;YACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;YACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;SACpD,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,UAAyD;;QACxE,KAAK,MAAM,sBAAsB,IAAI,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,EAAE,CAAC;YAC7E,MAAM,aAAa,GAAG,sBAAsB,CAAC,YAAY,CACvD,UAAU,CAAC,IAAI,CAChB,CAAC;YACF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,sBAAsB,CAAC,YAAY,CAAC;oBAClC,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,gBAAgB,EAAE,KAAK;oBACvB,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,MAAA,UAAU,CAAC,KAAK,mCAAI,gBAAK,CAAC,OAAO;iBACzC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY;;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,wBAAwB,GAAG;gBAC/B,SAAS;gBACT,SAAS;gBACT,QAAQ;gBACR,QAAQ;gBACR,QAAQ;aACT,CAAC;YACF,KAAK,MAAM,UAAU,IAAI,wBAAwB,EAAE,CAAC;gBAClD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,UAAU,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,aAAa,EAAE,CAAC;gBAClD,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;oBAC9D,MAAM,eAAe,GAAG,mBAAmB;yBACxC,gBAAgB,EAAE;yBAClB,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,eAAe,IAAI,eAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAC;wBAChE,IAAI,CAAA,MAAA,eAAe,CAAC,UAAU,EAAE,0CAAE,OAAO,EAAE,MAAK,eAAe,EAAE,CAAC;4BAChE,OAAO,IAAI,sBAAS,CAAC,eAAe,CAAC,CAAC;wBACxC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAEO,gBAAgB,CAAC,UAAgB;QACvC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YAEzB,MAAM,WAAW,GAAG,UAAU;iBAC3B,aAAa,EAAE;iBACf,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACpD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,kBAAkB,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;QAC9D,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AA7FD,gCA6FC"}
@@ -0,0 +1,16 @@
1
+ import { Project } from "ts-morph";
2
+ import { EntityRef } from "./entity-ref";
3
+ import { ServiceRef } from "./service-ref";
4
+ import { DeenruvPluginRef } from "./deenruv-plugin-ref";
5
+ export declare function analyzeProject(options: {
6
+ providedDeenruvPlugin?: DeenruvPluginRef;
7
+ cancelledMessage?: string;
8
+ }): Promise<{
9
+ project: Project;
10
+ tsConfigPath: string | undefined;
11
+ }>;
12
+ export declare function selectPlugin(project: Project, cancelledMessage: string): Promise<DeenruvPluginRef>;
13
+ export declare function selectEntity(plugin: DeenruvPluginRef): Promise<EntityRef>;
14
+ export declare function selectMultiplePluginClasses(project: Project, cancelledMessage: string): Promise<DeenruvPluginRef[]>;
15
+ export declare function selectServiceRef(project: Project, plugin: DeenruvPluginRef, canCreateNew?: boolean): Promise<ServiceRef>;
16
+ export declare function getServices(project: Project): ServiceRef[];
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServices = exports.selectServiceRef = exports.selectMultiplePluginClasses = exports.selectEntity = exports.selectPlugin = exports.analyzeProject = void 0;
4
+ const prompts_1 = require("@clack/prompts");
5
+ const add_service_1 = require("../commands/add/service/add-service");
6
+ const constants_1 = require("../constants");
7
+ const ast_utils_1 = require("../utilities/ast-utils");
8
+ const utils_1 = require("../utilities/utils");
9
+ const service_ref_1 = require("./service-ref");
10
+ const deenruv_plugin_ref_1 = require("./deenruv-plugin-ref");
11
+ async function analyzeProject(options) {
12
+ const providedDeenruvPlugin = options.providedDeenruvPlugin;
13
+ let project = providedDeenruvPlugin === null || providedDeenruvPlugin === void 0 ? void 0 : providedDeenruvPlugin.classDeclaration.getProject();
14
+ let tsConfigPath;
15
+ if (!providedDeenruvPlugin) {
16
+ const projectSpinner = (0, prompts_1.spinner)();
17
+ const tsConfigFile = await (0, ast_utils_1.selectTsConfigFile)();
18
+ projectSpinner.start("Analyzing project...");
19
+ await (0, utils_1.pauseForPromptDisplay)();
20
+ const { project: _project, tsConfigPath: _tsConfigPath } = await (0, ast_utils_1.getTsMorphProject)({}, tsConfigFile);
21
+ project = _project;
22
+ tsConfigPath = _tsConfigPath;
23
+ projectSpinner.stop("Project analyzed");
24
+ }
25
+ return { project: project, tsConfigPath };
26
+ }
27
+ exports.analyzeProject = analyzeProject;
28
+ async function selectPlugin(project, cancelledMessage) {
29
+ const pluginClasses = (0, ast_utils_1.getPluginClasses)(project);
30
+ if (pluginClasses.length === 0) {
31
+ (0, prompts_1.cancel)(constants_1.Messages.NoPluginsFound);
32
+ process.exit(0);
33
+ }
34
+ const targetPlugin = await (0, prompts_1.select)({
35
+ message: "To which plugin would you like to add the feature?",
36
+ options: pluginClasses.map((c) => ({
37
+ value: c,
38
+ label: c.getName(),
39
+ })),
40
+ maxItems: 10,
41
+ });
42
+ if ((0, prompts_1.isCancel)(targetPlugin)) {
43
+ (0, prompts_1.cancel)(cancelledMessage);
44
+ process.exit(0);
45
+ }
46
+ return new deenruv_plugin_ref_1.DeenruvPluginRef(targetPlugin);
47
+ }
48
+ exports.selectPlugin = selectPlugin;
49
+ async function selectEntity(plugin) {
50
+ const entities = plugin.getEntities();
51
+ if (entities.length === 0) {
52
+ throw new Error(constants_1.Messages.NoEntitiesFound);
53
+ }
54
+ const targetEntity = await (0, prompts_1.select)({
55
+ message: "Select an entity",
56
+ options: entities
57
+ .filter((e) => !e.isTranslation())
58
+ .map((e) => ({
59
+ value: e,
60
+ label: e.name,
61
+ })),
62
+ maxItems: 10,
63
+ });
64
+ if ((0, prompts_1.isCancel)(targetEntity)) {
65
+ (0, prompts_1.cancel)("Cancelled");
66
+ process.exit(0);
67
+ }
68
+ return targetEntity;
69
+ }
70
+ exports.selectEntity = selectEntity;
71
+ async function selectMultiplePluginClasses(project, cancelledMessage) {
72
+ const pluginClasses = (0, ast_utils_1.getPluginClasses)(project);
73
+ if (pluginClasses.length === 0) {
74
+ (0, prompts_1.cancel)(constants_1.Messages.NoPluginsFound);
75
+ process.exit(0);
76
+ }
77
+ const selectAll = await (0, prompts_1.select)({
78
+ message: "To which plugin would you like to add the feature?",
79
+ options: [
80
+ {
81
+ value: "all",
82
+ label: "All plugins",
83
+ },
84
+ {
85
+ value: "specific",
86
+ label: "Specific plugins (you will be prompted to select the plugins)",
87
+ },
88
+ ],
89
+ });
90
+ if ((0, prompts_1.isCancel)(selectAll)) {
91
+ (0, prompts_1.cancel)(cancelledMessage);
92
+ process.exit(0);
93
+ }
94
+ if (selectAll === "all") {
95
+ return pluginClasses.map((pc) => new deenruv_plugin_ref_1.DeenruvPluginRef(pc));
96
+ }
97
+ const targetPlugins = await (0, prompts_1.multiselect)({
98
+ message: "Select one or more plugins (use ↑, ↓, space to select)",
99
+ options: pluginClasses.map((c) => ({
100
+ value: c,
101
+ label: c.getName(),
102
+ })),
103
+ });
104
+ if ((0, prompts_1.isCancel)(targetPlugins)) {
105
+ (0, prompts_1.cancel)(cancelledMessage);
106
+ process.exit(0);
107
+ }
108
+ return targetPlugins.map((pc) => new deenruv_plugin_ref_1.DeenruvPluginRef(pc));
109
+ }
110
+ exports.selectMultiplePluginClasses = selectMultiplePluginClasses;
111
+ async function selectServiceRef(project, plugin, canCreateNew = true) {
112
+ const serviceRefs = getServices(project).filter((sr) => {
113
+ return sr.classDeclaration
114
+ .getSourceFile()
115
+ .getDirectoryPath()
116
+ .includes(plugin.getSourceFile().getDirectoryPath());
117
+ });
118
+ if (serviceRefs.length === 0 && !canCreateNew) {
119
+ throw new Error(constants_1.Messages.NoServicesFound);
120
+ }
121
+ const result = await (0, prompts_1.select)({
122
+ message: "Which service contains the business logic for this API extension?",
123
+ maxItems: 8,
124
+ options: [
125
+ ...(canCreateNew
126
+ ? [
127
+ {
128
+ value: "new",
129
+ label: `Create new generic service`,
130
+ },
131
+ ]
132
+ : []),
133
+ ...serviceRefs.map((sr) => {
134
+ const features = sr.crudEntityRef
135
+ ? `CRUD service for ${sr.crudEntityRef.name}`
136
+ : `Generic service`;
137
+ const label = `${sr.name}: (${features})`;
138
+ return {
139
+ value: sr,
140
+ label,
141
+ };
142
+ }),
143
+ ],
144
+ });
145
+ if ((0, prompts_1.isCancel)(result)) {
146
+ (0, prompts_1.cancel)("Cancelled");
147
+ process.exit(0);
148
+ }
149
+ if (result === "new") {
150
+ return add_service_1.addServiceCommand
151
+ .run({ type: "basic", plugin })
152
+ .then((r) => r.serviceRef);
153
+ }
154
+ else {
155
+ return result;
156
+ }
157
+ }
158
+ exports.selectServiceRef = selectServiceRef;
159
+ function getServices(project) {
160
+ const servicesSourceFiles = project.getSourceFiles().filter((sf) => {
161
+ return (sf.getDirectory().getPath().endsWith("/services") ||
162
+ sf.getDirectory().getPath().endsWith("/service"));
163
+ });
164
+ return servicesSourceFiles
165
+ .flatMap((sf) => sf.getClasses())
166
+ .filter((classDeclaration) => classDeclaration.getDecorator("Injectable"))
167
+ .map((classDeclaration) => new service_ref_1.ServiceRef(classDeclaration));
168
+ }
169
+ exports.getServices = getServices;
170
+ //# sourceMappingURL=shared-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-prompts.js","sourceRoot":"","sources":["../../src/shared/shared-prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Directory, Project, ProjectOptions, SourceFile } from "ts-morph";
2
+ import { EntityRef } from "../shared/entity-ref";
3
+ export declare function selectTsConfigFile(): Promise<string>;
4
+ export declare function getTsMorphProject(options?: ProjectOptions, providedTsConfigPath?: string): Promise<{
5
+ project: Project;
6
+ tsConfigPath: string;
7
+ }>;
8
+ export declare function getPluginClasses(project: Project): import("ts-morph").ClassDeclaration[];
9
+ export declare function addImportsToFile(sourceFile: SourceFile, options: {
10
+ moduleSpecifier: string | SourceFile;
11
+ namedImports?: string[];
12
+ namespaceImport?: string;
13
+ order?: number;
14
+ }): void;
15
+ export declare function getRelativeImportPath(locations: {
16
+ from: SourceFile | Directory;
17
+ to: SourceFile | Directory;
18
+ }): string;
19
+ export declare function createFile(project: Project, templatePath: string, filePath: string): SourceFile;
20
+ export declare function customizeCreateUpdateInputInterfaces(sourceFile: SourceFile, entityRef: EntityRef): void;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.customizeCreateUpdateInputInterfaces = exports.createFile = exports.getRelativeImportPath = exports.addImportsToFile = exports.getPluginClasses = exports.getTsMorphProject = exports.selectTsConfigFile = void 0;
7
+ const prompts_1 = require("@clack/prompts");
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const ts_morph_1 = require("ts-morph");
11
+ const constants_1 = require("../constants");
12
+ async function selectTsConfigFile() {
13
+ const tsConfigFiles = fs_extra_1.default
14
+ .readdirSync(process.cwd())
15
+ .filter((f) => /^tsconfig.*\.json$/.test(f));
16
+ if (tsConfigFiles.length === 0) {
17
+ throw new Error("No tsconfig files found in current directory");
18
+ }
19
+ if (tsConfigFiles.length === 1) {
20
+ return tsConfigFiles[0];
21
+ }
22
+ const selectedConfigFile = await (0, prompts_1.select)({
23
+ message: "Multiple tsconfig files found. Select one:",
24
+ options: tsConfigFiles.map((c) => ({
25
+ value: c,
26
+ label: node_path_1.default.basename(c),
27
+ })),
28
+ maxItems: 10,
29
+ });
30
+ if ((0, prompts_1.isCancel)(selectedConfigFile)) {
31
+ (0, prompts_1.cancel)();
32
+ process.exit(0);
33
+ }
34
+ return selectedConfigFile;
35
+ }
36
+ exports.selectTsConfigFile = selectTsConfigFile;
37
+ async function getTsMorphProject(options = {}, providedTsConfigPath) {
38
+ const tsConfigFile = providedTsConfigPath !== null && providedTsConfigPath !== void 0 ? providedTsConfigPath : (await selectTsConfigFile());
39
+ const tsConfigPath = node_path_1.default.join(process.cwd(), tsConfigFile);
40
+ if (!fs_extra_1.default.existsSync(tsConfigPath)) {
41
+ throw new Error("No tsconfig.json found in current directory");
42
+ }
43
+ const project = new ts_morph_1.Project(Object.assign({ tsConfigFilePath: tsConfigPath, manipulationSettings: constants_1.defaultManipulationSettings, compilerOptions: {
44
+ skipLibCheck: true,
45
+ } }, options));
46
+ project.enableLogging(false);
47
+ return { project, tsConfigPath };
48
+ }
49
+ exports.getTsMorphProject = getTsMorphProject;
50
+ function getPluginClasses(project) {
51
+ const sourceFiles = project.getSourceFiles();
52
+ const pluginClasses = sourceFiles
53
+ .flatMap((sf) => {
54
+ return sf.getClasses();
55
+ })
56
+ .filter((c) => {
57
+ const hasPluginDecorator = c.getModifiers().find((m) => {
58
+ return ts_morph_1.Node.isDecorator(m) && m.getName() === "DeenruvPlugin";
59
+ });
60
+ return !!hasPluginDecorator;
61
+ });
62
+ return pluginClasses;
63
+ }
64
+ exports.getPluginClasses = getPluginClasses;
65
+ function addImportsToFile(sourceFile, options) {
66
+ const moduleSpecifier = getModuleSpecifierString(options.moduleSpecifier, sourceFile);
67
+ const existingDeclaration = sourceFile.getImportDeclaration((declaration) => declaration.getModuleSpecifier().getLiteralValue() === moduleSpecifier);
68
+ if (!existingDeclaration) {
69
+ const importDeclaration = sourceFile.addImportDeclaration(Object.assign(Object.assign({ moduleSpecifier }, (options.namespaceImport
70
+ ? { namespaceImport: options.namespaceImport }
71
+ : {})), (options.namedImports ? { namedImports: options.namedImports } : {})));
72
+ if (options.order != null) {
73
+ importDeclaration.setOrder(options.order);
74
+ }
75
+ }
76
+ else {
77
+ if (options.namespaceImport &&
78
+ !existingDeclaration.getNamespaceImport() &&
79
+ !existingDeclaration.getDefaultImport()) {
80
+ existingDeclaration.setNamespaceImport(options.namespaceImport);
81
+ }
82
+ if (options.namedImports) {
83
+ const existingNamedImports = existingDeclaration.getNamedImports();
84
+ for (const namedImport of options.namedImports) {
85
+ if (!existingNamedImports.find((ni) => ni.getName() === namedImport)) {
86
+ existingDeclaration.addNamedImport(namedImport);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ exports.addImportsToFile = addImportsToFile;
93
+ function getModuleSpecifierString(moduleSpecifier, sourceFile) {
94
+ if (typeof moduleSpecifier === "string") {
95
+ return moduleSpecifier;
96
+ }
97
+ return getRelativeImportPath({ from: sourceFile, to: moduleSpecifier });
98
+ }
99
+ function getRelativeImportPath(locations) {
100
+ const fromPath = locations.from instanceof ts_morph_1.SourceFile
101
+ ? locations.from.getFilePath()
102
+ : locations.from.getPath();
103
+ const toPath = locations.to instanceof ts_morph_1.SourceFile
104
+ ? locations.to.getFilePath()
105
+ : locations.to.getPath();
106
+ const fromDir = /\.[a-z]+$/.test(fromPath)
107
+ ? node_path_1.default.dirname(fromPath)
108
+ : fromPath;
109
+ return convertPathToRelativeImport(node_path_1.default.relative(fromDir, toPath));
110
+ }
111
+ exports.getRelativeImportPath = getRelativeImportPath;
112
+ function createFile(project, templatePath, filePath) {
113
+ const template = fs_extra_1.default.readFileSync(templatePath, "utf-8");
114
+ try {
115
+ const file = project.createSourceFile(filePath, template, {
116
+ overwrite: true,
117
+ scriptKind: ts_morph_1.ScriptKind.TS,
118
+ });
119
+ project.resolveSourceFileDependencies();
120
+ return file;
121
+ }
122
+ catch (e) {
123
+ prompts_1.log.error(e.message);
124
+ process.exit(1);
125
+ }
126
+ }
127
+ exports.createFile = createFile;
128
+ function convertPathToRelativeImport(filePath) {
129
+ const normalizedPath = filePath.replace(/\\/g, "/");
130
+ const parsedPath = node_path_1.default.parse(normalizedPath);
131
+ const prefix = parsedPath.dir.startsWith("..") ? "" : "./";
132
+ return `${prefix}${parsedPath.dir}/${parsedPath.name}`.replace(/\/\//g, "/");
133
+ }
134
+ function customizeCreateUpdateInputInterfaces(sourceFile, entityRef) {
135
+ var _a, _b, _c, _d, _e, _f, _g, _h;
136
+ const createInputInterface = (_a = sourceFile
137
+ .getInterface("CreateEntityInput")) === null || _a === void 0 ? void 0 : _a.rename(`Create${entityRef.name}Input`);
138
+ const updateInputInterface = (_b = sourceFile
139
+ .getInterface("UpdateEntityInput")) === null || _b === void 0 ? void 0 : _b.rename(`Update${entityRef.name}Input`);
140
+ let index = 0;
141
+ for (const { name, type, nullable } of entityRef.getProps()) {
142
+ if (type.isBoolean() ||
143
+ type.isString() ||
144
+ type.isNumber() ||
145
+ (type.isObject() && type.getText() === "Date")) {
146
+ createInputInterface === null || createInputInterface === void 0 ? void 0 : createInputInterface.insertProperty(index, {
147
+ name,
148
+ type: (writer) => writer.write(type.getText()),
149
+ hasQuestionToken: nullable,
150
+ });
151
+ updateInputInterface === null || updateInputInterface === void 0 ? void 0 : updateInputInterface.insertProperty(index + 1, {
152
+ name,
153
+ type: (writer) => writer.write(type.getText()),
154
+ hasQuestionToken: true,
155
+ });
156
+ index++;
157
+ }
158
+ }
159
+ if (!entityRef.hasCustomFields()) {
160
+ (_c = createInputInterface === null || createInputInterface === void 0 ? void 0 : createInputInterface.getProperty("customFields")) === null || _c === void 0 ? void 0 : _c.remove();
161
+ (_d = updateInputInterface === null || updateInputInterface === void 0 ? void 0 : updateInputInterface.getProperty("customFields")) === null || _d === void 0 ? void 0 : _d.remove();
162
+ }
163
+ if (entityRef.isTranslatable()) {
164
+ (_e = createInputInterface === null || createInputInterface === void 0 ? void 0 : createInputInterface.getProperty("translations")) === null || _e === void 0 ? void 0 : _e.setType(`Array<TranslationInput<${entityRef.name}>>`);
165
+ (_f = updateInputInterface === null || updateInputInterface === void 0 ? void 0 : updateInputInterface.getProperty("translations")) === null || _f === void 0 ? void 0 : _f.setType(`Array<TranslationInput<${entityRef.name}>>`);
166
+ }
167
+ else {
168
+ (_g = createInputInterface === null || createInputInterface === void 0 ? void 0 : createInputInterface.getProperty("translations")) === null || _g === void 0 ? void 0 : _g.remove();
169
+ (_h = updateInputInterface === null || updateInputInterface === void 0 ? void 0 : updateInputInterface.getProperty("translations")) === null || _h === void 0 ? void 0 : _h.remove();
170
+ }
171
+ }
172
+ exports.customizeCreateUpdateInputInterfaces = customizeCreateUpdateInputInterfaces;
173
+ //# sourceMappingURL=ast-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../src/utilities/ast-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function pauseForPromptDisplay(): Promise<void>;
2
+ export declare function isRunningInTsNode(): boolean;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRunningInTsNode = exports.pauseForPromptDisplay = void 0;
4
+ async function pauseForPromptDisplay() {
5
+ await new Promise((resolve) => setTimeout(resolve, 100));
6
+ }
7
+ exports.pauseForPromptDisplay = pauseForPromptDisplay;
8
+ function isRunningInTsNode() {
9
+ return process[Symbol.for("ts-node.register.instance")] != null;
10
+ }
11
+ exports.isRunningInTsNode = isRunningInTsNode;
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utilities/utils.ts"],"names":[],"mappings":";;;AAIO,KAAK,UAAU,qBAAqB;IACzC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAFD,sDAEC;AAED,SAAgB,iBAAiB;IAE/B,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,IAAI,CAAC;AAClE,CAAC;AAHD,8CAGC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@deenruv/cli",
3
+ "version": "1.0.0",
4
+ "description": "A modern, headless ecommerce framework",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/deenruv-ecommerce/deenruv/"
8
+ },
9
+ "keywords": [
10
+ "deenruv",
11
+ "ecommerce",
12
+ "headless",
13
+ "graphql",
14
+ "typescript"
15
+ ],
16
+ "homepage": "https://deenruv.com/",
17
+ "private": false,
18
+ "license": "MIT",
19
+ "type": "commonjs",
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "bin": {
24
+ "deenruv": "dist/cli.js"
25
+ },
26
+ "files": [
27
+ "dist/**/*"
28
+ ],
29
+ "dependencies": {
30
+ "@clack/prompts": "^0.7.0",
31
+ "change-case": "^4.1.2",
32
+ "commander": "^11.0.0",
33
+ "cross-spawn": "^7.0.3",
34
+ "dotenv": "^16.4.5",
35
+ "fs-extra": "^11.2.0",
36
+ "picocolors": "^1.0.0",
37
+ "ts-morph": "^21.0.1",
38
+ "ts-node": "^10.9.2",
39
+ "tsconfig-paths": "^4.2.0",
40
+ "@deenruv/common": "1.0.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/cross-spawn": "^6.0.6",
44
+ "rimraf": "^5.0.5",
45
+ "typescript": "5.3.3",
46
+ "@deenruv/core": "1.0.0"
47
+ },
48
+ "peerDependencies": {
49
+ "@deenruv/core": "^0.1.0"
50
+ },
51
+ "scripts": {
52
+ "build": "rimraf dist && tsc -p ./tsconfig.cli.json && ts-node ./build.ts",
53
+ "watch": "tsc -p ./tsconfig.cli.json --watch",
54
+ "ci": "npm run build",
55
+ "test": "vitest --config vitest.config.mts --run"
56
+ }
57
+ }