@flarum/cli 1.0.0 → 2.0.0-beta.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.
Files changed (185) hide show
  1. package/README.md +2 -2
  2. package/bin/run +5 -3
  3. package/boilerplate/skeleton/extension/.gitattributes +16 -3
  4. package/boilerplate/skeleton/extension/.github/workflows/backend.yml +15 -0
  5. package/boilerplate/skeleton/extension/.github/workflows/frontend.yml +20 -0
  6. package/boilerplate/skeleton/extension/.styleci.yml +14 -0
  7. package/boilerplate/skeleton/extension/LICENSE.md +1 -0
  8. package/boilerplate/skeleton/extension/README.md +7 -7
  9. package/boilerplate/skeleton/extension/composer.json +11 -9
  10. package/boilerplate/skeleton/extension/extend.php +10 -10
  11. package/boilerplate/skeleton/extension/js/admin.js +2 -1
  12. package/boilerplate/skeleton/extension/js/forum.js +2 -1
  13. package/boilerplate/skeleton/extension/js/package.json +13 -9
  14. package/boilerplate/skeleton/extension/js/src/admin/index.js +4 -2
  15. package/boilerplate/skeleton/extension/js/src/common/index.js +5 -0
  16. package/boilerplate/skeleton/extension/js/src/forum/index.js +4 -2
  17. package/boilerplate/skeleton/extension/js/tsconfig.json +6 -1
  18. package/boilerplate/skeleton/extension/locale/en.yml +1 -1
  19. package/boilerplate/stubs/migration.php +1 -1
  20. package/lib/base-command.d.ts +27 -6
  21. package/lib/base-command.js +131 -41
  22. package/lib/boilersmith/exposed-param-manager.d.ts +8 -0
  23. package/lib/boilersmith/exposed-param-manager.js +31 -0
  24. package/lib/boilersmith/io.d.ts +50 -0
  25. package/lib/boilersmith/io.js +72 -0
  26. package/lib/boilersmith/paths.d.ts +22 -0
  27. package/lib/boilersmith/paths.js +29 -0
  28. package/lib/boilersmith/scaffolding/audit-step-factory.d.ts +5 -0
  29. package/lib/boilersmith/scaffolding/audit-step-factory.js +54 -0
  30. package/lib/boilersmith/scaffolding/infra-step-factory.d.ts +5 -0
  31. package/lib/boilersmith/scaffolding/infra-step-factory.js +34 -0
  32. package/lib/boilersmith/scaffolding/init-step-factory.d.ts +5 -0
  33. package/lib/boilersmith/scaffolding/init-step-factory.js +34 -0
  34. package/lib/boilersmith/scaffolding/module.d.ts +68 -0
  35. package/lib/boilersmith/scaffolding/module.js +111 -0
  36. package/lib/boilersmith/scaffolding/scaffolder.d.ts +32 -0
  37. package/lib/boilersmith/scaffolding/scaffolder.js +203 -0
  38. package/lib/boilersmith/scaffolding/template-param.d.ts +23 -0
  39. package/lib/boilersmith/scaffolding/template-param.js +46 -0
  40. package/lib/boilersmith/step-manager.d.ts +85 -0
  41. package/lib/boilersmith/step-manager.js +234 -0
  42. package/lib/boilersmith/steps/stub-base.d.ts +53 -0
  43. package/lib/boilersmith/steps/stub-base.js +54 -0
  44. package/lib/{utils → boilersmith/utils}/clone-and-fill.d.ts +0 -0
  45. package/lib/{utils → boilersmith/utils}/clone-and-fill.js +2 -2
  46. package/lib/boilersmith/utils/cond-format.d.ts +1 -0
  47. package/lib/boilersmith/utils/cond-format.js +8 -0
  48. package/lib/boilersmith/utils/json-leaf-paths.d.ts +7 -0
  49. package/lib/boilersmith/utils/json-leaf-paths.js +17 -0
  50. package/lib/boilersmith/utils/read-tpl.d.ts +2 -0
  51. package/lib/boilersmith/utils/read-tpl.js +10 -0
  52. package/lib/boilersmith/utils/rename-keys.d.ts +1 -0
  53. package/lib/boilersmith/utils/rename-keys.js +7 -0
  54. package/lib/commands/audit/infra.d.ts +16 -0
  55. package/lib/commands/audit/infra.js +27 -0
  56. package/lib/commands/infra.d.ts +20 -0
  57. package/lib/commands/infra.js +55 -0
  58. package/lib/commands/init.d.ts +4 -3
  59. package/lib/commands/init.js +8 -6
  60. package/lib/commands/make/backend/api-controller.d.ts +4 -3
  61. package/lib/commands/make/backend/api-controller.js +3 -2
  62. package/lib/commands/make/backend/api-serializer-attributes.d.ts +4 -3
  63. package/lib/commands/make/backend/api-serializer-attributes.js +1 -1
  64. package/lib/commands/make/backend/api-serializer.d.ts +4 -3
  65. package/lib/commands/make/backend/api-serializer.js +3 -2
  66. package/lib/commands/make/backend/command.d.ts +4 -3
  67. package/lib/commands/make/backend/command.js +3 -2
  68. package/lib/commands/make/backend/event-listener.d.ts +4 -3
  69. package/lib/commands/make/backend/event-listener.js +3 -2
  70. package/lib/commands/make/backend/handler.d.ts +4 -3
  71. package/lib/commands/make/backend/handler.js +4 -3
  72. package/lib/commands/make/backend/integration-test.d.ts +4 -3
  73. package/lib/commands/make/backend/integration-test.js +3 -2
  74. package/lib/commands/make/backend/job.d.ts +4 -3
  75. package/lib/commands/make/backend/job.js +3 -2
  76. package/lib/commands/make/backend/migration.d.ts +4 -3
  77. package/lib/commands/make/backend/migration.js +3 -2
  78. package/lib/commands/make/backend/model.d.ts +4 -3
  79. package/lib/commands/make/backend/model.js +22 -21
  80. package/lib/commands/make/backend/policy.d.ts +4 -3
  81. package/lib/commands/make/backend/policy.js +3 -2
  82. package/lib/commands/make/backend/repository.d.ts +4 -3
  83. package/lib/commands/make/backend/repository.js +3 -2
  84. package/lib/commands/make/backend/route.d.ts +4 -3
  85. package/lib/commands/make/backend/route.js +1 -1
  86. package/lib/commands/make/backend/service-provider.d.ts +4 -3
  87. package/lib/commands/make/backend/service-provider.js +3 -2
  88. package/lib/commands/make/backend/validator.d.ts +4 -3
  89. package/lib/commands/make/backend/validator.js +3 -2
  90. package/lib/commands/make/frontend/component.d.ts +4 -3
  91. package/lib/commands/make/frontend/component.js +3 -2
  92. package/lib/commands/make/frontend/modal.d.ts +4 -3
  93. package/lib/commands/make/frontend/modal.js +3 -2
  94. package/lib/commands/make/frontend/model.d.ts +4 -3
  95. package/lib/commands/make/frontend/model.js +3 -2
  96. package/lib/commands/update/js-imports.d.ts +4 -3
  97. package/lib/commands/update/js-imports.js +1 -1
  98. package/lib/help.d.ts +5 -6
  99. package/lib/help.js +5 -4
  100. package/lib/index.d.ts +1 -1
  101. package/lib/index.js +3 -2
  102. package/lib/providers/index.d.ts +5 -0
  103. package/lib/providers/index.js +2 -0
  104. package/lib/{provider → providers}/php-provider.d.ts +0 -0
  105. package/lib/{provider → providers}/php-provider.js +2 -2
  106. package/lib/steps/extenders/api-serializer.js +2 -3
  107. package/lib/steps/extenders/base.d.ts +10 -10
  108. package/lib/steps/extenders/base.js +11 -11
  109. package/lib/steps/extenders/console-command.js +2 -3
  110. package/lib/steps/extenders/event.js +2 -3
  111. package/lib/steps/extenders/policy.js +2 -3
  112. package/lib/steps/extenders/route.js +2 -3
  113. package/lib/steps/extenders/service-provider.js +2 -3
  114. package/lib/steps/gen-ext-scaffolder.d.ts +6 -0
  115. package/lib/steps/gen-ext-scaffolder.js +508 -0
  116. package/lib/steps/js/base.d.ts +9 -9
  117. package/lib/steps/js/base.js +11 -11
  118. package/lib/steps/js/model.d.ts +5 -5
  119. package/lib/steps/js/model.js +8 -13
  120. package/lib/steps/misc/composer.d.ts +5 -6
  121. package/lib/steps/misc/composer.js +3 -3
  122. package/lib/steps/misc/git.d.ts +11 -0
  123. package/lib/steps/misc/git.js +20 -0
  124. package/lib/steps/misc/yarn.d.ts +5 -6
  125. package/lib/steps/misc/yarn.js +3 -3
  126. package/lib/steps/stubs/backend/api-controller.d.ts +1 -8
  127. package/lib/steps/stubs/backend/api-controller.js +2 -3
  128. package/lib/steps/stubs/backend/api-serializer.d.ts +4 -9
  129. package/lib/steps/stubs/backend/api-serializer.js +4 -4
  130. package/lib/steps/stubs/backend/command.d.ts +0 -5
  131. package/lib/steps/stubs/backend/command.js +1 -1
  132. package/lib/steps/stubs/backend/event-listener.d.ts +0 -5
  133. package/lib/steps/stubs/backend/event-listener.js +1 -1
  134. package/lib/steps/stubs/backend/handler-command.js +1 -1
  135. package/lib/steps/stubs/backend/handler.js +1 -1
  136. package/lib/steps/stubs/backend/migration.d.ts +4 -5
  137. package/lib/steps/stubs/backend/migration.js +8 -8
  138. package/lib/steps/stubs/backend/model.d.ts +4 -4
  139. package/lib/steps/stubs/backend/model.js +4 -4
  140. package/lib/steps/stubs/backend/policy.d.ts +0 -5
  141. package/lib/steps/stubs/backend/policy.js +1 -1
  142. package/lib/steps/stubs/backend/repository.d.ts +0 -5
  143. package/lib/steps/stubs/backend/repository.js +1 -1
  144. package/lib/steps/stubs/flarum-base.d.ts +9 -0
  145. package/lib/steps/stubs/flarum-base.js +10 -0
  146. package/lib/steps/stubs/frontend/component.js +0 -1
  147. package/lib/steps/stubs/frontend/modal.js +0 -1
  148. package/lib/steps/stubs/frontend/model.d.ts +4 -4
  149. package/lib/steps/stubs/frontend/model.js +3 -3
  150. package/lib/steps/stubs/js-base.d.ts +6 -7
  151. package/lib/steps/stubs/js-base.js +11 -16
  152. package/lib/steps/stubs/php-base.d.ts +7 -8
  153. package/lib/steps/stubs/php-base.js +12 -20
  154. package/lib/steps/update/js-imports.d.ts +5 -6
  155. package/lib/steps/update/js-imports.js +13 -17
  156. package/lib/utils/composer.d.ts +64 -0
  157. package/lib/utils/composer.js +8 -0
  158. package/lib/utils/migration.js +3 -3
  159. package/lib/utils/model-name.js +6 -6
  160. package/lib/utils/validation.d.ts +10 -7
  161. package/lib/utils/validation.js +9 -6
  162. package/oclif.manifest.json +1 -1
  163. package/package.json +53 -31
  164. package/php-subsystem/src/NodeVisitors/AddExtender.php +2 -1
  165. package/boilerplate/skeleton/extension/.github/workflows/build.yml +0 -32
  166. package/boilerplate/skeleton/extension/.github/workflows/lint.yml +0 -32
  167. package/boilerplate/skeleton/extension/.github/workflows/test.yml +0 -78
  168. package/lib/commands/infra/backend-testing.d.ts +0 -14
  169. package/lib/commands/infra/backend-testing.js +0 -26
  170. package/lib/provider/param-provider.d.ts +0 -15
  171. package/lib/provider/param-provider.js +0 -39
  172. package/lib/provider/path-provider.d.ts +0 -19
  173. package/lib/provider/path-provider.js +0 -24
  174. package/lib/steps/infra/backend-testing.d.ts +0 -8
  175. package/lib/steps/infra/backend-testing.js +0 -22
  176. package/lib/steps/infra/base.d.ts +0 -20
  177. package/lib/steps/infra/base.js +0 -36
  178. package/lib/steps/init/extension-skeleton.d.ts +0 -12
  179. package/lib/steps/init/extension-skeleton.js +0 -142
  180. package/lib/steps/step-manager.d.ts +0 -71
  181. package/lib/steps/step-manager.js +0 -173
  182. package/lib/steps/stubs/base.d.ts +0 -49
  183. package/lib/steps/stubs/base.js +0 -58
  184. package/lib/utils/extension-metadata.d.ts +0 -2
  185. package/lib/utils/extension-metadata.js +0 -21
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PhpSubsystemProvider = exports.ParamTypeType = exports.ExpressionType = void 0;
4
- const child_process_1 = require("child_process");
4
+ const node_child_process_1 = require("node:child_process");
5
5
  var ExpressionType;
