@holo-js/cli 0.2.6 → 0.3.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 (51) hide show
  1. package/dist/bin/holo.mjs +417 -109
  2. package/dist/{broadcast-JBQWQZSO.mjs → broadcast-PJLFVZH4.mjs} +12 -12
  3. package/dist/cache-KR4ACOYD.mjs +137 -0
  4. package/dist/{cache-migrations-77TLXIVG.mjs → cache-migrations-J34RE4WH.mjs} +13 -13
  5. package/dist/{chunk-LXGQCG56.mjs → chunk-2XXJ76YC.mjs} +1 -1
  6. package/dist/chunk-3ICVWL2M.mjs +491 -0
  7. package/dist/{chunk-YEFJBN56.mjs → chunk-4VYR2ARA.mjs} +11 -8
  8. package/dist/{chunk-VP2E62DF.mjs → chunk-7KZVFDSI.mjs} +49 -349
  9. package/dist/chunk-AZ6NVJAP.mjs +360 -0
  10. package/dist/chunk-CT23GSEC.mjs +156 -0
  11. package/dist/{chunk-7B2RVYLL.mjs → chunk-FFTJKBQF.mjs} +293 -399
  12. package/dist/{chunk-KS5TWO75.mjs → chunk-I3RRWDLV.mjs} +7 -7
  13. package/dist/{chunk-J76GH2DR.mjs → chunk-L3YATEQY.mjs} +129 -86
  14. package/dist/{chunk-4K4CWMMP.mjs → chunk-L6FF22IV.mjs} +76 -61
  15. package/dist/{chunk-ILU426CF.mjs → chunk-PVVGQSUP.mjs} +482 -2
  16. package/dist/chunk-XBOVM6LO.mjs +41 -0
  17. package/dist/{chunk-I7QBCEV7.mjs → chunk-Y355VYRN.mjs} +5 -3
  18. package/dist/{chunk-VRGB6DIS.mjs → chunk-YJWHIQ45.mjs} +2 -0
  19. package/dist/{config-MD27U4FM.mjs → config-XVPV6DJW.mjs} +3 -3
  20. package/dist/{dev-L4Y2GU2E.mjs → dev-NTQTEY5B.mjs} +9 -8
  21. package/dist/{discovery-GWTBF5RZ.mjs → discovery-TMPUQQHI.mjs} +8 -6
  22. package/dist/{generators-VCYISHWO.mjs → generators-3FDCCJDC.mjs} +16 -15
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.mjs +419 -111
  25. package/dist/{media-migrations-BNVAPYEM.mjs → media-migrations-UJ6BMUSZ.mjs} +12 -12
  26. package/dist/plugins-USHY6SPF.mjs +24 -0
  27. package/dist/{queue-5BXSDFCO.mjs → queue-6U7JU4T6.mjs} +53 -17
  28. package/dist/{queue-D4LSWNS2.mjs → queue-VJEFD6SE.mjs} +55 -19
  29. package/dist/{queue-migrations-EF4AMMSY.mjs → queue-migrations-6YUUOKMH.mjs} +17 -14
  30. package/dist/{runtime-RPMZMTD4.mjs → runtime-FVRB4O2M.mjs} +8 -8
  31. package/dist/{runtime-GSXF4NB3.mjs → runtime-P5R7H3B4.mjs} +1 -1
  32. package/dist/runtime-worker.mjs +7 -1
  33. package/dist/{scaffold-NJ5VH73M.mjs → scaffold-F3AZDNPG.mjs} +9 -4
  34. package/dist/{security-K5PZS3E3.mjs → security-X4274RHX.mjs} +8 -7
  35. package/package.json +35 -8
  36. package/dist/broadcast-YGJFCEPP.mjs +0 -204
  37. package/dist/cache-HUGRWOHQ.mjs +0 -66
  38. package/dist/cache-OSJ4PD52.mjs +0 -66
  39. package/dist/cache-migrations-FKAHRP24.mjs +0 -173
  40. package/dist/chunk-AJLRAC5M.mjs +0 -497
  41. package/dist/chunk-C624G3R2.mjs +0 -3306
  42. package/dist/chunk-D7O4SU6N.mjs +0 -2
  43. package/dist/chunk-FGQ2I2YH.mjs +0 -22
  44. package/dist/chunk-LBJAJLKU.mjs +0 -25
  45. package/dist/dev-YPBQBEOE.mjs +0 -44
  46. package/dist/generators-H4NTV4DB.mjs +0 -520
  47. package/dist/media-migrations-NNB3DAQR.mjs +0 -106
  48. package/dist/queue-migrations-LXEWXJYT.mjs +0 -168
  49. package/dist/runtime-UKBJQFXM.mjs +0 -57
  50. package/dist/scaffold-VV3KTYGO.mjs +0 -139
  51. package/dist/security-JR4P7L2C.mjs +0 -71
