@holo-js/cli 0.1.1 → 0.1.3

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 (56) hide show
  1. package/dist/bin/holo.mjs +533 -4616
  2. package/dist/broadcast-YZS4OFCM.mjs +84 -0
  3. package/dist/broadcast-ZYFKUFM5.mjs +85 -0
  4. package/dist/cache-ODBZT6IP.mjs +67 -0
  5. package/dist/cache-V43YMG4K.mjs +66 -0
  6. package/dist/cache-migrations-KPOEH6GP.mjs +155 -0
  7. package/dist/cache-migrations-ZUOI2A7N.mjs +154 -0
  8. package/dist/chunk-3OTCSFDG.mjs +849 -0
  9. package/dist/chunk-66FHW725.mjs +465 -0
  10. package/dist/chunk-BWW5TDFI.mjs +4 -0
  11. package/dist/chunk-CUL4RJTG.mjs +22 -0
  12. package/dist/chunk-D4GG556Y.mjs +23 -0
  13. package/dist/chunk-D7O4SU6N.mjs +2 -0
  14. package/dist/chunk-ET7UXHHQ.mjs +166 -0
  15. package/dist/chunk-EUIVXVJL.mjs +25 -0
  16. package/dist/chunk-G5ADO27Q.mjs +463 -0
  17. package/dist/chunk-GSQ3HTRO.mjs +165 -0
  18. package/dist/chunk-H7TJ4FB3.mjs +848 -0
  19. package/dist/chunk-HE6FYNVN.mjs +3203 -0
  20. package/dist/chunk-ICJR7TS4.mjs +66 -0
  21. package/dist/chunk-ICKN56JY.mjs +342 -0
  22. package/dist/chunk-JX2ZH6XY.mjs +270 -0
  23. package/dist/chunk-M7J3YTHR.mjs +26 -0
  24. package/dist/chunk-Q5F6C2D4.mjs +65 -0
  25. package/dist/chunk-QYLSMF7V.mjs +539 -0
  26. package/dist/chunk-RB65DLR4.mjs +343 -0
  27. package/dist/chunk-S7P7EBM3.mjs +787 -0
  28. package/dist/chunk-SRWJU3A5.mjs +11 -0
  29. package/dist/chunk-T4OVZZEE.mjs +3204 -0
  30. package/dist/chunk-URK7C3VQ.mjs +538 -0
  31. package/dist/chunk-VT5IDQG6.mjs +788 -0
  32. package/dist/chunk-XUYKPU5Q.mjs +272 -0
  33. package/dist/chunk-ZXDU7RHU.mjs +9 -0
  34. package/dist/config-DMWBMMGD.mjs +26 -0
  35. package/dist/config-LS5USBRB.mjs +25 -0
  36. package/dist/dev-KGRIGLJY.mjs +42 -0
  37. package/dist/dev-LVHDCPVS.mjs +43 -0
  38. package/dist/discovery-GBLAUTXS.mjs +28 -0
  39. package/dist/discovery-R733D2PO.mjs +29 -0
  40. package/dist/generators-32R45P6Z.mjs +426 -0
  41. package/dist/generators-WSF23UKM.mjs +425 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.mjs +536 -4618
  44. package/dist/queue-6N7HQMRL.mjs +625 -0
  45. package/dist/queue-QG5EXOG4.mjs +626 -0
  46. package/dist/queue-migrations-JWKU45Y3.mjs +163 -0
  47. package/dist/queue-migrations-O6QSSDPQ.mjs +162 -0
  48. package/dist/runtime-ANBO7VQM.mjs +33 -0
  49. package/dist/runtime-OOSJ5JBY.mjs +32 -0
  50. package/dist/runtime-RI4OWTIT.mjs +55 -0
  51. package/dist/runtime-ZRPK5DIT.mjs +56 -0
  52. package/dist/scaffold-IYWZKT3W.mjs +120 -0
  53. package/dist/scaffold-ULATB4CA.mjs +121 -0
  54. package/dist/security-AE6LGNC4.mjs +68 -0
  55. package/dist/security-OCOPEH2V.mjs +69 -0
  56. package/package.json +10 -9