6
6
  (function (ExpressionType) {
7
7
  ExpressionType["SCALAR"] = "scalar";
@@ -24,7 +24,7 @@ class PhpSubsystemProvider {
24
24
  op: 'extender.add',
25
25
  params: extenderDef,
26
26
  });
27
- const res = child_process_1.execSync(`php ${this.phpPath}`, { input });
27
+ const res = (0, node_child_process_1.execSync)(`php ${this.phpPath}`, { input });
28
28
  if (!res) {
29
29
  throw new Error(`The PHP subsystem returned an invalid value: ${res}`);
30
30
  }
@@ -2,10 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenerateApiSerializerAttributesExtender = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable no-template-curly-in-string */
6
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
5
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
7
6
  const validation_1 = require("../../utils/validation");
8
- const php_provider_1 = require("../../provider/php-provider");
7
+ const php_provider_1 = require("../../providers/php-provider");
9
8
  const base_1 = require("./base");
10
9
  class GenerateApiSerializerAttributesExtender extends base_1.BaseExtenderStep {
11
10
  constructor() {
@@ -1,24 +1,24 @@
1
1
  import { Store } from 'mem-fs';
2
- import { PromptObject } from 'prompts';
3
- import { ParamProvider } from '../../provider/param-provider';
4
- import { PathProvider } from '../../provider/path-provider';
5
- import { ExtenderDef, PhpProvider } from '../../provider/php-provider';
6
- import { Step } from '../step-manager';
7
- interface UserProvidedParam extends Omit<PromptObject, 'type'> {
2
+ import { ParamDef, IO } from 'boilersmith/io';
3
+ import { Paths } from 'boilersmith/paths';
4
+ import { ExtenderDef } from '../../providers/php-provider';
5
+ import { Step } from 'boilersmith/step-manager';
6
+ import { FlarumProviders } from '../../providers';
7
+ interface UserProvidedParam extends Omit<ParamDef, 'type'> {
8
8
  type: string;
9
9
  }
10
10
  export interface ExtenderGenerationSchema {
11
11
  extenderDef: ExtenderDef;
12
12
  params: UserProvidedParam[];
13
13
  }
14
- export declare abstract class BaseExtenderStep implements Step {
14
+ export declare abstract class BaseExtenderStep implements Step<FlarumProviders> {
15
15
  abstract type: string;
16
16
  protected abstract schema: ExtenderGenerationSchema;
17
17
  composable: boolean;
18
18
  exposes: never[];
19
- getExposed(): {};
19
+ getExposed(): Record<string, unknown>;
20
20
  protected params: Record<string, unknown>;
21
- run(fs: Store, pathProvider: PathProvider, paramProvider: ParamProvider, phpProvider: PhpProvider): Promise<Store>;
22
- protected compileParams(paramProvider: ParamProvider): Promise<Record<string, unknown>>;
21
+ run(fs: Store, paths: Paths, io: IO, providers: FlarumProviders): Promise<Store>;
22
+ protected compileParams(io: IO): Promise<Record<string, unknown>>;
23
23
  }
24
24
  export {};
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseExtenderStep = void 0;
4
4
  const mem_fs_editor_1 = require("mem-fs-editor");
5
- const clone_and_fill_1 = require("../../utils/clone-and-fill");
5
+ const clone_and_fill_1 = require("boilersmith/utils/clone-and-fill");
6
6
  class BaseExtenderStep {
7
7
  constructor() {
8
8
  this.composable = true;
@@ -11,21 +11,21 @@ class BaseExtenderStep {
11
11
  getExposed() {
12
12
  return {};
13
13
  }
14
- async run(fs, pathProvider, paramProvider, phpProvider) {
15
- const fsEditor = mem_fs_editor_1.create(fs);
16
- this.params = await this.compileParams(paramProvider);
17
- const filledExtenderDef = clone_and_fill_1.cloneAndFill(this.schema.extenderDef, this.params);
18
- const currExtendPhp = fsEditor.read(pathProvider.ext('extend.php'));
19
- const newExtendPhp = phpProvider.withExtender(currExtendPhp, filledExtenderDef);
20
- fsEditor.write(pathProvider.ext('extend.php'), newExtendPhp);
14
+ async run(fs, paths, io, providers) {
15
+ const fsEditor = (0, mem_fs_editor_1.create)(fs);
16
+ this.params = await this.compileParams(io);
17
+ const filledExtenderDef = (0, clone_and_fill_1.cloneAndFill)(this.schema.extenderDef, this.params);
18
+ const currExtendPhp = fsEditor.read(paths.package('extend.php'));
19
+ const newExtendPhp = providers.php.withExtender(currExtendPhp, filledExtenderDef);
20
+ fsEditor.write(paths.package('extend.php'), newExtendPhp);
21
21
  return fs;
22
22
  }
23
- async compileParams(paramProvider) {
23
+ async compileParams(io) {
24
24
  const params = {};
25
25
  const paramDefs = this.schema.params;
26
- for (let i = 0; i < paramDefs.length; i++) {
26
+ for (const paramDef of paramDefs) {
27
27
  // eslint-disable-next-line no-await-in-loop
28
- params[paramDefs[i].name] = await paramProvider.get(paramDefs[i]);
28
+ params[paramDef.name] = await io.getParam(paramDef);
29
29
  }
30
30
  return params;
31
31
  }
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenerateConsoleCommandExtender = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable no-template-curly-in-string */
6
5
  const validation_1 = require("../../utils/validation");
7
- const php_provider_1 = require("../../provider/php-provider");
6
+ const php_provider_1 = require("../../providers/php-provider");
8
7
  const base_1 = require("./base");
9
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
10
9
  class GenerateConsoleCommandExtender extends base_1.BaseExtenderStep {
11
10
  constructor() {
12
11
  super(...arguments);
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenerateEventListenerExtender = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable no-template-curly-in-string */
6
5
  const validation_1 = require("../../utils/validation");
7
- const php_provider_1 = require("../../provider/php-provider");
6
+ const php_provider_1 = require("../../providers/php-provider");
8
7
  const base_1 = require("./base");
9
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
10
9
  class GenerateEventListenerExtender extends base_1.BaseExtenderStep {
11
10
  constructor() {
12
11
  super(...arguments);
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GeneratePolicyExtender = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable no-template-curly-in-string */
6
5
  const validation_1 = require("../../utils/validation");
7
- const php_provider_1 = require("../../provider/php-provider");
6
+ const php_provider_1 = require("../../providers/php-provider");
8
7
  const base_1 = require("./base");
9
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
10
9
  class GeneratePolicyExtender extends base_1.BaseExtenderStep {
11
10
  constructor() {
12
11
  super(...arguments);
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenerateRoutesExtender = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable no-template-curly-in-string */
6
5
  const validation_1 = require("../../utils/validation");
7
- const php_provider_1 = require("../../provider/php-provider");
6
+ const php_provider_1 = require("../../providers/php-provider");
8
7
  const base_1 = require("./base");
9
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
10
9
  class GenerateRoutesExtender extends base_1.BaseExtenderStep {
11
10
  constructor() {
12
11
  super(...arguments);
@@ -2,11 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenerateServiceProviderExtender = void 0;
4
4
  const tslib_1 = require("tslib");
5
- /* eslint-disable no-template-curly-in-string */
6
5
  const validation_1 = require("../../utils/validation");
7
- const php_provider_1 = require("../../provider/php-provider");
6
+ const php_provider_1 = require("../../providers/php-provider");
8
7
  const base_1 = require("./base");
9
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
10
9
  class GenerateServiceProviderExtender extends base_1.BaseExtenderStep {
11
10
  constructor() {
12
11
  super(...arguments);
@@ -0,0 +1,6 @@
1
+ import { Scaffolder } from 'boilersmith/scaffolding/scaffolder';
2
+ export declare const EXTENSION_PARAMS: readonly ["packageName", "packageDescription", "packageNamespace", "authorName", "authorEmail", "extensionName", "licenseType", "mainGitBranch", "licenseText", "packageNamespaceEscapedSlash", "extensionId", "year", "backendDirectory", "frontendDirectory"];
3
+ export declare type ExtensionParams = typeof EXTENSION_PARAMS[number];
4
+ export declare const EXTENSION_MODULES: readonly ["core", "icon", "js", "jsCommon", "css", "locale", "gitConf", "githubActions", "prettier", "typescript", "bundlewatch", "backendTesting", "editorConfig", "styleci"];
5
+ export declare type ExtensionModules = typeof EXTENSION_MODULES[number];
6
+ export declare function genExtScaffolder(): Scaffolder<ExtensionParams, ExtensionModules>;