@caryhu/codemine-forge 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +108 -0
  2. package/dist/build-pipeline/browser-bundle.d.ts +31 -0
  3. package/dist/build-pipeline/browser-bundle.js +584 -0
  4. package/dist/build-pipeline/diagnostics.d.ts +7 -0
  5. package/dist/build-pipeline/diagnostics.js +68 -0
  6. package/dist/build-pipeline/index.d.ts +3 -0
  7. package/dist/build-pipeline/index.js +16 -0
  8. package/dist/build-pipeline/pipeline.d.ts +12 -0
  9. package/dist/build-pipeline/pipeline.js +273 -0
  10. package/dist/build-pipeline/types.d.ts +77 -0
  11. package/dist/build-pipeline/types.js +4 -0
  12. package/dist/dev-server-preview/diagnostics.d.ts +5 -0
  13. package/dist/dev-server-preview/diagnostics.js +40 -0
  14. package/dist/dev-server-preview/index.d.ts +4 -0
  15. package/dist/dev-server-preview/index.js +16 -0
  16. package/dist/dev-server-preview/preview-document.d.ts +2 -0
  17. package/dist/dev-server-preview/preview-document.js +153 -0
  18. package/dist/dev-server-preview/server.d.ts +26 -0
  19. package/dist/dev-server-preview/server.js +279 -0
  20. package/dist/dev-server-preview/types.d.ts +105 -0
  21. package/dist/dev-server-preview/types.js +4 -0
  22. package/dist/esbuild-wasm-worker/diagnostics.d.ts +12 -0
  23. package/dist/esbuild-wasm-worker/diagnostics.js +53 -0
  24. package/dist/esbuild-wasm-worker/index.d.ts +4 -0
  25. package/dist/esbuild-wasm-worker/index.js +18 -0
  26. package/dist/esbuild-wasm-worker/service.d.ts +26 -0
  27. package/dist/esbuild-wasm-worker/service.js +260 -0
  28. package/dist/esbuild-wasm-worker/types.d.ts +139 -0
  29. package/dist/esbuild-wasm-worker/types.js +5 -0
  30. package/dist/esbuild-wasm-worker/worker-adapter.d.ts +38 -0
  31. package/dist/esbuild-wasm-worker/worker-adapter.js +165 -0
  32. package/dist/esbuild-wasm-worker/worker.d.ts +1 -0
  33. package/dist/esbuild-wasm-worker/worker.js +4 -0
  34. package/dist/forge-controller.d.ts +38 -0
  35. package/dist/forge-controller.js +79 -0
  36. package/dist/index.d.ts +7 -0
  37. package/dist/index.js +88 -0
  38. package/dist/package-resolution/cdn-source.d.ts +11 -0
  39. package/dist/package-resolution/cdn-source.js +164 -0
  40. package/dist/package-resolution/diagnostics.d.ts +15 -0
  41. package/dist/package-resolution/diagnostics.js +51 -0
  42. package/dist/package-resolution/errors.d.ts +5 -0
  43. package/dist/package-resolution/errors.js +11 -0
  44. package/dist/package-resolution/index.d.ts +6 -0
  45. package/dist/package-resolution/index.js +23 -0
  46. package/dist/package-resolution/manifest.d.ts +5 -0
  47. package/dist/package-resolution/manifest.js +128 -0
  48. package/dist/package-resolution/resolver.d.ts +17 -0
  49. package/dist/package-resolution/resolver.js +172 -0
  50. package/dist/package-resolution/types.d.ts +98 -0
  51. package/dist/package-resolution/types.js +4 -0
  52. package/dist/terminal-commands/diagnostics.d.ts +3 -0
  53. package/dist/terminal-commands/diagnostics.js +21 -0
  54. package/dist/terminal-commands/index.d.ts +7 -0
  55. package/dist/terminal-commands/index.js +22 -0
  56. package/dist/terminal-commands/npm-build.d.ts +7 -0
  57. package/dist/terminal-commands/npm-build.js +63 -0
  58. package/dist/terminal-commands/npm-dev.d.ts +7 -0
  59. package/dist/terminal-commands/npm-dev.js +68 -0
  60. package/dist/terminal-commands/npm-install.d.ts +8 -0
  61. package/dist/terminal-commands/npm-install.js +56 -0
  62. package/dist/terminal-commands/parser.d.ts +2 -0
  63. package/dist/terminal-commands/parser.js +52 -0
  64. package/dist/terminal-commands/terminal.d.ts +12 -0
  65. package/dist/terminal-commands/terminal.js +73 -0
  66. package/dist/terminal-commands/types.d.ts +65 -0
  67. package/dist/terminal-commands/types.js +4 -0
  68. package/dist/virtual-file-system/diagnostics.d.ts +14 -0
  69. package/dist/virtual-file-system/diagnostics.js +55 -0
  70. package/dist/virtual-file-system/errors.d.ts +5 -0
  71. package/dist/virtual-file-system/errors.js +11 -0
  72. package/dist/virtual-file-system/index.d.ts +26 -0
  73. package/dist/virtual-file-system/index.js +47 -0
  74. package/dist/virtual-file-system/limits.d.ts +4 -0
  75. package/dist/virtual-file-system/limits.js +33 -0
  76. package/dist/virtual-file-system/memory.d.ts +33 -0
  77. package/dist/virtual-file-system/memory.js +551 -0
  78. package/dist/virtual-file-system/path.d.ts +9 -0
  79. package/dist/virtual-file-system/path.js +47 -0
  80. package/dist/virtual-file-system/storage.d.ts +32 -0
  81. package/dist/virtual-file-system/storage.js +194 -0
  82. package/dist/virtual-file-system/types.d.ts +165 -0
  83. package/dist/virtual-file-system/types.js +2 -0
  84. package/package.json +43 -0
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createForgeTerminal = exports.DefaultForgeTerminal = void 0;
4
+ const diagnostics_1 = require("./diagnostics");
5
+ const npm_build_1 = require("./npm-build");
6
+ const npm_dev_1 = require("./npm-dev");
7
+ const npm_install_1 = require("./npm-install");
8
+ const parser_1 = require("./parser");
9
+ const types_1 = require("./types");
10
+ class DefaultForgeTerminal {
11
+ constructor(options) {
12
+ this.options = options;
13
+ this.capability = types_1.TERMINAL_COMMANDS_CAPABILITY;
14
+ this.handlers = options.handlers ?? createDefaultHandlers(options);
15
+ this.cwd = options.cwd ?? "/";
16
+ }
17
+ async execute(commandText, executeOptions = {}) {
18
+ const parsed = (0, parser_1.parseForgeCommandText)(commandText);
19
+ const cwd = executeOptions.cwd ?? this.cwd;
20
+ if (!parsed.ok) {
21
+ const command = createCommand(commandText, [], cwd);
22
+ return {
23
+ command,
24
+ exitCode: 2,
25
+ output: [stderr(parsed.diagnostic.message)],
26
+ diagnostics: [parsed.diagnostic],
27
+ };
28
+ }
29
+ const command = createCommand(commandText, parsed.argv, cwd);
30
+ const handler = this.handlers.find((candidate) => candidate.canRun(command));
31
+ if (handler === undefined) {
32
+ const diagnostic = (0, diagnostics_1.createUnsupportedCommandDiagnostic)(commandText);
33
+ return {
34
+ command,
35
+ exitCode: 127,
36
+ output: [stderr(diagnostic.message)],
37
+ diagnostics: [diagnostic],
38
+ };
39
+ }
40
+ return handler.run({
41
+ command,
42
+ buildPipeline: this.options.buildPipeline,
43
+ devServerPreview: this.options.devServerPreview,
44
+ packageResolver: this.options.packageResolver,
45
+ });
46
+ }
47
+ }
48
+ exports.DefaultForgeTerminal = DefaultForgeTerminal;
49
+ function createForgeTerminal(options) {
50
+ return new DefaultForgeTerminal(options);
51
+ }
52
+ exports.createForgeTerminal = createForgeTerminal;
53
+ function createCommand(raw, argv, cwd) {
54
+ return {
55
+ raw,
56
+ name: argv[0] ?? "",
57
+ argv,
58
+ cwd,
59
+ };
60
+ }
61
+ function stderr(text) {
62
+ return { kind: "stderr", text };
63
+ }
64
+ function createDefaultHandlers(options) {
65
+ const handlers = [(0, npm_install_1.createNpmInstallCommandHandler)()];
66
+ if (options.buildPipeline !== undefined) {
67
+ handlers.push((0, npm_build_1.createNpmRunBuildCommandHandler)());
68
+ }
69
+ if (options.devServerPreview !== undefined) {
70
+ handlers.push((0, npm_dev_1.createNpmRunDevCommandHandler)());
71
+ }
72
+ return handlers;
73
+ }
@@ -0,0 +1,65 @@
1
+ import type { ForgeBuildPipeline, ForgeBuildResult } from "../build-pipeline";
2
+ import type { ForgeDevServerPreview, ForgeDevSession, ForgeDevSessionDiagnostic } from "../dev-server-preview";
3
+ import type { ForgePackageDiagnostic, ForgePackageResolutionResult, ForgePackageResolver } from "../package-resolution";
4
+ export declare const TERMINAL_COMMANDS_CAPABILITY: "terminal-commands";
5
+ export type ForgeTerminalDiagnosticCode = "parse_error" | "unsupported_command";
6
+ export interface ForgeTerminalDiagnostic {
7
+ readonly code: ForgeTerminalDiagnosticCode;
8
+ readonly severity: "error";
9
+ readonly message: string;
10
+ readonly commandText?: string;
11
+ }
12
+ export type ForgeCommandDiagnostic = ForgeBuildResult["diagnostics"][number] | ForgeDevSessionDiagnostic | ForgeTerminalDiagnostic | ForgePackageDiagnostic;
13
+ export interface ForgeCommand {
14
+ readonly raw: string;
15
+ readonly name: string;
16
+ readonly argv: readonly string[];
17
+ readonly cwd: string;
18
+ }
19
+ export type ForgeTerminalOutputKind = "stdout" | "stderr";
20
+ export interface ForgeTerminalOutputLine {
21
+ readonly kind: ForgeTerminalOutputKind;
22
+ readonly text: string;
23
+ }
24
+ export interface ForgeCommandResult {
25
+ readonly command: ForgeCommand;
26
+ readonly exitCode: number;
27
+ readonly output: readonly ForgeTerminalOutputLine[];
28
+ readonly diagnostics: readonly ForgeCommandDiagnostic[];
29
+ readonly buildResult?: ForgeBuildResult;
30
+ readonly devSession?: ForgeDevSession;
31
+ readonly packageResolution?: ForgePackageResolutionResult;
32
+ }
33
+ export interface ForgeCommandContext {
34
+ readonly command: ForgeCommand;
35
+ readonly buildPipeline?: ForgeBuildPipeline;
36
+ readonly devServerPreview?: ForgeDevServerPreview;
37
+ readonly packageResolver: ForgePackageResolver;
38
+ }
39
+ export interface ForgeCommandHandler {
40
+ readonly name: string;
41
+ readonly aliases?: readonly string[];
42
+ canRun(command: ForgeCommand): boolean;
43
+ run(context: ForgeCommandContext): Promise<ForgeCommandResult>;
44
+ }
45
+ export interface ForgeTerminalExecuteOptions {
46
+ readonly cwd?: string;
47
+ }
48
+ export interface ForgeTerminalOptions {
49
+ readonly buildPipeline?: ForgeBuildPipeline;
50
+ readonly devServerPreview?: ForgeDevServerPreview;
51
+ readonly packageResolver: ForgePackageResolver;
52
+ readonly handlers?: readonly ForgeCommandHandler[];
53
+ readonly cwd?: string;
54
+ }
55
+ export interface ForgeTerminal {
56
+ readonly capability: typeof TERMINAL_COMMANDS_CAPABILITY;
57
+ execute(commandText: string, options?: ForgeTerminalExecuteOptions): Promise<ForgeCommandResult>;
58
+ }
59
+ export type ForgeCommandParseResult = {
60
+ readonly ok: true;
61
+ readonly argv: readonly string[];
62
+ } | {
63
+ readonly ok: false;
64
+ readonly diagnostic: ForgeTerminalDiagnostic;
65
+ };
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TERMINAL_COMMANDS_CAPABILITY = void 0;
4
+ exports.TERMINAL_COMMANDS_CAPABILITY = "terminal-commands";
@@ -0,0 +1,14 @@
1
+ import type { ForgeDiagnostic, ForgeDiagnosticCode } from "./types";
2
+ export interface ForgeDiagnosticInput {
3
+ readonly code: ForgeDiagnosticCode;
4
+ readonly message: string;
5
+ readonly path?: string;
6
+ readonly relatedPath?: string;
7
+ readonly cause?: unknown;
8
+ }
9
+ export declare function createForgeDiagnostic(input: ForgeDiagnosticInput): ForgeDiagnostic;
10
+ export declare function createInvalidPathDiagnostic(path: string, message?: string): ForgeDiagnostic;
11
+ export declare function createPathTraversalDiagnostic(path: string): ForgeDiagnostic;
12
+ export declare function createNotFoundDiagnostic(path: string): ForgeDiagnostic;
13
+ export declare function createMissingParentDiagnostic(path: string): ForgeDiagnostic;
14
+ export declare function createNotImplementedDiagnostic(operation: string, path?: string, relatedPath?: string): ForgeDiagnostic;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNotImplementedDiagnostic = exports.createMissingParentDiagnostic = exports.createNotFoundDiagnostic = exports.createPathTraversalDiagnostic = exports.createInvalidPathDiagnostic = exports.createForgeDiagnostic = void 0;
4
+ function createForgeDiagnostic(input) {
5
+ return {
6
+ code: input.code,
7
+ severity: "error",
8
+ message: input.message,
9
+ path: input.path,
10
+ relatedPath: input.relatedPath,
11
+ cause: input.cause,
12
+ };
13
+ }
14
+ exports.createForgeDiagnostic = createForgeDiagnostic;
15
+ function createInvalidPathDiagnostic(path, message = "Path is invalid.") {
16
+ return createForgeDiagnostic({
17
+ code: "invalid_path",
18
+ message,
19
+ path,
20
+ });
21
+ }
22
+ exports.createInvalidPathDiagnostic = createInvalidPathDiagnostic;
23
+ function createPathTraversalDiagnostic(path) {
24
+ return createForgeDiagnostic({
25
+ code: "path_traversal",
26
+ message: "Path traversal outside the workspace root is not allowed.",
27
+ path,
28
+ });
29
+ }
30
+ exports.createPathTraversalDiagnostic = createPathTraversalDiagnostic;
31
+ function createNotFoundDiagnostic(path) {
32
+ return createForgeDiagnostic({
33
+ code: "not_found",
34
+ message: "Path does not exist in the workspace.",
35
+ path,
36
+ });
37
+ }
38
+ exports.createNotFoundDiagnostic = createNotFoundDiagnostic;
39
+ function createMissingParentDiagnostic(path) {
40
+ return createForgeDiagnostic({
41
+ code: "missing_parent",
42
+ message: "Parent directory does not exist in the workspace.",
43
+ path,
44
+ });
45
+ }
46
+ exports.createMissingParentDiagnostic = createMissingParentDiagnostic;
47
+ function createNotImplementedDiagnostic(operation, path, relatedPath) {
48
+ return createForgeDiagnostic({
49
+ code: "not_implemented",
50
+ message: `Virtual file system operation is not implemented: ${operation}.`,
51
+ path,
52
+ relatedPath,
53
+ });
54
+ }
55
+ exports.createNotImplementedDiagnostic = createNotImplementedDiagnostic;
@@ -0,0 +1,5 @@
1
+ import type { ForgeDiagnostic } from "./types";
2
+ export declare class ForgeFileSystemError extends Error {
3
+ readonly diagnostic: ForgeDiagnostic;
4
+ constructor(diagnostic: ForgeDiagnostic);
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForgeFileSystemError = void 0;
4
+ class ForgeFileSystemError extends Error {
5
+ constructor(diagnostic) {
6
+ super(diagnostic.message);
7
+ this.diagnostic = diagnostic;
8
+ this.name = "ForgeFileSystemError";
9
+ }
10
+ }
11
+ exports.ForgeFileSystemError = ForgeFileSystemError;
@@ -0,0 +1,26 @@
1
+ import type { ForgeDeleteOptions, ForgeDirEntry, ForgeFileStat, ForgeFileWatchListener, ForgeMkdirOptions, ForgeOpenVirtualFileSystemOptions, ForgeRestoreOptions, ForgeSnapshot, ForgeSnapshotOptions, ForgeUnsubscribe, ForgeVirtualFileSystemOptions, ForgeWriteFileOptions } from "./types";
2
+ export { DEFAULT_FORGE_VFS_LIMITS, createLimitExceededDiagnostic, resolveForgeVirtualFileSystemLimits, } from "./limits";
3
+ export { createForgeDiagnostic, createInvalidPathDiagnostic, createMissingParentDiagnostic, createNotFoundDiagnostic, createNotImplementedDiagnostic, createPathTraversalDiagnostic, type ForgeDiagnosticInput, } from "./diagnostics";
4
+ export { normalizeForgePath, type ForgePathNormalizationResult, } from "./path";
5
+ export { ForgeFileSystemError } from "./errors";
6
+ export { InMemoryVirtualFileSystem } from "./memory";
7
+ export { createIndexedDbForgeStorage, FORGE_INDEXED_DB_NAME, FORGE_INDEXED_DB_STORES, FORGE_INDEXED_DB_VERSION, IndexedDbForgeStorage, type IndexedDbForgeStorageOptions, } from "./storage";
8
+ export type { ForgeBuildCacheRecord, ForgeDeleteOptions, ForgeDiagnostic, ForgeDiagnosticCode, ForgeDiagnosticSeverity, ForgeDirEntry, ForgeFileCreatedEvent, ForgeFileDeletedEvent, ForgeFileEvent, ForgeFileKind, ForgeFileRecord, ForgeFileRenamedEvent, ForgeFileSource, ForgeFileStat, ForgeFileUpdatedEvent, ForgeFileWatchListener, ForgeLimitDiagnostic, ForgeMkdirOptions, ForgeOpenVirtualFileSystemOptions, ForgePackageCacheRecord, ForgePersistedWorkspace, ForgeVirtualFileSystemLimits, ResolvedForgeVirtualFileSystemLimits, ForgeRestoreOptions, ForgeSnapshot, ForgeSnapshotOptions, ForgeUnsubscribe, ForgeVirtualFileSystemOptions, ForgeVirtualFileSystemStorage, ForgeWorkspace, ForgeWorkspaceMetadata, ForgeWriteFileOptions, } from "./types";
9
+ export declare const VIRTUAL_FILE_SYSTEM_CAPABILITY: "virtual-file-system";
10
+ export interface ForgeVirtualFileSystem {
11
+ readonly capability: typeof VIRTUAL_FILE_SYSTEM_CAPABILITY;
12
+ readFile(path: string): Promise<Uint8Array>;
13
+ readText(path: string): Promise<string>;
14
+ writeFile(path: string, content: Uint8Array | string, options?: ForgeWriteFileOptions): Promise<void>;
15
+ delete(path: string, options?: ForgeDeleteOptions): Promise<void>;
16
+ rename(from: string, to: string): Promise<void>;
17
+ mkdir(path: string, options?: ForgeMkdirOptions): Promise<void>;
18
+ readdir(path: string): Promise<readonly ForgeDirEntry[]>;
19
+ stat(path: string): Promise<ForgeFileStat>;
20
+ exists(path: string): Promise<boolean>;
21
+ snapshot(options?: ForgeSnapshotOptions): Promise<ForgeSnapshot>;
22
+ restore(snapshot: ForgeSnapshot, options?: ForgeRestoreOptions): Promise<void>;
23
+ watch(listener: ForgeFileWatchListener): ForgeUnsubscribe;
24
+ }
25
+ export declare function createVirtualFileSystem(options?: ForgeVirtualFileSystemOptions): ForgeVirtualFileSystem;
26
+ export declare function openVirtualFileSystem(options: ForgeOpenVirtualFileSystemOptions): Promise<ForgeVirtualFileSystem>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openVirtualFileSystem = exports.createVirtualFileSystem = exports.VIRTUAL_FILE_SYSTEM_CAPABILITY = exports.IndexedDbForgeStorage = exports.FORGE_INDEXED_DB_VERSION = exports.FORGE_INDEXED_DB_STORES = exports.FORGE_INDEXED_DB_NAME = exports.createIndexedDbForgeStorage = exports.InMemoryVirtualFileSystem = exports.ForgeFileSystemError = exports.normalizeForgePath = exports.createPathTraversalDiagnostic = exports.createNotImplementedDiagnostic = exports.createNotFoundDiagnostic = exports.createMissingParentDiagnostic = exports.createInvalidPathDiagnostic = exports.createForgeDiagnostic = exports.resolveForgeVirtualFileSystemLimits = exports.createLimitExceededDiagnostic = exports.DEFAULT_FORGE_VFS_LIMITS = void 0;
4
+ const memory_1 = require("./memory");
5
+ const storage_1 = require("./storage");
6
+ var limits_1 = require("./limits");
7
+ Object.defineProperty(exports, "DEFAULT_FORGE_VFS_LIMITS", { enumerable: true, get: function () { return limits_1.DEFAULT_FORGE_VFS_LIMITS; } });
8
+ Object.defineProperty(exports, "createLimitExceededDiagnostic", { enumerable: true, get: function () { return limits_1.createLimitExceededDiagnostic; } });
9
+ Object.defineProperty(exports, "resolveForgeVirtualFileSystemLimits", { enumerable: true, get: function () { return limits_1.resolveForgeVirtualFileSystemLimits; } });
10
+ var diagnostics_1 = require("./diagnostics");
11
+ Object.defineProperty(exports, "createForgeDiagnostic", { enumerable: true, get: function () { return diagnostics_1.createForgeDiagnostic; } });
12
+ Object.defineProperty(exports, "createInvalidPathDiagnostic", { enumerable: true, get: function () { return diagnostics_1.createInvalidPathDiagnostic; } });
13
+ Object.defineProperty(exports, "createMissingParentDiagnostic", { enumerable: true, get: function () { return diagnostics_1.createMissingParentDiagnostic; } });
14
+ Object.defineProperty(exports, "createNotFoundDiagnostic", { enumerable: true, get: function () { return diagnostics_1.createNotFoundDiagnostic; } });
15
+ Object.defineProperty(exports, "createNotImplementedDiagnostic", { enumerable: true, get: function () { return diagnostics_1.createNotImplementedDiagnostic; } });
16
+ Object.defineProperty(exports, "createPathTraversalDiagnostic", { enumerable: true, get: function () { return diagnostics_1.createPathTraversalDiagnostic; } });
17
+ var path_1 = require("./path");
18
+ Object.defineProperty(exports, "normalizeForgePath", { enumerable: true, get: function () { return path_1.normalizeForgePath; } });
19
+ var errors_1 = require("./errors");
20
+ Object.defineProperty(exports, "ForgeFileSystemError", { enumerable: true, get: function () { return errors_1.ForgeFileSystemError; } });
21
+ var memory_2 = require("./memory");
22
+ Object.defineProperty(exports, "InMemoryVirtualFileSystem", { enumerable: true, get: function () { return memory_2.InMemoryVirtualFileSystem; } });
23
+ var storage_2 = require("./storage");
24
+ Object.defineProperty(exports, "createIndexedDbForgeStorage", { enumerable: true, get: function () { return storage_2.createIndexedDbForgeStorage; } });
25
+ Object.defineProperty(exports, "FORGE_INDEXED_DB_NAME", { enumerable: true, get: function () { return storage_2.FORGE_INDEXED_DB_NAME; } });
26
+ Object.defineProperty(exports, "FORGE_INDEXED_DB_STORES", { enumerable: true, get: function () { return storage_2.FORGE_INDEXED_DB_STORES; } });
27
+ Object.defineProperty(exports, "FORGE_INDEXED_DB_VERSION", { enumerable: true, get: function () { return storage_2.FORGE_INDEXED_DB_VERSION; } });
28
+ Object.defineProperty(exports, "IndexedDbForgeStorage", { enumerable: true, get: function () { return storage_2.IndexedDbForgeStorage; } });
29
+ exports.VIRTUAL_FILE_SYSTEM_CAPABILITY = "virtual-file-system";
30
+ function createVirtualFileSystem(options) {
31
+ return new memory_1.InMemoryVirtualFileSystem(options);
32
+ }
33
+ exports.createVirtualFileSystem = createVirtualFileSystem;
34
+ async function openVirtualFileSystem(options) {
35
+ const storage = options.storage ?? (0, storage_1.createIndexedDbForgeStorage)({ limits: options.limits });
36
+ const persistedWorkspace = await storage.loadWorkspace(options.workspaceId);
37
+ return new memory_1.InMemoryVirtualFileSystem({
38
+ workspaceId: options.workspaceId,
39
+ workspaceName: persistedWorkspace?.name ?? options.workspaceName ?? "Untitled Workspace",
40
+ files: persistedWorkspace?.files,
41
+ metadata: persistedWorkspace?.metadata,
42
+ lock: persistedWorkspace?.lock,
43
+ storage,
44
+ limits: options.limits,
45
+ });
46
+ }
47
+ exports.openVirtualFileSystem = openVirtualFileSystem;
@@ -0,0 +1,4 @@
1
+ import type { ForgeDiagnostic, ForgeLimitDiagnostic, ForgeVirtualFileSystemLimits, ResolvedForgeVirtualFileSystemLimits } from "./types";
2
+ export declare const DEFAULT_FORGE_VFS_LIMITS: ResolvedForgeVirtualFileSystemLimits;
3
+ export declare function resolveForgeVirtualFileSystemLimits(limits?: ForgeVirtualFileSystemLimits): ResolvedForgeVirtualFileSystemLimits;
4
+ export declare function createLimitExceededDiagnostic(name: ForgeLimitDiagnostic["name"], actual: number, maximum: number, path?: string): ForgeDiagnostic;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLimitExceededDiagnostic = exports.resolveForgeVirtualFileSystemLimits = exports.DEFAULT_FORGE_VFS_LIMITS = void 0;
4
+ const diagnostics_1 = require("./diagnostics");
5
+ exports.DEFAULT_FORGE_VFS_LIMITS = {
6
+ maxFileSizeBytes: 5 * 1024 * 1024,
7
+ maxWorkspaceSizeBytes: 50 * 1024 * 1024,
8
+ maxFileCount: 5000,
9
+ maxPackageCacheSizeBytes: 100 * 1024 * 1024,
10
+ maxBuildCacheSizeBytes: 100 * 1024 * 1024,
11
+ };
12
+ function resolveForgeVirtualFileSystemLimits(limits = {}) {
13
+ return {
14
+ ...exports.DEFAULT_FORGE_VFS_LIMITS,
15
+ ...limits,
16
+ };
17
+ }
18
+ exports.resolveForgeVirtualFileSystemLimits = resolveForgeVirtualFileSystemLimits;
19
+ function createLimitExceededDiagnostic(name, actual, maximum, path) {
20
+ return {
21
+ ...(0, diagnostics_1.createForgeDiagnostic)({
22
+ code: "limit_exceeded",
23
+ message: `Virtual file system limit exceeded: ${name}.`,
24
+ path,
25
+ }),
26
+ limit: {
27
+ name,
28
+ actual,
29
+ maximum,
30
+ },
31
+ };
32
+ }
33
+ exports.createLimitExceededDiagnostic = createLimitExceededDiagnostic;
@@ -0,0 +1,33 @@
1
+ import type { ForgeVirtualFileSystem } from "./index";
2
+ import type { ForgeDeleteOptions, ForgeDirEntry, ForgeFileStat, ForgeFileWatchListener, ForgeMkdirOptions, ForgeRestoreOptions, ForgeSnapshot, ForgeSnapshotOptions, ForgeUnsubscribe, ForgeVirtualFileSystemOptions, ForgeWriteFileOptions } from "./types";
3
+ export declare class InMemoryVirtualFileSystem implements ForgeVirtualFileSystem {
4
+ readonly capability: "virtual-file-system";
5
+ private readonly workspaceId;
6
+ private readonly workspaceName;
7
+ private readonly lock;
8
+ private readonly storage;
9
+ private readonly limits;
10
+ private readonly watchers;
11
+ private metadata;
12
+ private records;
13
+ constructor(options?: ForgeVirtualFileSystemOptions);
14
+ readFile(path: string): Promise<Uint8Array>;
15
+ readText(path: string): Promise<string>;
16
+ writeFile(path: string, content: Uint8Array | string, options?: ForgeWriteFileOptions): Promise<void>;
17
+ delete(path: string, options?: ForgeDeleteOptions): Promise<void>;
18
+ rename(from: string, to: string): Promise<void>;
19
+ mkdir(path: string, options?: ForgeMkdirOptions): Promise<void>;
20
+ readdir(path: string): Promise<readonly ForgeDirEntry[]>;
21
+ stat(path: string): Promise<ForgeFileStat>;
22
+ exists(path: string): Promise<boolean>;
23
+ snapshot(options?: ForgeSnapshotOptions): Promise<ForgeSnapshot>;
24
+ restore(snapshot: ForgeSnapshot, _options?: ForgeRestoreOptions): Promise<void>;
25
+ watch(listener: ForgeFileWatchListener): ForgeUnsubscribe;
26
+ private normalize;
27
+ private requireRecord;
28
+ private requireFile;
29
+ private commit;
30
+ private assertWorkspaceLimits;
31
+ private assertLimit;
32
+ private emit;
33
+ }