@@ -1,106 +0,0 @@
1
- import {
2
- hasRegisteredCreateTableMigration,
3
- hasRegisteredMigrationSlug,
4
- nextMigrationTemplate
5
- } from "./chunk-LXGQCG56.mjs";
6
- import "./chunk-LBJAJLKU.mjs";
7
- import {
8
- writeLine
9
- } from "./chunk-I7QBCEV7.mjs";
10
- import "./chunk-D7O4SU6N.mjs";
11
- import {
12
- prepareProjectDiscovery
13
- } from "./chunk-VP2E62DF.mjs";
14
- import "./chunk-C624G3R2.mjs";
15
- import {
16
- ensureProjectConfig
17
- } from "./chunk-YEFJBN56.mjs";
18
- import {
19
- loadGeneratedProjectRegistry
20
- } from "./chunk-J76GH2DR.mjs";
21
- import {
22
- makeProjectRelativePath,
23
- resolveDefaultArtifactPath,
24
- writeTextFile
25
- } from "./chunk-ILU426CF.mjs";
26
-
27
- // src/media-migrations.ts
28
- import { readdir } from "fs/promises";
29
- import { resolve } from "path";
30
- import { normalizeMigrationSlug } from "@holo-js/db";
31
- var DEFAULT_MEDIA_TABLE = "media";
32
- function normalizeMediaMigrationName(tableName = DEFAULT_MEDIA_TABLE) {
33
- return normalizeMigrationSlug(`create_${tableName.replaceAll(".", "_")}_table`);
34
- }
35
- function renderMediaTableMigration(tableName = DEFAULT_MEDIA_TABLE) {
36
- const tableNameLiteral = JSON.stringify(tableName);
37
- return [
38
- "import { defineMigration } from '@holo-js/db'",
39
- "",
40
- "export default defineMigration({",
41
- " async up({ schema }) {",
42
- ` await schema.createTable(${tableNameLiteral}, (table) => {`,
43
- " table.id()",
44
- " table.uuid('uuid').unique()",
45
- " table.string('model_type')",
46
- " table.string('model_id')",
47
- " table.string('collection_name').default('default')",
48
- " table.string('name')",
49
- " table.string('file_name')",
50
- " table.string('disk')",
51
- " table.string('conversions_disk').nullable()",
52
- " table.string('mime_type').nullable()",
53
- " table.string('extension').nullable()",
54
- " table.bigInteger('size')",
55
- " table.string('path')",
56
- " table.json('generated_conversions')",
57
- " table.integer('order_column').default(1)",
58
- " table.timestamps()",
59
- " table.index(['model_type', 'model_id'])",
60
- " table.index(['model_type', 'model_id', 'collection_name'])",
61
- " })",
62
- " },",
63
- " async down({ schema }) {",
64
- ` await schema.dropTable(${tableNameLiteral})`,
65
- " },",
66
- "})",
67
- ""
68
- ].join("\n");
69
- }
70
- async function hasMigrationFile(migrationsDir, migrationName) {
71
- const entries = await readdir(migrationsDir).catch(() => []);
72
- return entries.some((entry) => entry.endsWith(`_${migrationName}.ts`) || entry.endsWith(`_${migrationName}.mts`) || entry.endsWith(`_${migrationName}.js`) || entry.endsWith(`_${migrationName}.mjs`) || entry.endsWith(`_${migrationName}.cts`) || entry.endsWith(`_${migrationName}.cjs`));
73
- }
74
- async function createMediaTableMigration(projectRoot, options = {}) {
75
- const project = await ensureProjectConfig(projectRoot);
76
- const registry = await loadGeneratedProjectRegistry(projectRoot) ?? await prepareProjectDiscovery(projectRoot, project.config);
77
- const tableName = DEFAULT_MEDIA_TABLE;
78
- const migrationName = normalizeMediaMigrationName(tableName);
79
- const migrationsDir = resolve(projectRoot, project.config.paths.migrations);
80
- if (hasRegisteredMigrationSlug(registry, migrationName) || hasRegisteredCreateTableMigration(registry, tableName) || await hasMigrationFile(migrationsDir, migrationName)) {
81
- if (options.skipIfExists === true) {
82
- return void 0;
83
- }
84
- throw new Error(`A migration for table "${tableName}" already exists.`);
85
- }
86
- const migrationTemplate = await nextMigrationTemplate(
87
- migrationName,
88
- migrationsDir
89
- );
90
- const migrationFilePath = resolveDefaultArtifactPath(projectRoot, project.config.paths.migrations, migrationTemplate.fileName);
91
- await writeTextFile(migrationFilePath, renderMediaTableMigration(tableName));
92
- return migrationFilePath;
93
- }
94
- async function runMediaTableCommand(io, projectRoot) {
95
- const migrationFilePath = await createMediaTableMigration(projectRoot);
96
- const { runProjectPrepare } = await import("./dev-L4Y2GU2E.mjs");
97
- await runProjectPrepare(projectRoot);
98
- writeLine(io.stdout, `Created migration: ${makeProjectRelativePath(projectRoot, migrationFilePath)}`);
99
- }
100
- export {
101
- DEFAULT_MEDIA_TABLE,
102
- createMediaTableMigration,
103
- normalizeMediaMigrationName,
104
- renderMediaTableMigration,
105
- runMediaTableCommand
106
- };
@@ -1,168 +0,0 @@
1
- import {
2
- runProjectPrepare
3
- } from "./chunk-AJLRAC5M.mjs";
4
- import "./chunk-FGQ2I2YH.mjs";
5
- import {
6
- getRegistryMigrationSlug,
7
- hasRegisteredCreateTableMigration,
8
- hasRegisteredMigrationSlug,
9
- nextMigrationTemplate
10
- } from "./chunk-LXGQCG56.mjs";
11
- import {
12
- writeLine
13
- } from "./chunk-I7QBCEV7.mjs";
14
- import "./chunk-LBJAJLKU.mjs";
15
- import "./chunk-D7O4SU6N.mjs";
16
- import {
17
- prepareProjectDiscovery
18
- } from "./chunk-VP2E62DF.mjs";
19
- import "./chunk-7B2RVYLL.mjs";
20
- import {
21
- ensureProjectConfig
22
- } from "./chunk-YEFJBN56.mjs";
23
- import {
24
- loadGeneratedProjectRegistry
25
- } from "./chunk-J76GH2DR.mjs";
26
- import {
27
- makeProjectRelativePath,
28
- resolveDefaultArtifactPath,
29
- writeTextFile
30
- } from "./chunk-ILU426CF.mjs";
31
-
32
- // src/queue-migrations.ts
33
- import { resolve } from "path";
34
- import { loadConfigDirectory } from "@holo-js/config";
35
- import { normalizeMigrationSlug } from "@holo-js/db";
36
- var DEFAULT_DATABASE_QUEUE_TABLE = "jobs";
37
- var DEFAULT_FAILED_JOBS_TABLE = "failed_jobs";
38
- async function loadQueueConfig(projectRoot) {
39
- return (await loadConfigDirectory(projectRoot)).queue;
40
- }
41
- function normalizeQueueMigrationName(tableName) {
42
- return normalizeMigrationSlug(`create_${tableName.replaceAll(".", "_")}_table`);
43
- }
44
- function renderStringLiteral(value) {
45
- return JSON.stringify(value);
46
- }
47
- function renderQueueTableMigration(tableName) {
48
- const indexPrefix = tableName.replaceAll(".", "_");
49
- return [
50
- "import { defineMigration } from '@holo-js/db'",
51
- "",
52
- "export default defineMigration({",
53
- " async up({ schema }) {",
54
- ` await schema.createTable(${renderStringLiteral(tableName)}, (table) => {`,
55
- " table.string('id').primaryKey()",
56
- " table.string('job')",
57
- " table.string('connection')",
58
- " table.string('queue')",
59
- " table.text('payload')",
60
- " table.integer('attempts').default(0)",
61
- " table.integer('max_attempts').default(1)",
62
- " table.bigInteger('available_at')",
63
- " table.bigInteger('reserved_at').nullable()",
64
- " table.string('reservation_id').nullable()",
65
- " table.bigInteger('created_at')",
66
- ` table.index(['queue', 'available_at'], ${renderStringLiteral(`${indexPrefix}_queue_available_at_index`)})`,
67
- ` table.index(['queue', 'reserved_at'], ${renderStringLiteral(`${indexPrefix}_queue_reserved_at_index`)})`,
68
- ` table.index(['reservation_id'], ${renderStringLiteral(`${indexPrefix}_reservation_id_index`)})`,
69
- " })",
70
- " },",
71
- " async down({ schema }) {",
72
- ` await schema.dropTable(${renderStringLiteral(tableName)})`,
73
- " },",
74
- "})",
75
- ""
76
- ].join("\n");
77
- }
78
- function renderFailedJobsTableMigration(tableName) {
79
- const indexPrefix = tableName.replaceAll(".", "_");
80
- return [
81
- "import { defineMigration } from '@holo-js/db'",
82
- "",
83
- "export default defineMigration({",
84
- " async up({ schema }) {",
85
- ` await schema.createTable(${renderStringLiteral(tableName)}, (table) => {`,
86
- " table.string('id').primaryKey()",
87
- " table.string('job_id')",
88
- " table.string('job')",
89
- " table.string('connection')",
90
- " table.string('queue')",
91
- " table.text('payload')",
92
- " table.text('exception')",
93
- " table.bigInteger('failed_at')",
94
- ` table.index(['job_id'], ${renderStringLiteral(`${indexPrefix}_job_id_index`)})`,
95
- ` table.index(['failed_at'], ${renderStringLiteral(`${indexPrefix}_failed_at_index`)})`,
96
- " })",
97
- " },",
98
- " async down({ schema }) {",
99
- ` await schema.dropTable(${renderStringLiteral(tableName)})`,
100
- " },",
101
- "})",
102
- ""
103
- ].join("\n");
104
- }
105
- function resolveDatabaseQueueTables(queueConfig) {
106
- const configured = Object.values(queueConfig.connections).filter((connection) => connection.driver === "database").map((connection) => connection.table);
107
- return Object.freeze(configured.length > 0 ? [...new Set(configured)] : [DEFAULT_DATABASE_QUEUE_TABLE]);
108
- }
109
- async function runQueueTableCommand(io, projectRoot) {
110
- const project = await ensureProjectConfig(projectRoot);
111
- const registry = await loadGeneratedProjectRegistry(projectRoot) ?? await prepareProjectDiscovery(projectRoot, project.config);
112
- const queueConfig = await loadQueueConfig(projectRoot);
113
- const migrationsDir = resolve(projectRoot, project.config.paths.migrations);
114
- const createdFiles = [];
115
- const tableNames = resolveDatabaseQueueTables(queueConfig);
116
- for (const tableName of tableNames) {
117
- const migrationName = normalizeQueueMigrationName(tableName);
118
- if (hasRegisteredMigrationSlug(registry, migrationName) || hasRegisteredCreateTableMigration(registry, tableName)) {
119
- throw new Error(`A migration for table "${tableName}" already exists.`);
120
- }
121
- }
122
- for (const tableName of tableNames) {
123
- const migrationTemplate = await nextMigrationTemplate(normalizeQueueMigrationName(tableName), migrationsDir);
124
- const migrationFilePath = resolveDefaultArtifactPath(projectRoot, project.config.paths.migrations, migrationTemplate.fileName);
125
- await writeTextFile(migrationFilePath, renderQueueTableMigration(tableName));
126
- createdFiles.push(migrationFilePath);
127
- }
128
- await runProjectPrepare(projectRoot);
129
- for (const filePath of createdFiles) {
130
- writeLine(io.stdout, `Created migration: ${makeProjectRelativePath(projectRoot, filePath)}`);
131
- }
132
- }
133
- async function runQueueFailedTableCommand(io, projectRoot) {
134
- const project = await ensureProjectConfig(projectRoot);
135
- const registry = await loadGeneratedProjectRegistry(projectRoot) ?? await prepareProjectDiscovery(projectRoot, project.config);
136
- const queueConfig = await loadQueueConfig(projectRoot);
137
- const tableName = queueConfig.failed === false ? DEFAULT_FAILED_JOBS_TABLE : queueConfig.failed.table;
138
- const migrationName = normalizeQueueMigrationName(tableName);
139
- if (hasRegisteredMigrationSlug(registry, migrationName) || hasRegisteredCreateTableMigration(registry, tableName)) {
140
- throw new Error(`A migration for table "${tableName}" already exists.`);
141
- }
142
- const migrationTemplate = await nextMigrationTemplate(
143
- migrationName,
144
- resolve(projectRoot, project.config.paths.migrations)
145
- );
146
- const migrationFilePath = resolveDefaultArtifactPath(projectRoot, project.config.paths.migrations, migrationTemplate.fileName);
147
- await writeTextFile(migrationFilePath, renderFailedJobsTableMigration(tableName));
148
- await runProjectPrepare(projectRoot);
149
- writeLine(io.stdout, `Created migration: ${makeProjectRelativePath(projectRoot, migrationFilePath)}`);
150
- }
151
- var queueMigrationInternals = {
152
- getRegistryMigrationSlug,
153
- hasRegisteredMigrationSlug,
154
- hasRegisteredCreateTableMigration,
155
- nextMigrationTemplate
156
- };
157
- export {
158
- DEFAULT_DATABASE_QUEUE_TABLE,
159
- DEFAULT_FAILED_JOBS_TABLE,
160
- loadQueueConfig,
161
- normalizeQueueMigrationName,
162
- queueMigrationInternals,
163
- renderFailedJobsTableMigration,
164
- renderQueueTableMigration,
165
- resolveDatabaseQueueTables,
166
- runQueueFailedTableCommand,
167
- runQueueTableCommand
168
- };
@@ -1,57 +0,0 @@
1
- import {
2
- RUNTIME_MIGRATION_NAME_PATTERN,
3
- cacheProjectConfig,
4
- cleanupRuntimeDependencyLink,
5
- compileFreshDropIdentifierPath,
6
- createEnvRuntimeConfig,
7
- createRuntimeInvocation,
8
- dropAllTablesForFresh,
9
- ensureRuntimeDependencyLink,
10
- filterDefinedRuntimeConnectionInput,
11
- getRuntimeEnvironment,
12
- getRuntimeFailureMessage,
13
- inferRuntimeMigrationName,
14
- initializeProjectRuntime,
15
- isDefined,
16
- mergeRuntimeDatabaseConfig,
17
- normalizeRuntimeConnectionInput,
18
- normalizeRuntimeMigration,
19
- parseBooleanEnv,
20
- resolveConfigModuleUrl,
21
- resolvePackageRootFromSpecifier,
22
- resolveRuntimeWorkerPath,
23
- runRuntimeInvocation,
24
- withRuntimeEnvironment
25
- } from "./chunk-KS5TWO75.mjs";
26
- import "./chunk-LBJAJLKU.mjs";
27
- import "./chunk-D7O4SU6N.mjs";
28
- import "./chunk-VP2E62DF.mjs";
29
- import "./chunk-C624G3R2.mjs";
30
- import "./chunk-YEFJBN56.mjs";
31
- import "./chunk-J76GH2DR.mjs";
32
- import "./chunk-ILU426CF.mjs";
33
- export {
34
- RUNTIME_MIGRATION_NAME_PATTERN,
35
- cacheProjectConfig,
36
- cleanupRuntimeDependencyLink,
37
- compileFreshDropIdentifierPath,
38
- createEnvRuntimeConfig,
39
- createRuntimeInvocation,
40
- dropAllTablesForFresh,
41
- ensureRuntimeDependencyLink,
42
- filterDefinedRuntimeConnectionInput,
43
- getRuntimeEnvironment,
44
- getRuntimeFailureMessage,
45
- inferRuntimeMigrationName,
46
- initializeProjectRuntime,
47
- isDefined,
48
- mergeRuntimeDatabaseConfig,
49
- normalizeRuntimeConnectionInput,
50
- normalizeRuntimeMigration,
51
- parseBooleanEnv,
52
- resolveConfigModuleUrl,
53
- resolvePackageRootFromSpecifier,
54
- resolveRuntimeWorkerPath,
55
- runRuntimeInvocation,
56
- withRuntimeEnvironment
57
- };
@@ -1,139 +0,0 @@
1
- import {
2
- authFeaturesRequireConfigUpdate,
3
- detectAuthInstallFeaturesFromConfig,
4
- hasLoadedConfigFile,
5
- inferConnectionDriver,
6
- inferDatabaseDriverFromUrl,
7
- injectBroadcastAuthEndpoint,
8
- installAuthIntoProject,
9
- installAuthorizationIntoProject,
10
- installBroadcastIntoProject,
11
- installCacheIntoProject,
12
- installEventsIntoProject,
13
- installMailIntoProject,
14
- installMediaIntoProject,
15
- installNotificationsIntoProject,
16
- installQueueIntoProject,
17
- installRealtimeIntoProject,
18
- installSecurityIntoProject,
19
- normalizeScaffoldEnvSegments,
20
- publishAuthNotificationsIntoProject,
21
- renderAuthConfig,
22
- renderAuthEnvFiles,
23
- renderAuthMigration,
24
- renderAuthUserModel,
25
- renderCacheConfig,
26
- renderCacheEnvFiles,
27
- renderCorsConfig,
28
- renderEnvFileContents,
29
- renderMailConfig,
30
- renderMailEnvFiles,
31
- renderMediaConfig,
32
- renderNotificationsConfig,
33
- renderNotificationsMigration,
34
- renderQueueConfig,
35
- renderQueueEnvFiles,
36
- renderRedisConfig,
37
- renderScaffoldAppConfig,
38
- renderScaffoldDatabaseConfig,
39
- renderScaffoldEnvFiles,
40
- renderScaffoldGitignore,
41
- renderScaffoldPackageJson,
42
- renderScaffoldTsconfig,
43
- renderSecurityConfig,
44
- renderSessionConfig,
45
- renderStorageConfig,
46
- renderVSCodeSettings,
47
- resolveBroadcastConfigTargetPath,
48
- resolveDefaultDatabaseUrl,
49
- resolvePackageManagerVersion,
50
- scaffoldProject,
51
- syncManagedDriverDependencies,
52
- upsertAuthPackageDependencies,
53
- upsertCachePackageDependencies,
54
- upsertEventsPackageDependency,
55
- upsertMailPackageDependency,
56
- upsertMediaPackageDependency,
57
- upsertNotificationsPackageDependency,
58
- upsertSecurityPackageDependency
59
- } from "./chunk-C624G3R2.mjs";
60
- import "./chunk-YEFJBN56.mjs";
61
- import {
62
- renderAuthProviderRouteFiles,
63
- renderFrameworkFiles,
64
- renderFrameworkRunner,
65
- renderNextBroadcastConfigRoute
66
- } from "./chunk-J76GH2DR.mjs";
67
- import {
68
- isSupportedCacheInstallerDriver,
69
- isSupportedQueueInstallerDriver,
70
- normalizeScaffoldOptionalPackages,
71
- sanitizePackageName
72
- } from "./chunk-ILU426CF.mjs";
73
- export {
74
- authFeaturesRequireConfigUpdate,
75
- detectAuthInstallFeaturesFromConfig,
76
- hasLoadedConfigFile,
77
- inferConnectionDriver,
78
- inferDatabaseDriverFromUrl,
79
- injectBroadcastAuthEndpoint,
80
- installAuthIntoProject,
81
- installAuthorizationIntoProject,
82
- installBroadcastIntoProject,
83
- installCacheIntoProject,
84
- installEventsIntoProject,
85
- installMailIntoProject,
86
- installMediaIntoProject,
87
- installNotificationsIntoProject,
88
- installQueueIntoProject,
89
- installRealtimeIntoProject,
90
- installSecurityIntoProject,
91
- isSupportedCacheInstallerDriver,
92
- isSupportedQueueInstallerDriver,
93
- normalizeScaffoldEnvSegments,
94
- normalizeScaffoldOptionalPackages,
95
- publishAuthNotificationsIntoProject,
96
- renderAuthConfig,
97
- renderAuthEnvFiles,
98
- renderAuthMigration,
99
- renderAuthProviderRouteFiles,
100
- renderAuthUserModel,
101
- renderCacheConfig,
102
- renderCacheEnvFiles,
103
- renderCorsConfig,
104
- renderEnvFileContents,
105
- renderFrameworkFiles,
106
- renderFrameworkRunner,
107
- renderMailConfig,
108
- renderMailEnvFiles,
109
- renderMediaConfig,
110
- renderNextBroadcastConfigRoute,
111
- renderNotificationsConfig,
112
- renderNotificationsMigration,
113
- renderQueueConfig,
114
- renderQueueEnvFiles,
115
- renderRedisConfig,
116
- renderScaffoldAppConfig,
117
- renderScaffoldDatabaseConfig,
118
- renderScaffoldEnvFiles,
119
- renderScaffoldGitignore,
120
- renderScaffoldPackageJson,
121
- renderScaffoldTsconfig,
122
- renderSecurityConfig,
123
- renderSessionConfig,
124
- renderStorageConfig,
125
- renderVSCodeSettings,
126
- resolveBroadcastConfigTargetPath,
127
- resolveDefaultDatabaseUrl,
128
- resolvePackageManagerVersion,
129
- sanitizePackageName,
130
- scaffoldProject,
131
- syncManagedDriverDependencies,
132
- upsertAuthPackageDependencies,
133
- upsertCachePackageDependencies,
134
- upsertEventsPackageDependency,
135
- upsertMailPackageDependency,
136
- upsertMediaPackageDependency,
137
- upsertNotificationsPackageDependency,
138
- upsertSecurityPackageDependency
139
- };
@@ -1,71 +0,0 @@
1
- import {
2
- writeLine
3
- } from "./chunk-I7QBCEV7.mjs";
4
- import "./chunk-D7O4SU6N.mjs";
5
- import "./chunk-VP2E62DF.mjs";
6
- import "./chunk-C624G3R2.mjs";
7
- import "./chunk-YEFJBN56.mjs";
8
- import "./chunk-J76GH2DR.mjs";
9
- import {
10
- resolveProjectPackageImportSpecifier
11
- } from "./chunk-ILU426CF.mjs";
12
-
13
- // src/security.ts
14
- import { loadConfigDirectory } from "@holo-js/config";
15
- async function loadSecurityCliModule(projectRoot) {
16
- const specifier = resolveProjectPackageImportSpecifier(projectRoot, "@holo-js/security");
17
- try {
18
- return await import(specifier);
19
- } catch (error) {
20
- const details = error instanceof Error ? error.message : String(error);
21
- throw new Error(
22
- `Unable to load @holo-js/security from ${projectRoot}. Install it with "holo install security". ${details}`
23
- );
24
- }
25
- }
26
- async function runRateLimitClearCommand(io, projectRoot, options, dependencies = {}) {
27
- const loadSecurityModule = dependencies.loadSecurityModule ?? loadSecurityCliModule;
28
- const loadConfig = dependencies.loadConfig ?? (async (root) => {
29
- const loaded = await loadConfigDirectory(root, {
30
- preferCache: false,
31
- processEnv: process.env
32
- });
33
- return { security: loaded.security };
34
- });
35
- const loadRedisAdapter = dependencies.loadRedisAdapter ?? (async (root) => {
36
- return await import(resolveProjectPackageImportSpecifier(root, "@holo-js/security/drivers/redis-adapter"));
37
- });
38
- const { security: securityConfig } = await loadConfig(projectRoot);
39
- const securityModule = await loadSecurityModule(projectRoot);
40
- const driver = securityConfig.rateLimit.driver;
41
- if (driver === "memory") {
42
- throw new Error("[security] The memory rate-limit driver is process-local and cannot be cleared meaningfully from the CLI.");
43
- }
44
- let redisAdapter;
45
- if (driver === "redis") {
46
- const { createSecurityRedisAdapter } = await loadRedisAdapter(projectRoot);
47
- redisAdapter = createSecurityRedisAdapter(securityConfig.rateLimit.redis);
48
- }
49
- try {
50
- await redisAdapter?.connect();
51
- const rateLimitStoreOptions = redisAdapter ? { projectRoot, redisAdapter } : { projectRoot };
52
- const rateLimitStore = securityModule.createRateLimitStoreFromConfig(securityConfig, rateLimitStoreOptions);
53
- securityModule.configureSecurityRuntime({
54
- config: securityConfig,
55
- rateLimitStore
56
- });
57
- const cleared = await securityModule.clearRateLimit(options);
58
- const count = typeof cleared === "boolean" ? cleared ? 1 : 0 : cleared;
59
- writeLine(io.stdout, `[security] Cleared ${count} rate-limit bucket(s).`);
60
- } finally {
61
- try {
62
- await redisAdapter?.close();
63
- } finally {
64
- securityModule.resetSecurityRuntime();
65
- }
66
- }
67
- }
68
- export {
69
- loadSecurityCliModule,
70
- runRateLimitClearCommand
71
- };