@cedarjs/structure 0.0.4

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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/errors.d.ts +11 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +19 -0
  6. package/dist/hosts.d.ts +23 -0
  7. package/dist/hosts.d.ts.map +1 -0
  8. package/dist/hosts.js +45 -0
  9. package/dist/ide.d.ts +122 -0
  10. package/dist/ide.d.ts.map +1 -0
  11. package/dist/ide.js +240 -0
  12. package/dist/index.d.ts +12 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +79 -0
  15. package/dist/interactive_cli/RedwoodCommandString.d.ts +20 -0
  16. package/dist/interactive_cli/RedwoodCommandString.d.ts.map +1 -0
  17. package/dist/interactive_cli/RedwoodCommandString.js +72 -0
  18. package/dist/interactive_cli/command_builder.d.ts +10 -0
  19. package/dist/interactive_cli/command_builder.d.ts.map +1 -0
  20. package/dist/interactive_cli/command_builder.js +196 -0
  21. package/dist/interactive_cli/dry_run.d.ts +28 -0
  22. package/dist/interactive_cli/dry_run.d.ts.map +1 -0
  23. package/dist/interactive_cli/dry_run.js +101 -0
  24. package/dist/interactive_cli/ui.d.ts +32 -0
  25. package/dist/interactive_cli/ui.d.ts.map +1 -0
  26. package/dist/interactive_cli/ui.js +84 -0
  27. package/dist/language_server/RWLanguageServer.d.ts +30 -0
  28. package/dist/language_server/RWLanguageServer.d.ts.map +1 -0
  29. package/dist/language_server/RWLanguageServer.js +201 -0
  30. package/dist/language_server/commands.d.ts +14 -0
  31. package/dist/language_server/commands.d.ts.map +1 -0
  32. package/dist/language_server/commands.js +122 -0
  33. package/dist/language_server/diagnostics.d.ts +10 -0
  34. package/dist/language_server/diagnostics.d.ts.map +1 -0
  35. package/dist/language_server/diagnostics.js +61 -0
  36. package/dist/language_server/outline.d.ts +7 -0
  37. package/dist/language_server/outline.d.ts.map +1 -0
  38. package/dist/language_server/outline.js +37 -0
  39. package/dist/language_server/start.d.ts +2 -0
  40. package/dist/language_server/start.d.ts.map +1 -0
  41. package/dist/language_server/start.js +4 -0
  42. package/dist/language_server/xmethods.d.ts +11 -0
  43. package/dist/language_server/xmethods.d.ts.map +1 -0
  44. package/dist/language_server/xmethods.js +42 -0
  45. package/dist/model/RWCell.d.ts +22 -0
  46. package/dist/model/RWCell.d.ts.map +1 -0
  47. package/dist/model/RWCell.js +111 -0
  48. package/dist/model/RWComponent.d.ts +11 -0
  49. package/dist/model/RWComponent.d.ts.map +1 -0
  50. package/dist/model/RWComponent.js +42 -0
  51. package/dist/model/RWEnvHelper.d.ts +64 -0
  52. package/dist/model/RWEnvHelper.d.ts.map +1 -0
  53. package/dist/model/RWEnvHelper.js +295 -0
  54. package/dist/model/RWFunction.d.ts +11 -0
  55. package/dist/model/RWFunction.d.ts.map +1 -0
  56. package/dist/model/RWFunction.js +19 -0
  57. package/dist/model/RWLayout.d.ts +11 -0
  58. package/dist/model/RWLayout.d.ts.map +1 -0
  59. package/dist/model/RWLayout.js +19 -0
  60. package/dist/model/RWPage.d.ts +13 -0
  61. package/dist/model/RWPage.d.ts.map +1 -0
  62. package/dist/model/RWPage.js +60 -0
  63. package/dist/model/RWProject.d.ts +61 -0
  64. package/dist/model/RWProject.d.ts.map +1 -0
  65. package/dist/model/RWProject.js +170 -0
  66. package/dist/model/RWRoute.d.ts +58 -0
  67. package/dist/model/RWRoute.d.ts.map +1 -0
  68. package/dist/model/RWRoute.js +416 -0
  69. package/dist/model/RWRouter.d.ts +30 -0
  70. package/dist/model/RWRouter.d.ts.map +1 -0
  71. package/dist/model/RWRouter.js +186 -0
  72. package/dist/model/RWSDL.d.ts +21 -0
  73. package/dist/model/RWSDL.d.ts.map +1 -0
  74. package/dist/model/RWSDL.js +89 -0
  75. package/dist/model/RWSDLField.d.ts +31 -0
  76. package/dist/model/RWSDLField.d.ts.map +1 -0
  77. package/dist/model/RWSDLField.js +132 -0
  78. package/dist/model/RWService.d.ts +26 -0
  79. package/dist/model/RWService.d.ts.map +1 -0
  80. package/dist/model/RWService.js +76 -0
  81. package/dist/model/RWServiceFunction.d.ts +20 -0
  82. package/dist/model/RWServiceFunction.d.ts.map +1 -0
  83. package/dist/model/RWServiceFunction.js +100 -0
  84. package/dist/model/RWTOML.d.ts +12 -0
  85. package/dist/model/RWTOML.d.ts.map +1 -0
  86. package/dist/model/RWTOML.js +56 -0
  87. package/dist/model/index.d.ts +2 -0
  88. package/dist/model/index.d.ts.map +1 -0
  89. package/dist/model/index.js +13 -0
  90. package/dist/model/util/advanced_path_parser.d.ts +12 -0
  91. package/dist/model/util/advanced_path_parser.d.ts.map +1 -0
  92. package/dist/model/util/advanced_path_parser.js +38 -0
  93. package/dist/model/util/process_env.d.ts +23 -0
  94. package/dist/model/util/process_env.d.ts.map +1 -0
  95. package/dist/model/util/process_env.js +76 -0
  96. package/dist/outline/index.d.ts +3 -0
  97. package/dist/outline/index.d.ts.map +1 -0
  98. package/dist/outline/index.js +31 -0
  99. package/dist/outline/outline.d.ts +4 -0
  100. package/dist/outline/outline.d.ts.map +1 -0
  101. package/dist/outline/outline.js +260 -0
  102. package/dist/outline/types.d.ts +88 -0
  103. package/dist/outline/types.d.ts.map +1 -0
  104. package/dist/outline/types.js +73 -0
  105. package/dist/util.d.ts +2 -0
  106. package/dist/util.d.ts.map +1 -0
  107. package/dist/util.js +34 -0
  108. package/dist/x/Array.d.ts +4 -0
  109. package/dist/x/Array.d.ts.map +1 -0
  110. package/dist/x/Array.js +26 -0
  111. package/dist/x/URL.d.ts +15 -0
  112. package/dist/x/URL.d.ts.map +1 -0
  113. package/dist/x/URL.js +99 -0
  114. package/dist/x/child_process.d.ts +15 -0
  115. package/dist/x/child_process.d.ts.map +1 -0
  116. package/dist/x/child_process.js +51 -0
  117. package/dist/x/decorators.d.ts +3 -0
  118. package/dist/x/decorators.d.ts.map +1 -0
  119. package/dist/x/decorators.js +26 -0
  120. package/dist/x/path.d.ts +6 -0
  121. package/dist/x/path.d.ts.map +1 -0
  122. package/dist/x/path.js +53 -0
  123. package/dist/x/prisma.d.ts +19 -0
  124. package/dist/x/prisma.d.ts.map +1 -0
  125. package/dist/x/prisma.js +65 -0
  126. package/dist/x/ts-morph.d.ts +10 -0
  127. package/dist/x/ts-morph.d.ts.map +1 -0
  128. package/dist/x/ts-morph.js +56 -0
  129. package/dist/x/vscode-languageserver-types.d.ts +93 -0
  130. package/dist/x/vscode-languageserver-types.d.ts.map +1 -0
  131. package/dist/x/vscode-languageserver-types.js +421 -0
  132. package/dist/x/vscode-languageserver.d.ts +12 -0
  133. package/dist/x/vscode-languageserver.d.ts.map +1 -0
  134. package/dist/x/vscode-languageserver.js +61 -0
  135. package/dist/x/vscode.d.ts +126 -0
  136. package/dist/x/vscode.d.ts.map +1 -0
  137. package/dist/x/vscode.js +294 -0
  138. package/package.json +67 -0
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ _Object$defineProperty(exports, "DefaultHost", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _hosts.DefaultHost;
11
+ }
12
+ });
13
+ _Object$defineProperty(exports, "DiagnosticSeverity", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _vscodeLanguageserverTypes.DiagnosticSeverity;
17
+ }
18
+ });
19
+ _Object$defineProperty(exports, "Host", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _hosts.Host;
23
+ }
24
+ });
25
+ _Object$defineProperty(exports, "RWProject", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _model.RWProject;
29
+ }
30
+ });
31
+ _Object$defineProperty(exports, "URL_file", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _URL.URL_file;
35
+ }
36
+ });
37
+ exports.getProject = getProject;
38
+ exports.printDiagnostics = printDiagnostics;
39
+ var _vscodeLanguageserverTypes = require("vscode-languageserver-types");
40
+ var _hosts = require("./hosts");
41
+ var _model = require("./model");
42
+ var _URL = require("./x/URL");
43
+ var _vscodeLanguageserverTypes2 = require("./x/vscode-languageserver-types");
44
+ function getProject(projectRoot, host = new _hosts.DefaultHost()) {
45
+ return new _model.RWProject({
46
+ projectRoot,
47
+ host
48
+ });
49
+ }
50
+ async function printDiagnostics(projectRoot, opts) {
51
+ const project = getProject(projectRoot);
52
+ const formatOpts = {
53
+ cwd: projectRoot,
54
+ ...opts
55
+ };
56
+ try {
57
+ let warnings = 0;
58
+ let errors = 0;
59
+ for (const d of await project.collectDiagnostics()) {
60
+ const str = (0, _vscodeLanguageserverTypes2.ExtendedDiagnostic_format)(d, formatOpts);
61
+ console.log(`\n${str}`);
62
+ // counts number of warnings (2) and errors (1) encountered
63
+ if (d.diagnostic.severity === 2) {
64
+ warnings++;
65
+ }
66
+ if (d.diagnostic.severity === 1) {
67
+ errors++;
68
+ }
69
+ }
70
+ if (warnings === 0 && errors === 0) {
71
+ console.log('\nSuccess: no errors or warnings were detected\n');
72
+ } else if (errors > 0) {
73
+ console.error(`\nFailure: ${errors} errors and ${warnings} warnings detected\n`);
74
+ process.exit(1);
75
+ }
76
+ } catch (e) {
77
+ throw new Error(e.message);
78
+ }
79
+ }
@@ -0,0 +1,20 @@
1
+ import yargs_parser from 'yargs-parser';
2
+ /**
3
+ * A value class wrapping a Redwood command string.
4
+ * - perform basic validation on construction
5
+ * - used throughout the package to representa a command (instead of using 'string')
6
+ */
7
+ export declare class RedwoodCommandString {
8
+ original: string;
9
+ isComplete: boolean;
10
+ /**
11
+ * this is what we can pass down to the actual CLI
12
+ * it doesn't include "yarn redwood"
13
+ * ex: "generate page Foo /foo"
14
+ */
15
+ processed: string;
16
+ constructor(original: string);
17
+ get parsed(): yargs_parser.Arguments;
18
+ get isInterceptable(): boolean;
19
+ }
20
+ //# sourceMappingURL=RedwoodCommandString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedwoodCommandString.d.ts","sourceRoot":"","sources":["../../src/interactive_cli/RedwoodCommandString.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,cAAc,CAAA;AAIvC;;;;GAIG;AACH,qBAAa,oBAAoB;IASZ,QAAQ,EAAE,MAAM;IARnC,UAAU,UAAO;IAEjB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;gBACE,QAAQ,EAAE,MAAM;IA0BnC,IAAY,MAAM,2BAEjB;IAED,IAAY,eAAe,YAgB1B;CACF"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.RedwoodCommandString = void 0;
9
+ var _endsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/ends-with"));
10
+ var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/trim"));
11
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/map"));
12
+ var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/object/get-own-property-descriptor"));
13
+ var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/applyDecoratedDescriptor"));
14
+ var _yargsParser = _interopRequireDefault(require("yargs-parser"));
15
+ var _decorators = require("../x/decorators");
16
+ var _dec, _dec2, _class;
17
+ /**
18
+ * A value class wrapping a Redwood command string.
19
+ * - perform basic validation on construction
20
+ * - used throughout the package to representa a command (instead of using 'string')
21
+ */
22
+ let RedwoodCommandString = exports.RedwoodCommandString = (_dec = (0, _decorators.lazy)(), _dec2 = (0, _decorators.lazy)(), _class = class RedwoodCommandString {
23
+ constructor(original) {
24
+ var _context, _context2;
25
+ this.isComplete = true;
26
+ /**
27
+ * this is what we can pass down to the actual CLI
28
+ * it doesn't include "yarn redwood"
29
+ * ex: "generate page Foo /foo"
30
+ */
31
+ this.processed = void 0;
32
+ this.original = original;
33
+ let v = original;
34
+ if (typeof v !== 'string') {
35
+ throw new Error('redwood command must be a string');
36
+ }
37
+ if ((0, _endsWith.default)(_context = (0, _trim.default)(v).call(v)).call(_context, '...')) {
38
+ this.isComplete = false;
39
+ const pp = v.split('...');
40
+ pp.pop();
41
+ v = pp.join('');
42
+ }
43
+ const parts = (0, _map.default)(_context2 = (0, _trim.default)(v).call(v).split(' ')).call(_context2, s => (0, _trim.default)(s).call(s));
44
+ if (parts[0] === 'yarn') {
45
+ parts.shift();
46
+ }
47
+ if (parts[0] === 'redwood' || parts[0] === 'rw') {
48
+ parts.shift();
49
+ }
50
+ this.processed = parts.join(' ');
51
+ }
52
+ get parsed() {
53
+ return (0, _yargsParser.default)(this.processed);
54
+ }
55
+ get isInterceptable() {
56
+ let a = this.parsed._[0];
57
+ const b = this.parsed._[1];
58
+ if (a === 'g') {
59
+ a = 'generate';
60
+ }
61
+ if (a !== 'generate') {
62
+ return false;
63
+ }
64
+ if (b === 'sdl') {
65
+ return false;
66
+ } // <-- why?
67
+ if (b === 'scaffold') {
68
+ return false;
69
+ } // <-- why?
70
+ return true;
71
+ }
72
+ }, (0, _applyDecoratedDescriptor2.default)(_class.prototype, "parsed", [_dec], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "parsed"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "isInterceptable", [_dec2], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "isInterceptable"), _class.prototype), _class);
@@ -0,0 +1,10 @@
1
+ import type { RWProject } from '../model/RWProject';
2
+ import { RedwoodCommandString } from './RedwoodCommandString';
3
+ import type { UI } from './ui';
4
+ export interface Opts {
5
+ cmd: RedwoodCommandString;
6
+ project: RWProject;
7
+ ui: UI;
8
+ }
9
+ export declare function command_builder(opts: Opts): Promise<RedwoodCommandString | undefined>;
10
+ //# sourceMappingURL=command_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_builder.d.ts","sourceRoot":"","sources":["../../src/interactive_cli/command_builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAInD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,MAAM,CAAA;AAE9B,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,oBAAoB,CAAA;IACzB,OAAO,EAAE,SAAS,CAAA;IAClB,EAAE,EAAE,EAAE,CAAA;CACP;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAE3C"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.command_builder = command_builder;
9
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/map"));
10
+ var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/object/get-own-property-descriptor"));
11
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/set"));
12
+ var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/applyDecoratedDescriptor"));
13
+ var _camelcase = _interopRequireDefault(require("camelcase"));
14
+ var _util = require("../util");
15
+ var _decorators = require("../x/decorators");
16
+ var _RedwoodCommandString = require("./RedwoodCommandString");
17
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class;
18
+ function command_builder(opts) {
19
+ return new CommandBuilder(opts).buildCommand();
20
+ }
21
+ let CommandBuilder = (_dec = (0, _decorators.memo)(), _dec2 = (0, _decorators.memo)(), _dec3 = (0, _decorators.lazy)(), _dec4 = (0, _decorators.memo)(), _dec5 = (0, _decorators.memo)(), _dec6 = (0, _decorators.memo)(), _dec7 = (0, _decorators.memo)(), _dec8 = (0, _decorators.memo)(), _class = class CommandBuilder {
22
+ constructor(opts) {
23
+ this.prompts = void 0;
24
+ this.opts = opts;
25
+ this.prompts = new PromptHelper(this.opts);
26
+ }
27
+ async buildCommand() {
28
+ if (this.opts.cmd.isComplete) {
29
+ // there is no need to build it interactively
30
+ return this.opts.cmd;
31
+ }
32
+ // else, the command is interactive. we run the interactive builder to complete it
33
+ const str = await this.buildCommandString();
34
+ return str ? new _RedwoodCommandString.RedwoodCommandString(str) : undefined;
35
+ }
36
+ async buildCommandString() {
37
+ try {
38
+ switch (await this.arg_command()) {
39
+ case 'generate':
40
+ return await this.generate(await this.arg_generate_type());
41
+ case 'db':
42
+ switch (await this.arg_db_operation()) {
43
+ case 'save':
44
+ {
45
+ const name = await this.prompts.prompt('Choose migration name');
46
+ return `db save ${name}`;
47
+ }
48
+ case 'up':
49
+ return `db up`;
50
+ }
51
+ return;
52
+ }
53
+ } catch (e) {
54
+ if (e.message === 'break') {
55
+ return;
56
+ }
57
+ throw e;
58
+ }
59
+ }
60
+ get args() {
61
+ var _context;
62
+ return (0, _map.default)(_context = this.opts.cmd.parsed._).call(_context, arg => arg.toString());
63
+ }
64
+ async generate(type) {
65
+ switch (type) {
66
+ case 'page':
67
+ {
68
+ const pageName = await this.prompts.prompt('Page Name (ex: Home, about, MyPage, contact)');
69
+ const defaultPath = '/' + (0, _camelcase.default)(pageName);
70
+ const path = await this.prompts.pagePath(defaultPath);
71
+ return `generate page ${pageName} ${path}`;
72
+ }
73
+ case 'cell':
74
+ return `generate cell ${await this.prompts.prompt('Cell Name')}`;
75
+ case 'scaffold':
76
+ return `generate scaffold ${await this.arg_generate_scaffold_modelName()}`;
77
+ case 'component':
78
+ return `generate component ${await this.prompts.prompt('Component Name')}`;
79
+ case 'layout':
80
+ return `generate layout ${await this.prompts.prompt('Layout Name')}`;
81
+ case 'sdl':
82
+ {
83
+ const modelName = await this.arg_generate_sdl_modelName();
84
+ const opts = await this.prompts.sdl_options();
85
+ if (!opts) {
86
+ return;
87
+ }
88
+ // TODO: serialize options
89
+ // services: { type: 'boolean', default: true },
90
+ // crud: { type: 'boolean', default: false },
91
+ // force: { type: 'boolean', default: false },
92
+ return `generate sdl ${modelName}`;
93
+ }
94
+ }
95
+ }
96
+ async arg_command() {
97
+ return this.args[0] ?? breakIfNull(await this.prompts.command());
98
+ }
99
+ async arg_generate_type() {
100
+ return this.args[1] ?? breakIfNull(await this.prompts.generate_type());
101
+ }
102
+ async arg_db_operation() {
103
+ return this.args[1] ?? breakIfNull(await this.prompts.db_operations());
104
+ }
105
+ async arg_generate_sdl_modelName() {
106
+ return this.args[2] ?? breakIfNull(await this.prompts.model('Choose Model for SDL...'));
107
+ }
108
+ async arg_generate_scaffold_modelName() {
109
+ return this.args[2] ?? breakIfNull(await this.prompts.model('Choose Model to Scaffold...'));
110
+ }
111
+ }, (0, _applyDecoratedDescriptor2.default)(_class.prototype, "buildCommand", [_dec], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "buildCommand"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "buildCommandString", [_dec2], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "buildCommandString"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "args", [_dec3], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "args"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "arg_command", [_dec4], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "arg_command"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "arg_generate_type", [_dec5], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "arg_generate_type"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "arg_db_operation", [_dec6], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "arg_db_operation"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "arg_generate_sdl_modelName", [_dec7], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "arg_generate_sdl_modelName"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "arg_generate_scaffold_modelName", [_dec8], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "arg_generate_scaffold_modelName"), _class.prototype), _class);
112
+ /**
113
+ * A set of specialized prompt helpers
114
+ * that wrap around the UI methods and sometimes queries the RWProject
115
+ */
116
+ class PromptHelper {
117
+ constructor(opts) {
118
+ this.opts = opts;
119
+ }
120
+
121
+ /**
122
+ * prompt for a required (and non-empty) string
123
+ * @param msg
124
+ */
125
+ async prompt(msg) {
126
+ let v = await this.opts.ui.prompt(msg);
127
+ if (v === '') {
128
+ v = undefined;
129
+ }
130
+ return breakIfNull(v);
131
+ }
132
+ async command() {
133
+ return await this.opts.ui.pickOne(['generate', 'db'],
134
+ // TODO: add more commands (this could be generated from the redwoods/cli package)
135
+ 'Choose Redwood CLI command');
136
+ }
137
+ /**
138
+ * Pick a model name from schema.prisma
139
+ * @param msg
140
+ */
141
+ async model(msg) {
142
+ const models = await this.opts.project.prismaDMMFModelNames();
143
+ if (models.length === 0) {
144
+ this.opts.ui.info('You must define at least one model in the "schema.prisma" file');
145
+ return;
146
+ }
147
+ return await this.opts.ui.pickOne(models, msg);
148
+ }
149
+ async sdl_options() {
150
+ const opts = await this.opts.ui.pickMany([{
151
+ label: 'services',
152
+ description: 'generate services',
153
+ picked: true
154
+ }, {
155
+ label: 'crud',
156
+ description: 'generate CRUD',
157
+ picked: false
158
+ }, {
159
+ label: 'force',
160
+ description: 'overwrite existing files',
161
+ picked: false
162
+ }], 'Options...');
163
+ if (!opts) {
164
+ return;
165
+ }
166
+ return new _set.default(opts);
167
+ }
168
+ async generate_type() {
169
+ return await this.opts.ui.pickOne(generatorTypes, 'Choose Redwood component type to generate');
170
+ }
171
+ async db_operations() {
172
+ return await this.opts.ui.pickOne(dbOperations, 'Choose db command');
173
+ }
174
+ async pagePath(defaultPath) {
175
+ return await this.opts.ui.prompt('path', {
176
+ // prompt: "path",
177
+ value: defaultPath,
178
+ valueSelection: [1, defaultPath.length],
179
+ validateInput(path) {
180
+ try {
181
+ (0, _util.validateRoutePath)(path);
182
+ } catch (e) {
183
+ return e + '';
184
+ }
185
+ }
186
+ });
187
+ }
188
+ }
189
+ const generatorTypes = ['page', 'cell', 'scaffold', 'component', 'layout', 'sdl', 'service'];
190
+ const dbOperations = ['down', 'generate', 'save', 'seed', 'up'];
191
+ function breakIfNull(x) {
192
+ if (typeof x === 'undefined' || x === null) {
193
+ throw new Error('break');
194
+ }
195
+ return x;
196
+ }
@@ -0,0 +1,28 @@
1
+ import type { RedwoodCommandString } from './RedwoodCommandString';
2
+ export type FileSet = {
3
+ [filePath: string]: string | null;
4
+ };
5
+ interface Opts {
6
+ /**
7
+ * redwood project root (filepath)
8
+ */
9
+ cwd: string;
10
+ /**
11
+ * Command to execute
12
+ */
13
+ cmd: RedwoodCommandString;
14
+ /**
15
+ * Files to override
16
+ */
17
+ fileOverrides?: FileSet;
18
+ /**
19
+ * directory to store the temporary generated JS script
20
+ */
21
+ tmpdir?: string;
22
+ }
23
+ export declare function redwood_gen_dry_run(opts: Opts): Promise<{
24
+ stdout: string;
25
+ files: FileSet;
26
+ }>;
27
+ export {};
28
+ //# sourceMappingURL=dry_run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry_run.d.ts","sourceRoot":"","sources":["../../src/interactive_cli/dry_run.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAE3D,UAAU,IAAI;IACZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,GAAG,EAAE,oBAAoB,CAAA;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CA+B7C"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.redwood_gen_dry_run = redwood_gen_dry_run;
9
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/json/stringify"));
10
+ require("core-js/modules/esnext.json.parse.js");
11
+ var _path = require("path");
12
+ var _fsExtra = require("fs-extra");
13
+ var _proxyquire = _interopRequireDefault(require("proxyquire"));
14
+ var _child_process = require("../x/child_process");
15
+ async function redwood_gen_dry_run(opts) {
16
+ const {
17
+ cwd,
18
+ cmd,
19
+ fileOverrides,
20
+ tmpdir
21
+ } = opts;
22
+ if (!cmd.isComplete) {
23
+ throw new Error('cannot pass an interactive command straight to the redwood-cli. You must run it through the command_builder first');
24
+ }
25
+ // eslint-disable-next-line
26
+ const x = [_proxyquire.default].length; // we need to make sure this module is required. it will be used in a script we will generate dynamically
27
+ const tempDir = tmpdir ?? (0, _path.join)(cwd, '.tmp');
28
+ const jsfile = (0, _path.join)(tempDir, 'rwcli.js');
29
+ const requireStatement = 'proxyquire';
30
+ // if (extensionPath) {
31
+ // requireStatement = relative(
32
+ // dirname(jsfile),
33
+ // extensionPath + "/node_modules/proxyquire"
34
+ // );
35
+ // }
36
+ (0, _fsExtra.outputFileSync)(jsfile, buildJS(fileOverrides, requireStatement));
37
+ const cmdargs = 'node ' + jsfile + ' ' + cmd.processed;
38
+ const [cmd2, ...args] = cmdargs.split(' ');
39
+ // TODO: use execa?
40
+ const {
41
+ stdout: out,
42
+ stderr
43
+ } = await (0, _child_process.spawnCancellable)(cmd2, args, {
44
+ cwd
45
+ });
46
+ if (stderr) {
47
+ throw new Error(stderr);
48
+ }
49
+ //const out = execSync(cmdargs, { cwd: projectRoot })
50
+ const [stdout, jsondata] = out.toString().split(separator);
51
+ return {
52
+ stdout,
53
+ files: JSON.parse(jsondata)
54
+ };
55
+ }
56
+ const separator = '---------===----===--------';
57
+ function buildJS(fileOverrides = {}, proxyquireRequireStatement = 'proxyquire') {
58
+ let js = `
59
+ const proxyquire = require("proxyquire")
60
+ const fs = require('fs')
61
+ const path = require('path')
62
+ const files = {}
63
+ const fileOverrides = { FILE: "OVERRIDES" }
64
+ const FILE_SCHEME = 'file://'
65
+
66
+ function URL_file(f) {
67
+ if (f.startsWith(FILE_SCHEME))
68
+ f = f.substr(FILE_SCHEME.length)
69
+ return new URL(FILE_SCHEME + path.normalize(f)).href
70
+ }
71
+
72
+ proxyquire('@cedarjs/cli/dist', {
73
+ fs: {
74
+ mkdir() {},
75
+ mkdirSync(...args) {},
76
+ writeFile(a, b) {
77
+ files[URL_file(a)] = b
78
+ },
79
+ writeFileSync(a, b) {
80
+ files[URL_file(a)] = b
81
+ },
82
+ readFileSync(...args) {
83
+ const f = URL_file(args[0])
84
+ if (fileOverrides[f]) return fileOverrides[f]
85
+ return fs.readFileSync.apply(fs, args)
86
+ },
87
+ '@global': true,
88
+ },
89
+ })
90
+
91
+ process.on('exit', () => {
92
+ console.log("__SEPARATOR__")
93
+ console.log(JSON.stringify(files, null, 2))
94
+ })
95
+ `;
96
+ // replace some placeholders in the template
97
+ js = js.replace(`{ FILE: "OVERRIDES" }`, (0, _stringify.default)(fileOverrides));
98
+ js = js.replace(`"__SEPARATOR__"`, (0, _stringify.default)(separator));
99
+ js = js.replace(`require("proxyquire")`, `require("${proxyquireRequireStatement}")`);
100
+ return js;
101
+ }
@@ -0,0 +1,32 @@
1
+ import type { VSCodeWindowMethods } from '../x/vscode';
2
+ export type UIPickItem = {
3
+ label: string;
4
+ description?: string;
5
+ picked?: boolean;
6
+ };
7
+ export declare function UIPickItem_normalize(item: UIPickItem | string): UIPickItem;
8
+ export interface UI {
9
+ info(msg: string): Promise<void>;
10
+ prompt(msg: string, opts?: {
11
+ value?: string;
12
+ valueSelection?: any;
13
+ validateInput?: any;
14
+ }): Promise<string | undefined>;
15
+ pickOne(items: (string | UIPickItem)[], msg: string): Promise<string | undefined>;
16
+ pickMany(items: (string | UIPickItem)[], msg: string): Promise<string[] | undefined>;
17
+ }
18
+ export declare class VSCodeWindowUI implements UI {
19
+ private w;
20
+ constructor(w: VSCodeWindowMethods);
21
+ info(msg: string): Promise<void>;
22
+ prompt(msg: string, opts: any): Promise<string | undefined>;
23
+ pickOne(items: (string | UIPickItem)[], msg: string): Promise<string | undefined>;
24
+ pickMany(items: (string | UIPickItem)[], msg: string): Promise<string[] | undefined>;
25
+ }
26
+ export declare class CLIUI implements UI {
27
+ info(msg: string): Promise<void>;
28
+ prompt(msg: string): Promise<string | undefined>;
29
+ pickOne(items: (string | UIPickItem)[], msg: string): Promise<string | undefined>;
30
+ pickMany(items: (string | UIPickItem)[], msg: string): Promise<string[] | undefined>;
31
+ }
32
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/interactive_cli/ui.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,CAE1E;AAED,MAAM,WAAW,EAAE;IACjB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,CACJ,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,GAAG,CAAC;QAAC,aAAa,CAAC,EAAE,GAAG,CAAA;KAAE,GACnE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9B,OAAO,CACL,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC9B,QAAQ,CACN,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;CAEjC;AAED,qBAAa,cAAe,YAAW,EAAE;IAC3B,OAAO,CAAC,CAAC;gBAAD,CAAC,EAAE,mBAAmB;IACpC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGhC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,KAAA,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKtD,OAAO,CACX,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKxB,QAAQ,CACZ,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CAQjC;AAED,qBAAa,KAAM,YAAW,EAAE;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQhD,OAAO,CACX,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAUxB,QAAQ,CACZ,KAAK,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;CAUjC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.CLIUI = void 0;
9
+ exports.UIPickItem_normalize = UIPickItem_normalize;
10
+ exports.VSCodeWindowUI = void 0;
11
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/map"));
12
+ var _bind = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/instance/bind"));
13
+ var _enquirer = _interopRequireDefault(require("enquirer"));
14
+ function UIPickItem_normalize(item) {
15
+ return typeof item === 'string' ? {
16
+ label: item
17
+ } : item;
18
+ }
19
+ class VSCodeWindowUI {
20
+ constructor(w) {
21
+ this.w = w;
22
+ }
23
+ async info(msg) {
24
+ await this.w.showInformationMessage(msg);
25
+ }
26
+ async prompt(msg, opts) {
27
+ const opts2 = {
28
+ ...opts,
29
+ prompt: msg
30
+ };
31
+ return await this.w.showInputBox(opts2);
32
+ }
33
+ async pickOne(items, msg) {
34
+ const items2 = (0, _map.default)(items).call(items, UIPickItem_normalize);
35
+ const res = await this.w.showQuickPick(items2, {
36
+ placeHolder: msg
37
+ });
38
+ return res?.label;
39
+ }
40
+ async pickMany(items, msg) {
41
+ var _context, _context2;
42
+ const items2 = (0, _map.default)(items).call(items, UIPickItem_normalize);
43
+ const res = await this.w.showQuickPick(items2, {
44
+ placeHolder: msg,
45
+ canPickMany: true
46
+ });
47
+ return ((_context = res) == null ? void 0 : (0, _bind.default)(_context2 = Function.call).call(_context2, (0, _map.default)(_context), _context))?.(r => r.label);
48
+ }
49
+ }
50
+ exports.VSCodeWindowUI = VSCodeWindowUI;
51
+ class CLIUI {
52
+ async info(msg) {
53
+ console.log(msg);
54
+ }
55
+ async prompt(msg) {
56
+ const res = await _enquirer.default.prompt({
57
+ type: 'input',
58
+ name: 'x',
59
+ message: msg
60
+ });
61
+ return res['x'];
62
+ }
63
+ async pickOne(items, msg) {
64
+ const items2 = (0, _map.default)(items).call(items, UIPickItem_normalize);
65
+ const res = await _enquirer.default.prompt({
66
+ type: 'select',
67
+ name: 'x',
68
+ message: msg,
69
+ choices: (0, _map.default)(items2).call(items2, i => i.label)
70
+ });
71
+ return res['x'];
72
+ }
73
+ async pickMany(items, msg) {
74
+ const items2 = (0, _map.default)(items).call(items, UIPickItem_normalize);
75
+ const res = await _enquirer.default.prompt({
76
+ type: 'multiselect',
77
+ name: 'x',
78
+ message: msg,
79
+ choices: (0, _map.default)(items2).call(items2, i => i.label)
80
+ });
81
+ return res['x'];
82
+ }
83
+ }
84
+ exports.CLIUI = CLIUI;
@@ -0,0 +1,30 @@
1
+ import type { InitializeParams } from 'vscode-languageserver';
2
+ import { TextDocuments } from 'vscode-languageserver';
3
+ import { TextDocument } from 'vscode-languageserver-textdocument';
4
+ import type { IDEInfo } from '../ide';
5
+ import { HostWithDocumentsStore } from '../ide';
6
+ import { RWProject } from '../model';
7
+ import { CommandsManager } from './commands';
8
+ import { DiagnosticsManager } from './diagnostics';
9
+ import { OutlineManager } from './outline';
10
+ import { XMethodsManager } from './xmethods';
11
+ export declare class RWLanguageServer {
12
+ initializeParams: InitializeParams;
13
+ documents: TextDocuments<TextDocument>;
14
+ get connection(): import("vscode-languageserver").Connection<import("vscode-languageserver")._, import("vscode-languageserver")._, import("vscode-languageserver")._, import("vscode-languageserver")._, import("vscode-languageserver")._, import("vscode-languageserver")._, import("vscode-languageserver/lib/callHierarchy.proposed").CallHierarchy & import("vscode-languageserver/lib/sematicTokens.proposed").SemanticTokens>;
15
+ start(): void;
16
+ get diagnostics(): DiagnosticsManager;
17
+ get commands(): CommandsManager;
18
+ get outline(): OutlineManager;
19
+ get xmethods(): XMethodsManager;
20
+ get host(): HostWithDocumentsStore;
21
+ projectRoot: string | undefined;
22
+ getProject(): RWProject | undefined;
23
+ get vscodeWindowMethods(): import("../x/vscode").VSCodeWindowMethods;
24
+ collectIDEInfo(uri?: string): Promise<IDEInfo[]>;
25
+ info<T extends IDEInfo['kind']>(uri: string, kind: T): Promise<(IDEInfo & {
26
+ kind: T;
27
+ })[]>;
28
+ get hasWorkspaceFolderCapability(): boolean;
29
+ }
30
+ //# sourceMappingURL=RWLanguageServer.d.ts.map