@@ -0,0 +1,272 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/parsing.ts
4
+ import { createInterface } from "readline/promises";
5
+ var SUPPORTED_NEW_FRAMEWORKS = ["nuxt", "next", "sveltekit"];
6
+ var SUPPORTED_NEW_DATABASE_DRIVERS = ["sqlite", "mysql", "postgres"];
7
+ var SUPPORTED_NEW_PACKAGE_MANAGERS = ["bun", "npm", "pnpm", "yarn"];
8
+ var SUPPORTED_NEW_STORAGE_DISKS = ["local", "public"];
9
+ var SUPPORTED_NEW_OPTIONAL_PACKAGES = ["storage", "events", "queue", "validation", "forms", "auth", "authorization", "notifications", "mail", "broadcast", "security", "cache"];
10
+ var SUPPORTED_INSTALL_TARGETS = ["queue", "events", "auth", "authorization", "notifications", "mail", "broadcast", "security", "cache"];
11
+ var SUPPORTED_QUEUE_INSTALL_DRIVERS = ["sync", "redis", "database"];
12
+ var SUPPORTED_CACHE_INSTALL_DRIVERS = ["file", "redis", "database"];
13
+ function parseTokens(tokens) {
14
+ const args = [];
15
+ const flags = {};
16
+ const isNumericValueToken = (value) => typeof value === "string" && /^-\d+$/.test(value);
17
+ const assignFlag = (name, value) => {
18
+ const existing = flags[name];
19
+ if (typeof existing === "undefined") {
20
+ flags[name] = value;
21
+ return;
22
+ }
23
+ if (Array.isArray(existing)) {
24
+ flags[name] = [...existing, String(value)];
25
+ return;
26
+ }
27
+ flags[name] = [String(existing), String(value)];
28
+ };
29
+ for (let index = 0; index < tokens.length; index += 1) {
30
+ const token = tokens[index];
31
+ if (typeof token === "undefined") {
32
+ continue;
33
+ }
34
+ if (token === "--") {
35
+ args.push(...tokens.slice(index + 1));
36
+ break;
37
+ }
38
+ if (token.startsWith("--")) {
39
+ const flag = token.slice(2);
40
+ const separator = flag.indexOf("=");
41
+ if (separator >= 0) {
42
+ assignFlag(flag.slice(0, separator), flag.slice(separator + 1));
43
+ continue;
44
+ }
45
+ const next = tokens[index + 1];
46
+ if (next && (!next.startsWith("-") || isNumericValueToken(next))) {
47
+ assignFlag(flag, next);
48
+ index += 1;
49
+ continue;
50
+ }
51
+ assignFlag(flag, true);
52
+ continue;
53
+ }
54
+ if (token.startsWith("-") && token.length > 1) {
55
+ const short = token.slice(1);
56
+ if (short.length > 1) {
57
+ for (const char of short) {
58
+ assignFlag(char, true);
59
+ }
60
+ continue;
61
+ }
62
+ const next = tokens[index + 1];
63
+ if (next && (!next.startsWith("-") || isNumericValueToken(next))) {
64
+ assignFlag(short, next);
65
+ index += 1;
66
+ continue;
67
+ }
68
+ assignFlag(short, true);
69
+ continue;
70
+ }
71
+ args.push(token);
72
+ }
73
+ return { args, flags };
74
+ }
75
+ function isInteractive(io, flags) {
76
+ const disabled = flags["no-interactive"] === true;
77
+ return io.stdin.isTTY === true && io.stdout.isTTY === true && !disabled;
78
+ }
79
+ async function prompt(io, label) {
80
+ const rl = createInterface({
81
+ input: io.stdin,
82
+ output: io.stdout
83
+ });
84
+ try {
85
+ return (await rl.question(label)).trim();
86
+ } finally {
87
+ rl.close();
88
+ }
89
+ }
90
+ async function confirm(io, label, defaultValue = false) {
91
+ const suffix = defaultValue ? " [Y/n] " : " [y/N] ";
92
+ const answer = (await prompt(io, `${label}${suffix}`)).toLowerCase();
93
+ if (!answer) {
94
+ return defaultValue;
95
+ }
96
+ return answer === "y" || answer === "yes";
97
+ }
98
+ function normalizeChoice(value, allowed, label) {
99
+ const normalized = value?.trim().toLowerCase();
100
+ if (normalized && allowed.includes(normalized)) {
101
+ return normalized;
102
+ }
103
+ throw new Error(`Unsupported ${label}: ${value ?? "(empty)"}. Expected one of ${allowed.join(", ")}.`);
104
+ }
105
+ async function promptChoice(io, label, allowed, defaultValue) {
106
+ const answer = (await prompt(io, `${label} (${allowed.join("/")}) [${defaultValue}]: `)).trim().toLowerCase();
107
+ if (!answer) {
108
+ return defaultValue;
109
+ }
110
+ return normalizeChoice(answer, allowed, label);
111
+ }
112
+ function normalizeOptionalPackageName(value) {
113
+ const current = value.trim().toLowerCase();
114
+ if (current === "validate") {
115
+ return "validation";
116
+ }
117
+ if (current === "form") {
118
+ return "forms";
119
+ }
120
+ return current;
121
+ }
122
+ function normalizeOptionalPackages(value) {
123
+ if (!value || value.length === 0) {
124
+ return [];
125
+ }
126
+ const normalized = /* @__PURE__ */ new Set();
127
+ for (const raw of value) {
128
+ const current = normalizeOptionalPackageName(raw);
129
+ if (current === "none") {
130
+ continue;
131
+ }
132
+ if (SUPPORTED_NEW_OPTIONAL_PACKAGES.includes(current)) {
133
+ normalized.add(current);
134
+ if (current === "forms") {
135
+ normalized.add("validation");
136
+ }
137
+ continue;
138
+ }
139
+ throw new Error(
140
+ `Unsupported optional package: ${raw}. Expected one of ${[...SUPPORTED_NEW_OPTIONAL_PACKAGES, "none"].join(", ")}.`
141
+ );
142
+ }
143
+ return [...normalized].sort((left, right) => left.localeCompare(right));
144
+ }
145
+ async function promptOptionalPackages(io) {
146
+ const answer = await prompt(io, `Optional packages (${[...SUPPORTED_NEW_OPTIONAL_PACKAGES, "none"].join("/")}): `);
147
+ return normalizeOptionalPackages(splitCsv(answer) ?? (answer ? [answer] : []));
148
+ }
149
+ async function resolveNewProjectInput(io, input, prompts = {
150
+ prompt: (label) => prompt(io, label),
151
+ choose: (label, allowed, defaultValue) => promptChoice(io, label, allowed, defaultValue),
152
+ optionalPackages: () => promptOptionalPackages(io)
153
+ }) {
154
+ const flagProjectName = resolveStringFlag(input.flags, "name");
155
+ const positionalProjectName = input.args[0]?.trim();
156
+ if (flagProjectName && positionalProjectName && flagProjectName !== positionalProjectName) {
157
+ throw new Error("Conflicting project names. Use either the positional argument or --name, not both.");
158
+ }
159
+ const interactive = isInteractive(io, input.flags);
160
+ const projectName = (flagProjectName ?? positionalProjectName)?.trim() || (interactive ? await prompts.prompt("Project name: ") : "");
161
+ if (!projectName) {
162
+ throw new Error(interactive ? "Project creation cancelled." : "Missing required argument: Project name.");
163
+ }
164
+ const framework = resolveStringFlag(input.flags, "framework") ? normalizeChoice(resolveStringFlag(input.flags, "framework"), SUPPORTED_NEW_FRAMEWORKS, "framework") : interactive ? await prompts.choose("Framework", SUPPORTED_NEW_FRAMEWORKS, "nuxt") : "nuxt";
165
+ const databaseDriver = resolveStringFlag(input.flags, "database") ? normalizeChoice(resolveStringFlag(input.flags, "database"), SUPPORTED_NEW_DATABASE_DRIVERS, "database driver") : interactive ? await prompts.choose("Database driver", SUPPORTED_NEW_DATABASE_DRIVERS, "sqlite") : "sqlite";
166
+ const packageManager = resolveStringFlag(input.flags, "package-manager") ? normalizeChoice(resolveStringFlag(input.flags, "package-manager"), SUPPORTED_NEW_PACKAGE_MANAGERS, "package manager") : interactive ? await prompts.choose("Package manager", SUPPORTED_NEW_PACKAGE_MANAGERS, "bun") : "bun";
167
+ const requestedOptionalPackages = collectMultiStringFlag(input.flags, "package");
168
+ let optionalPackages;
169
+ if (requestedOptionalPackages) {
170
+ const normalizedOptionalPackages = [];
171
+ for (const entry of requestedOptionalPackages) {
172
+ normalizedOptionalPackages.push(...splitCsv(entry));
173
+ }
174
+ optionalPackages = normalizeOptionalPackages(normalizedOptionalPackages);
175
+ } else if (interactive) {
176
+ optionalPackages = await prompts.optionalPackages();
177
+ } else {
178
+ optionalPackages = [];
179
+ }
180
+ const storageDefaultDisk = optionalPackages.includes("storage") ? resolveStringFlag(input.flags, "storage-default-disk") ? normalizeChoice(resolveStringFlag(input.flags, "storage-default-disk"), SUPPORTED_NEW_STORAGE_DISKS, "storage default disk") : interactive ? await prompts.choose("Default storage disk", SUPPORTED_NEW_STORAGE_DISKS, "local") : "local" : "local";
181
+ return {
182
+ projectName,
183
+ framework,
184
+ databaseDriver,
185
+ packageManager,
186
+ storageDefaultDisk,
187
+ optionalPackages
188
+ };
189
+ }
190
+ async function ensureRequiredArg(io, input, index, label) {
191
+ const value = input.args[index]?.trim();
192
+ if (value) {
193
+ return value;
194
+ }
195
+ if (!isInteractive(io, input.flags)) {
196
+ throw new Error(`Missing required argument: ${label}.`);
197
+ }
198
+ const prompted = await prompt(io, `${label}: `);
199
+ if (!prompted) {
200
+ throw new Error(`Missing required argument: ${label}.`);
201
+ }
202
+ return prompted;
203
+ }
204
+ function resolveStringFlag(flags, name, alias) {
205
+ const value = flags[name] ?? (alias ? flags[alias] : void 0);
206
+ if (Array.isArray(value)) {
207
+ return value[value.length - 1];
208
+ }
209
+ if (typeof value === "string") {
210
+ return value;
211
+ }
212
+ return void 0;
213
+ }
214
+ function collectMultiStringFlag(flags, name, alias) {
215
+ const value = flags[name] ?? (alias ? flags[alias] : void 0);
216
+ if (Array.isArray(value)) {
217
+ return value.map((entry) => entry.trim()).filter(Boolean);
218
+ }
219
+ if (typeof value === "string") {
220
+ const normalized = value.trim();
221
+ return normalized ? [normalized] : void 0;
222
+ }
223
+ return void 0;
224
+ }
225
+ function resolveBooleanFlag(flags, name, alias) {
226
+ const value = flags[name] ?? (alias ? flags[alias] : void 0);
227
+ if (Array.isArray(value)) {
228
+ return value[value.length - 1] === "true";
229
+ }
230
+ if (typeof value === "string") {
231
+ return value === "true";
232
+ }
233
+ return value === true;
234
+ }
235
+ function parseNumberFlag(flags, name, alias) {
236
+ const raw = resolveStringFlag(flags, name, alias);
237
+ if (typeof raw === "undefined") {
238
+ return void 0;
239
+ }
240
+ if (!/^\d+$/.test(raw)) {
241
+ throw new Error(`Flag "--${name}" must be a non-negative integer.`);
242
+ }
243
+ const parsed = Number.parseInt(raw, 10);
244
+ if (!Number.isInteger(parsed) || parsed < 0) {
245
+ throw new Error(`Flag "--${name}" must be a non-negative integer.`);
246
+ }
247
+ return parsed;
248
+ }
249
+ function splitCsv(value) {
250
+ if (!value) {
251
+ return void 0;
252
+ }
253
+ return value.split(",").map((part) => part.trim()).filter(Boolean);
254
+ }
255
+
256
+ export {
257
+ SUPPORTED_INSTALL_TARGETS,
258
+ SUPPORTED_QUEUE_INSTALL_DRIVERS,
259
+ SUPPORTED_CACHE_INSTALL_DRIVERS,
260
+ parseTokens,
261
+ isInteractive,
262
+ confirm,
263
+ normalizeChoice,
264
+ normalizeOptionalPackages,
265
+ resolveNewProjectInput,
266
+ ensureRequiredArg,
267
+ resolveStringFlag,
268
+ collectMultiStringFlag,
269
+ resolveBooleanFlag,
270
+ parseNumberFlag,
271
+ splitCsv
272
+ };
@@ -0,0 +1,9 @@
1
+ // src/io.ts
2
+ function writeLine(stream, message = "") {
3
+ stream.write(`${message}
4
+ `);
5
+ }
6
+
7
+ export {
8
+ writeLine
9
+ };
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ defaultProjectConfig,
4
+ ensureGeneratedSchemaPlaceholder,
5
+ ensureProjectConfig,
6
+ loadProjectConfig,
7
+ resolveGeneratedSchemaPath,
8
+ serializeDatabaseConfig,
9
+ serializeProjectConfig,
10
+ writeProjectConfig
11
+ } from "./chunk-ET7UXHHQ.mjs";
12
+ import "./chunk-3OTCSFDG.mjs";
13
+ import {
14
+ readTextFile
15
+ } from "./chunk-66FHW725.mjs";
16
+ export {
17
+ defaultProjectConfig,
18
+ ensureGeneratedSchemaPlaceholder,
19
+ ensureProjectConfig,
20
+ loadProjectConfig,
21
+ readTextFile,
22
+ resolveGeneratedSchemaPath,
23
+ serializeDatabaseConfig,
24
+ serializeProjectConfig,
25
+ writeProjectConfig
26
+ };
@@ -0,0 +1,25 @@
1
+ import {
2
+ defaultProjectConfig,
3
+ ensureGeneratedSchemaPlaceholder,
4
+ ensureProjectConfig,
5
+ loadProjectConfig,
6
+ resolveGeneratedSchemaPath,
7
+ serializeDatabaseConfig,
8
+ serializeProjectConfig,
9
+ writeProjectConfig
10
+ } from "./chunk-GSQ3HTRO.mjs";
11
+ import "./chunk-H7TJ4FB3.mjs";
12
+ import {
13
+ readTextFile
14
+ } from "./chunk-G5ADO27Q.mjs";
15
+ export {
16
+ defaultProjectConfig,
17
+ ensureGeneratedSchemaPlaceholder,
18
+ ensureProjectConfig,
19
+ loadProjectConfig,
20
+ readTextFile,
21
+ resolveGeneratedSchemaPath,
22
+ serializeDatabaseConfig,
23
+ serializeProjectConfig,
24
+ writeProjectConfig
25
+ };
@@ -0,0 +1,42 @@
1
+ import {
2
+ collectDirectoryTree,
3
+ collectDiscoveryWatchRoots,
4
+ isDiscoveryRelevantPath,
5
+ isIgnorableWatchError,
6
+ isRecursiveWatchUnsupported,
7
+ normalizeWatchedFilePath,
8
+ resolvePackageManagerCommand,
9
+ resolvePackageManagerInstallInvocation,
10
+ resolveProjectPackageManager,
11
+ runProjectDependencyInstall,
12
+ runProjectDevServer,
13
+ runProjectLifecycleScript,
14
+ runProjectPrepare,
15
+ toPosixSlashes
16
+ } from "./chunk-ICKN56JY.mjs";
17
+ import {
18
+ hasProjectDependency
19
+ } from "./chunk-CUL4RJTG.mjs";
20
+ import "./chunk-D7O4SU6N.mjs";
21
+ import "./chunk-S7P7EBM3.mjs";
22
+ import "./chunk-HE6FYNVN.mjs";
23
+ import "./chunk-GSQ3HTRO.mjs";
24
+ import "./chunk-H7TJ4FB3.mjs";
25
+ import "./chunk-G5ADO27Q.mjs";
26
+ export {
27
+ collectDirectoryTree,
28
+ collectDiscoveryWatchRoots,
29
+ hasProjectDependency,
30
+ isDiscoveryRelevantPath,
31
+ isIgnorableWatchError,
32
+ isRecursiveWatchUnsupported,
33
+ normalizeWatchedFilePath,
34
+ resolvePackageManagerCommand,
35
+ resolvePackageManagerInstallInvocation,
36
+ resolveProjectPackageManager,
37
+ runProjectDependencyInstall,
38
+ runProjectDevServer,
39
+ runProjectLifecycleScript,
40
+ runProjectPrepare,
41
+ toPosixSlashes
42
+ };
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ collectDirectoryTree,
4
+ collectDiscoveryWatchRoots,
5
+ isDiscoveryRelevantPath,
6
+ isIgnorableWatchError,
7
+ isRecursiveWatchUnsupported,
8
+ normalizeWatchedFilePath,
9
+ resolvePackageManagerCommand,
10
+ resolvePackageManagerInstallInvocation,
11
+ resolveProjectPackageManager,
12
+ runProjectDependencyInstall,
13
+ runProjectDevServer,
14
+ runProjectLifecycleScript,
15
+ runProjectPrepare,
16
+ toPosixSlashes
17
+ } from "./chunk-RB65DLR4.mjs";
18
+ import {
19
+ hasProjectDependency
20
+ } from "./chunk-D4GG556Y.mjs";
21
+ import "./chunk-BWW5TDFI.mjs";
22
+ import "./chunk-VT5IDQG6.mjs";
23
+ import "./chunk-T4OVZZEE.mjs";
24
+ import "./chunk-ET7UXHHQ.mjs";
25
+ import "./chunk-3OTCSFDG.mjs";
26
+ import "./chunk-66FHW725.mjs";
27
+ export {
28
+ collectDirectoryTree,
29
+ collectDiscoveryWatchRoots,
30
+ hasProjectDependency,
31
+ isDiscoveryRelevantPath,
32
+ isIgnorableWatchError,
33
+ isRecursiveWatchUnsupported,
34
+ normalizeWatchedFilePath,
35
+ resolvePackageManagerCommand,
36
+ resolvePackageManagerInstallInvocation,
37
+ resolveProjectPackageManager,
38
+ runProjectDependencyInstall,
39
+ runProjectDevServer,
40
+ runProjectLifecycleScript,
41
+ runProjectPrepare,
42
+ toPosixSlashes
43
+ };
@@ -0,0 +1,28 @@
1
+ import {
2
+ collectImportedBindingsBySource,
3
+ discoverAppCommands,
4
+ extractListensToItems,
5
+ loadRegisteredMigrations,
6
+ loadRegisteredModels,
7
+ loadRegisteredSeeders,
8
+ prepareProjectDiscovery,
9
+ resolveListenerEventNamesForDiscovery,
10
+ resolveListenerEventNamesFromSource,
11
+ resolveNamedExport,
12
+ resolveNamedExportEntry
13
+ } from "./chunk-S7P7EBM3.mjs";
14
+ import "./chunk-H7TJ4FB3.mjs";
15
+ import "./chunk-G5ADO27Q.mjs";
16
+ export {
17
+ collectImportedBindingsBySource,
18
+ discoverAppCommands,
19
+ extractListensToItems,
20
+ loadRegisteredMigrations,
21
+ loadRegisteredModels,
22
+ loadRegisteredSeeders,
23
+ prepareProjectDiscovery,
24
+ resolveListenerEventNamesForDiscovery,
25
+ resolveListenerEventNamesFromSource,
26
+ resolveNamedExport,
27
+ resolveNamedExportEntry
28
+ };
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ collectImportedBindingsBySource,
4
+ discoverAppCommands,
5
+ extractListensToItems,
6
+ loadRegisteredMigrations,
7
+ loadRegisteredModels,
8
+ loadRegisteredSeeders,
9
+ prepareProjectDiscovery,
10
+ resolveListenerEventNamesForDiscovery,
11
+ resolveListenerEventNamesFromSource,
12
+ resolveNamedExport,
13
+ resolveNamedExportEntry
14
+ } from "./chunk-VT5IDQG6.mjs";
15
+ import "./chunk-3OTCSFDG.mjs";
16
+ import "./chunk-66FHW725.mjs";
17
+ export {
18
+ collectImportedBindingsBySource,
19
+ discoverAppCommands,
20
+ extractListensToItems,
21
+ loadRegisteredMigrations,
22
+ loadRegisteredModels,
23
+ loadRegisteredSeeders,
24
+ prepareProjectDiscovery,
25
+ resolveListenerEventNamesForDiscovery,
26
+ resolveListenerEventNamesFromSource,
27
+ resolveNamedExport,
28
+ resolveNamedExportEntry
29
+ };