@creact-labs/creact 0.1.8 → 0.2.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.
- package/README.md +85 -22
- package/dist/cli.d.ts +11 -0
- package/dist/cli.js +88 -0
- package/dist/index.d.ts +19 -44
- package/dist/index.js +20 -68
- package/dist/jsx/index.d.ts +2 -0
- package/dist/jsx/index.js +1 -0
- package/dist/jsx/jsx-dev-runtime.d.ts +4 -0
- package/dist/jsx/jsx-dev-runtime.js +4 -0
- package/dist/jsx/jsx-runtime.d.ts +38 -0
- package/dist/jsx/jsx-runtime.js +38 -0
- package/dist/jsx/types.d.ts +12 -0
- package/dist/jsx/types.js +4 -0
- package/dist/primitives/context.d.ts +34 -0
- package/dist/primitives/context.js +63 -0
- package/dist/primitives/index.d.ts +3 -0
- package/dist/primitives/index.js +3 -0
- package/dist/primitives/instance.d.ts +72 -0
- package/dist/primitives/instance.js +235 -0
- package/dist/primitives/store.d.ts +22 -0
- package/dist/primitives/store.js +97 -0
- package/dist/provider/backend.d.ts +110 -0
- package/dist/provider/backend.js +37 -0
- package/dist/provider/interface.d.ts +48 -0
- package/dist/provider/interface.js +39 -0
- package/dist/reactive/effect.d.ts +11 -0
- package/dist/reactive/effect.js +42 -0
- package/dist/reactive/index.d.ts +3 -0
- package/dist/reactive/index.js +3 -0
- package/dist/reactive/signal.d.ts +32 -0
- package/dist/reactive/signal.js +60 -0
- package/dist/reactive/tracking.d.ts +41 -0
- package/dist/reactive/tracking.js +161 -0
- package/dist/runtime/fiber.d.ts +21 -0
- package/dist/runtime/fiber.js +16 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/reconcile.d.ts +66 -0
- package/dist/runtime/reconcile.js +210 -0
- package/dist/runtime/render.d.ts +42 -0
- package/dist/runtime/render.js +231 -0
- package/dist/runtime/run.d.ts +119 -0
- package/dist/runtime/run.js +334 -0
- package/dist/runtime/state-machine.d.ts +95 -0
- package/dist/runtime/state-machine.js +209 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.js +4 -0
- package/package.json +29 -24
- package/dist/cli/commands/BuildCommand.d.ts +0 -40
- package/dist/cli/commands/BuildCommand.js +0 -151
- package/dist/cli/commands/DeployCommand.d.ts +0 -38
- package/dist/cli/commands/DeployCommand.js +0 -194
- package/dist/cli/commands/DevCommand.d.ts +0 -52
- package/dist/cli/commands/DevCommand.js +0 -394
- package/dist/cli/commands/PlanCommand.d.ts +0 -39
- package/dist/cli/commands/PlanCommand.js +0 -164
- package/dist/cli/commands/index.d.ts +0 -36
- package/dist/cli/commands/index.js +0 -43
- package/dist/cli/core/ArgumentParser.d.ts +0 -46
- package/dist/cli/core/ArgumentParser.js +0 -127
- package/dist/cli/core/BaseCommand.d.ts +0 -75
- package/dist/cli/core/BaseCommand.js +0 -95
- package/dist/cli/core/CLIContext.d.ts +0 -68
- package/dist/cli/core/CLIContext.js +0 -183
- package/dist/cli/core/CommandRegistry.d.ts +0 -64
- package/dist/cli/core/CommandRegistry.js +0 -89
- package/dist/cli/core/index.d.ts +0 -36
- package/dist/cli/core/index.js +0 -43
- package/dist/cli/index.d.ts +0 -35
- package/dist/cli/index.js +0 -100
- package/dist/cli/output.d.ts +0 -204
- package/dist/cli/output.js +0 -437
- package/dist/cli/utils.d.ts +0 -59
- package/dist/cli/utils.js +0 -76
- package/dist/context/createContext.d.ts +0 -90
- package/dist/context/createContext.js +0 -113
- package/dist/context/index.d.ts +0 -30
- package/dist/context/index.js +0 -35
- package/dist/core/CReact.d.ts +0 -409
- package/dist/core/CReact.js +0 -1151
- package/dist/core/CloudDOMBuilder.d.ts +0 -447
- package/dist/core/CloudDOMBuilder.js +0 -1234
- package/dist/core/ContextDependencyTracker.d.ts +0 -165
- package/dist/core/ContextDependencyTracker.js +0 -448
- package/dist/core/ErrorRecoveryManager.d.ts +0 -145
- package/dist/core/ErrorRecoveryManager.js +0 -443
- package/dist/core/EventBus.d.ts +0 -91
- package/dist/core/EventBus.js +0 -185
- package/dist/core/ProviderOutputTracker.d.ts +0 -211
- package/dist/core/ProviderOutputTracker.js +0 -476
- package/dist/core/ReactiveUpdateQueue.d.ts +0 -76
- package/dist/core/ReactiveUpdateQueue.js +0 -121
- package/dist/core/Reconciler.d.ts +0 -415
- package/dist/core/Reconciler.js +0 -1044
- package/dist/core/RenderScheduler.d.ts +0 -153
- package/dist/core/RenderScheduler.js +0 -519
- package/dist/core/Renderer.d.ts +0 -336
- package/dist/core/Renderer.js +0 -944
- package/dist/core/Runtime.d.ts +0 -246
- package/dist/core/Runtime.js +0 -640
- package/dist/core/StateBindingManager.d.ts +0 -121
- package/dist/core/StateBindingManager.js +0 -309
- package/dist/core/StateMachine.d.ts +0 -441
- package/dist/core/StateMachine.js +0 -883
- package/dist/core/StructuralChangeDetector.d.ts +0 -140
- package/dist/core/StructuralChangeDetector.js +0 -363
- package/dist/core/Validator.d.ts +0 -127
- package/dist/core/Validator.js +0 -279
- package/dist/core/errors.d.ts +0 -153
- package/dist/core/errors.js +0 -202
- package/dist/core/index.d.ts +0 -38
- package/dist/core/index.js +0 -64
- package/dist/core/types.d.ts +0 -265
- package/dist/core/types.js +0 -48
- package/dist/hooks/context.d.ts +0 -147
- package/dist/hooks/context.js +0 -334
- package/dist/hooks/useContext.d.ts +0 -113
- package/dist/hooks/useContext.js +0 -169
- package/dist/hooks/useEffect.d.ts +0 -105
- package/dist/hooks/useEffect.js +0 -540
- package/dist/hooks/useInstance.d.ts +0 -139
- package/dist/hooks/useInstance.js +0 -455
- package/dist/hooks/useState.d.ts +0 -120
- package/dist/hooks/useState.js +0 -298
- package/dist/jsx.d.ts +0 -143
- package/dist/jsx.js +0 -76
- package/dist/providers/DummyBackendProvider.d.ts +0 -193
- package/dist/providers/DummyBackendProvider.js +0 -189
- package/dist/providers/DummyCloudProvider.d.ts +0 -128
- package/dist/providers/DummyCloudProvider.js +0 -157
- package/dist/providers/IBackendProvider.d.ts +0 -177
- package/dist/providers/IBackendProvider.js +0 -31
- package/dist/providers/ICloudProvider.d.ts +0 -230
- package/dist/providers/ICloudProvider.js +0 -31
- package/dist/providers/index.d.ts +0 -31
- package/dist/providers/index.js +0 -31
- package/dist/test-event-callbacks.d.ts +0 -0
- package/dist/test-event-callbacks.js +0 -1
- package/dist/utils/Logger.d.ts +0 -144
- package/dist/utils/Logger.js +0 -220
- package/dist/utils/Output.d.ts +0 -161
- package/dist/utils/Output.js +0 -401
- package/dist/utils/deepEqual.d.ts +0 -71
- package/dist/utils/deepEqual.js +0 -276
- package/dist/utils/naming.d.ts +0 -241
- package/dist/utils/naming.js +0 -376
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
|
|
17
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
-
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
/**
|
|
31
|
-
* Argument Parser - parses CLI arguments and flags
|
|
32
|
-
*/
|
|
33
|
-
import { CLIContext } from './CLIContext';
|
|
34
|
-
/**
|
|
35
|
-
* Simple argument parser for CLI commands
|
|
36
|
-
*/
|
|
37
|
-
export declare class ArgumentParser {
|
|
38
|
-
/**
|
|
39
|
-
* Parse command line arguments into context
|
|
40
|
-
*/
|
|
41
|
-
static parse(argv: string[]): CLIContext;
|
|
42
|
-
/**
|
|
43
|
-
* Show help message
|
|
44
|
-
*/
|
|
45
|
-
static showHelp(): void;
|
|
46
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
-
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
|
|
22
|
-
* See the License for the specific language governing permissions and
|
|
23
|
-
|
|
24
|
-
* limitations under the License.
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
29
|
-
|
|
30
|
-
*/
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.ArgumentParser = void 0;
|
|
33
|
-
const Logger_1 = require("../../utils/Logger");
|
|
34
|
-
const logger = Logger_1.LoggerFactory.getLogger('cli');
|
|
35
|
-
/**
|
|
36
|
-
* Simple argument parser for CLI commands
|
|
37
|
-
*/
|
|
38
|
-
class ArgumentParser {
|
|
39
|
-
/**
|
|
40
|
-
* Parse command line arguments into context
|
|
41
|
-
*/
|
|
42
|
-
static parse(argv) {
|
|
43
|
-
// Remove node and script path
|
|
44
|
-
const args = argv.slice(2);
|
|
45
|
-
if (args.length === 0) {
|
|
46
|
-
throw new Error('No command specified');
|
|
47
|
-
}
|
|
48
|
-
const command = args[0];
|
|
49
|
-
const remainingArgs = args.slice(1);
|
|
50
|
-
const flags = {};
|
|
51
|
-
const positionalArgs = [];
|
|
52
|
-
for (let i = 0; i < remainingArgs.length; i++) {
|
|
53
|
-
const arg = remainingArgs[i];
|
|
54
|
-
if (arg.startsWith('--')) {
|
|
55
|
-
// Long flag
|
|
56
|
-
const flagName = arg.slice(2);
|
|
57
|
-
if (flagName.includes('=')) {
|
|
58
|
-
// --flag=value
|
|
59
|
-
const [name, value] = flagName.split('=', 2);
|
|
60
|
-
flags[name] = value;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
// --flag or --flag value
|
|
64
|
-
const nextArg = remainingArgs[i + 1];
|
|
65
|
-
if (nextArg && !nextArg.startsWith('-')) {
|
|
66
|
-
// --flag value
|
|
67
|
-
flags[flagName] = nextArg;
|
|
68
|
-
i++; // Skip next arg
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
// --flag (boolean)
|
|
72
|
-
flags[flagName] = true;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else if (arg.startsWith('-') && arg.length > 1) {
|
|
77
|
-
// Short flag(s)
|
|
78
|
-
const shortFlags = arg.slice(1);
|
|
79
|
-
for (const flag of shortFlags) {
|
|
80
|
-
flags[flag] = true;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
// Positional argument
|
|
85
|
-
positionalArgs.push(arg);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
args: [command, ...positionalArgs],
|
|
90
|
-
flags,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Show help message
|
|
95
|
-
*/
|
|
96
|
-
static showHelp() {
|
|
97
|
-
logger.info(`
|
|
98
|
-
CReact CLI - Infrastructure as Code with JSX
|
|
99
|
-
|
|
100
|
-
Usage:
|
|
101
|
-
creact <command> [options]
|
|
102
|
-
|
|
103
|
-
Commands:
|
|
104
|
-
build Build CloudDOM from entry file
|
|
105
|
-
plan Show diff between current and previous CloudDOM
|
|
106
|
-
deploy Deploy CloudDOM to cloud provider
|
|
107
|
-
dev Hot reload development mode
|
|
108
|
-
|
|
109
|
-
Options:
|
|
110
|
-
--entry <file> Entry file path (default: index.ts)
|
|
111
|
-
--verbose, -v Verbose output
|
|
112
|
-
--json JSON output format
|
|
113
|
-
--dry-run Simulate deployment without applying changes
|
|
114
|
-
--auto-approve Auto-approve changes in dev mode (alias: --auto)
|
|
115
|
-
--help, -h Show help
|
|
116
|
-
|
|
117
|
-
Examples:
|
|
118
|
-
creact build
|
|
119
|
-
creact build --entry app.ts --verbose
|
|
120
|
-
creact plan --json
|
|
121
|
-
creact deploy --dry-run
|
|
122
|
-
creact dev
|
|
123
|
-
creact dev --auto-approve
|
|
124
|
-
`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
exports.ArgumentParser = ArgumentParser;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
|
|
17
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
-
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
/**
|
|
31
|
-
* Base Command - abstract base class for all CLI commands
|
|
32
|
-
*/
|
|
33
|
-
import { CLIContext } from './CLIContext';
|
|
34
|
-
export interface CommandResult {
|
|
35
|
-
exitCode: number;
|
|
36
|
-
message?: string;
|
|
37
|
-
data?: any;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Abstract base class for CLI commands
|
|
41
|
-
*/
|
|
42
|
-
export declare abstract class BaseCommand {
|
|
43
|
-
protected context: CLIContext;
|
|
44
|
-
protected verbose: boolean;
|
|
45
|
-
protected json: boolean;
|
|
46
|
-
constructor(context: CLIContext);
|
|
47
|
-
/**
|
|
48
|
-
* Execute the command
|
|
49
|
-
*/
|
|
50
|
-
abstract execute(): Promise<CommandResult>;
|
|
51
|
-
/**
|
|
52
|
-
* Get command name for help/error messages
|
|
53
|
-
*/
|
|
54
|
-
abstract getName(): string;
|
|
55
|
-
/**
|
|
56
|
-
* Get command description for help
|
|
57
|
-
*/
|
|
58
|
-
abstract getDescription(): string;
|
|
59
|
-
/**
|
|
60
|
-
* Log verbose message
|
|
61
|
-
*/
|
|
62
|
-
protected logVerbose(message: string): void;
|
|
63
|
-
/**
|
|
64
|
-
* Output JSON if json flag is set, otherwise return false
|
|
65
|
-
*/
|
|
66
|
-
protected outputJson(data: any): boolean;
|
|
67
|
-
/**
|
|
68
|
-
* Handle errors consistently
|
|
69
|
-
*/
|
|
70
|
-
protected handleError(error: Error, context?: string): CommandResult;
|
|
71
|
-
/**
|
|
72
|
-
* Handle success consistently
|
|
73
|
-
*/
|
|
74
|
-
protected handleSuccess(message: string, data?: any): CommandResult;
|
|
75
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
-
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
|
|
22
|
-
* See the License for the specific language governing permissions and
|
|
23
|
-
|
|
24
|
-
* limitations under the License.
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
29
|
-
|
|
30
|
-
*/
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.BaseCommand = void 0;
|
|
33
|
-
const Logger_1 = require("../../utils/Logger");
|
|
34
|
-
const logger = Logger_1.LoggerFactory.getLogger('cli');
|
|
35
|
-
/**
|
|
36
|
-
* Abstract base class for CLI commands
|
|
37
|
-
*/
|
|
38
|
-
class BaseCommand {
|
|
39
|
-
constructor(context) {
|
|
40
|
-
this.context = context;
|
|
41
|
-
this.verbose = !!context.flags.verbose;
|
|
42
|
-
this.json = !!context.flags.json;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Log verbose message
|
|
46
|
-
*/
|
|
47
|
-
logVerbose(message) {
|
|
48
|
-
if (this.verbose) {
|
|
49
|
-
logger.debug(`[${this.getName()}] ${message}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Output JSON if json flag is set, otherwise return false
|
|
54
|
-
*/
|
|
55
|
-
outputJson(data) {
|
|
56
|
-
if (this.json) {
|
|
57
|
-
logger.info(JSON.stringify(data, null, 2));
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Handle errors consistently
|
|
64
|
-
*/
|
|
65
|
-
handleError(error, context) {
|
|
66
|
-
const message = context ? `${context}: ${error.message}` : error.message;
|
|
67
|
-
if (this.outputJson({
|
|
68
|
-
status: 'error',
|
|
69
|
-
error: error.message,
|
|
70
|
-
stack: this.verbose ? error.stack : undefined,
|
|
71
|
-
})) {
|
|
72
|
-
return { exitCode: 1 };
|
|
73
|
-
}
|
|
74
|
-
logger.error(`Error: ${message}`);
|
|
75
|
-
if (this.verbose && error.stack) {
|
|
76
|
-
logger.error(error.stack);
|
|
77
|
-
}
|
|
78
|
-
return { exitCode: 1, message };
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Handle success consistently
|
|
82
|
-
*/
|
|
83
|
-
handleSuccess(message, data) {
|
|
84
|
-
if (this.outputJson({
|
|
85
|
-
status: 'success',
|
|
86
|
-
message,
|
|
87
|
-
...data,
|
|
88
|
-
})) {
|
|
89
|
-
return { exitCode: 0 };
|
|
90
|
-
}
|
|
91
|
-
logger.info(message);
|
|
92
|
-
return { exitCode: 0, message, data };
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
exports.BaseCommand = BaseCommand;
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
|
|
17
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
-
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
import { CReact } from '../../core/CReact';
|
|
31
|
-
import { CloudDOMNode } from '../../core/types';
|
|
32
|
-
export interface CLIFlags {
|
|
33
|
-
entry?: string;
|
|
34
|
-
verbose?: boolean;
|
|
35
|
-
json?: boolean;
|
|
36
|
-
'dry-run'?: boolean;
|
|
37
|
-
'auto-approve'?: boolean;
|
|
38
|
-
auto?: boolean;
|
|
39
|
-
help?: boolean;
|
|
40
|
-
h?: boolean;
|
|
41
|
-
version?: boolean;
|
|
42
|
-
V?: boolean;
|
|
43
|
-
[key: string]: string | boolean | undefined;
|
|
44
|
-
}
|
|
45
|
-
export interface CLIContext {
|
|
46
|
-
args: string[];
|
|
47
|
-
flags: CLIFlags;
|
|
48
|
-
}
|
|
49
|
-
export interface CLIResult {
|
|
50
|
-
instance: CReact;
|
|
51
|
-
stackName: string;
|
|
52
|
-
cloudDOM: CloudDOMNode[];
|
|
53
|
-
entryPath: string;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* CLI Context Manager - handles entry file loading and instance creation
|
|
57
|
-
*/
|
|
58
|
-
export declare class CLIContextManager {
|
|
59
|
-
/**
|
|
60
|
-
* Find entry file with fallback logic
|
|
61
|
-
*/
|
|
62
|
-
static findEntryFile(specifiedPath?: string): string;
|
|
63
|
-
/**
|
|
64
|
-
* Load entry file and create CReact instance using configured providers
|
|
65
|
-
* This is the React way - load configuration, then create instances as needed
|
|
66
|
-
*/
|
|
67
|
-
static createCLIInstance(entryPath: string, verbose?: boolean): Promise<CLIResult>;
|
|
68
|
-
}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
-
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
|
|
22
|
-
* See the License for the specific language governing permissions and
|
|
23
|
-
|
|
24
|
-
* limitations under the License.
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
|
|
28
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
29
|
-
|
|
30
|
-
*/
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.CLIContextManager = void 0;
|
|
33
|
-
/**
|
|
34
|
-
* CLI Context - shared context for all CLI commands
|
|
35
|
-
* Handles entry file loading and CReact instance creation
|
|
36
|
-
*/
|
|
37
|
-
const path_1 = require("path");
|
|
38
|
-
const fs_1 = require("fs");
|
|
39
|
-
const Logger_1 = require("../../utils/Logger");
|
|
40
|
-
const logger = Logger_1.LoggerFactory.getLogger('cli');
|
|
41
|
-
/**
|
|
42
|
-
* CLI Context Manager - handles entry file loading and instance creation
|
|
43
|
-
*/
|
|
44
|
-
class CLIContextManager {
|
|
45
|
-
/**
|
|
46
|
-
* Find entry file with fallback logic
|
|
47
|
-
*/
|
|
48
|
-
static findEntryFile(specifiedPath) {
|
|
49
|
-
let entryPath = specifiedPath || 'index.ts';
|
|
50
|
-
// If default index.ts doesn't exist, try other common entry files
|
|
51
|
-
if (entryPath === 'index.ts' && !(0, fs_1.existsSync)((0, path_1.resolve)(process.cwd(), entryPath))) {
|
|
52
|
-
const alternatives = ['index.tsx', 'index.js', 'index.jsx', 'app.ts', 'app.tsx'];
|
|
53
|
-
for (const alt of alternatives) {
|
|
54
|
-
if ((0, fs_1.existsSync)((0, path_1.resolve)(process.cwd(), alt))) {
|
|
55
|
-
return alt;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
throw new Error(`Entry file not found: ${entryPath}. Tried: ${alternatives.join(', ')}`);
|
|
59
|
-
}
|
|
60
|
-
// Final check if entry file exists
|
|
61
|
-
if (!(0, fs_1.existsSync)((0, path_1.resolve)(process.cwd(), entryPath))) {
|
|
62
|
-
throw new Error(`Entry file not found: ${entryPath}`);
|
|
63
|
-
}
|
|
64
|
-
return entryPath;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Load entry file and create CReact instance using configured providers
|
|
68
|
-
* This is the React way - load configuration, then create instances as needed
|
|
69
|
-
*/
|
|
70
|
-
static async createCLIInstance(entryPath, verbose = false) {
|
|
71
|
-
const absoluteEntryPath = (0, path_1.resolve)(process.cwd(), entryPath);
|
|
72
|
-
// Handle TypeScript files
|
|
73
|
-
const fileExtension = (0, path_1.extname)(entryPath);
|
|
74
|
-
const isTypeScript = ['.ts', '.tsx'].includes(fileExtension);
|
|
75
|
-
if (isTypeScript) {
|
|
76
|
-
try {
|
|
77
|
-
const { dirname } = require('path');
|
|
78
|
-
const entryDir = dirname(absoluteEntryPath);
|
|
79
|
-
const localTsConfig = (0, path_1.resolve)(entryDir, 'tsconfig.json');
|
|
80
|
-
// Use ts-node with explicit JSX configuration for CReact
|
|
81
|
-
require('ts-node').register({
|
|
82
|
-
project: (0, fs_1.existsSync)(localTsConfig) ? localTsConfig : undefined,
|
|
83
|
-
transpileOnly: true, // Faster compilation, skip type checking (IDE handles that)
|
|
84
|
-
compilerOptions: {
|
|
85
|
-
module: 'commonjs',
|
|
86
|
-
target: 'es2020',
|
|
87
|
-
jsx: 'react',
|
|
88
|
-
jsxFactory: 'CReact.createElement',
|
|
89
|
-
jsxFragmentFactory: 'CReact.Fragment',
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
if (verbose) {
|
|
93
|
-
logger.debug(`TypeScript loader registered (ts-node)`);
|
|
94
|
-
if ((0, fs_1.existsSync)(localTsConfig)) {
|
|
95
|
-
logger.debug(`Using tsconfig: ${localTsConfig}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
catch (tsNodeError) {
|
|
100
|
-
throw new Error('TypeScript entry files require ts-node. Install with: npm install --save-dev ts-node');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// Clear require cache to allow reloading
|
|
104
|
-
delete require.cache[absoluteEntryPath];
|
|
105
|
-
if (verbose)
|
|
106
|
-
logger.debug('Cleared module cache');
|
|
107
|
-
// Load the entry module - this configures the providers
|
|
108
|
-
let entryModule;
|
|
109
|
-
try {
|
|
110
|
-
entryModule = require(absoluteEntryPath);
|
|
111
|
-
if (verbose)
|
|
112
|
-
logger.debug('Entry module loaded successfully');
|
|
113
|
-
}
|
|
114
|
-
catch (loadError) {
|
|
115
|
-
throw new Error(`Could not load entry file: ${entryPath}\nError: ${loadError.message}`);
|
|
116
|
-
}
|
|
117
|
-
// IMPORTANT: Get the CReact class from the entry module's require cache
|
|
118
|
-
// This ensures we use the same instance that the entry file configured
|
|
119
|
-
// The entry file imports CReact, which gets cached in require.cache
|
|
120
|
-
// We need to find that cached module and use its CReact instance
|
|
121
|
-
let CReactClass = null;
|
|
122
|
-
// Look through require.cache to find the CReact module that was loaded
|
|
123
|
-
for (const [modulePath, cachedModule] of Object.entries(require.cache)) {
|
|
124
|
-
if (modulePath.includes('CReact') && cachedModule?.exports?.CReact) {
|
|
125
|
-
CReactClass = cachedModule.exports.CReact;
|
|
126
|
-
if (verbose)
|
|
127
|
-
logger.debug('Found CReact in require cache:', modulePath);
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (!CReactClass) {
|
|
132
|
-
throw new Error('Could not find CReact class in require cache. Entry file must import CReact.');
|
|
133
|
-
}
|
|
134
|
-
// Debug: Check provider status
|
|
135
|
-
if (verbose) {
|
|
136
|
-
logger.debug('Checking providers after module load:');
|
|
137
|
-
logger.debug(' cloudProvider:', !!CReactClass.cloudProvider);
|
|
138
|
-
logger.debug(' backendProvider:', !!CReactClass.backendProvider);
|
|
139
|
-
}
|
|
140
|
-
// Validate that providers are configured (they should be after loading entry file)
|
|
141
|
-
if (!CReactClass.cloudProvider || !CReactClass.backendProvider) {
|
|
142
|
-
throw new Error('CReact providers must be configured in entry file before calling renderCloudDOM');
|
|
143
|
-
}
|
|
144
|
-
// Create a CLI instance using the same providers (React way)
|
|
145
|
-
const instance = new CReactClass({
|
|
146
|
-
cloudProvider: CReactClass.cloudProvider,
|
|
147
|
-
backendProvider: CReactClass.backendProvider,
|
|
148
|
-
migrationMap: CReactClass.migrationMap,
|
|
149
|
-
asyncTimeout: CReactClass.asyncTimeout,
|
|
150
|
-
});
|
|
151
|
-
// Get the JSX element from the entry module
|
|
152
|
-
// We need to extract the JSX element that was passed to renderCloudDOM
|
|
153
|
-
// For now, we'll get it from the default export promise, but we need the JSX
|
|
154
|
-
let cloudDOMPromise = entryModule.default;
|
|
155
|
-
// If default export is a function, call it to get the promise
|
|
156
|
-
if (typeof cloudDOMPromise === 'function') {
|
|
157
|
-
cloudDOMPromise = cloudDOMPromise();
|
|
158
|
-
}
|
|
159
|
-
if (!cloudDOMPromise || typeof cloudDOMPromise.then !== 'function') {
|
|
160
|
-
throw new Error('Entry file must export a default Promise from CReact.renderCloudDOM() or a function that returns one');
|
|
161
|
-
}
|
|
162
|
-
// Await the CloudDOM promise to ensure providers are configured
|
|
163
|
-
const cloudDOM = await cloudDOMPromise;
|
|
164
|
-
if (!Array.isArray(cloudDOM)) {
|
|
165
|
-
throw new Error('CloudDOM must be an array of nodes');
|
|
166
|
-
}
|
|
167
|
-
// Get the instance that was used to build the CloudDOM (has the Fiber tree)
|
|
168
|
-
const lastInstanceData = CReactClass.getLastInstance();
|
|
169
|
-
if (lastInstanceData) {
|
|
170
|
-
// Use the same instance that built the CloudDOM
|
|
171
|
-
return {
|
|
172
|
-
instance: lastInstanceData.instance,
|
|
173
|
-
stackName: lastInstanceData.stackName,
|
|
174
|
-
cloudDOM,
|
|
175
|
-
entryPath,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
// Fallback: Extract stack name from environment or use default
|
|
179
|
-
const stackName = process.env.STACK_NAME || 'default';
|
|
180
|
-
return { instance, stackName, cloudDOM, entryPath };
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
exports.CLIContextManager = CLIContextManager;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
|
|
17
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
-
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
|
|
23
|
-
* limitations under the License.
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
* Copyright 2025 Daniel Coutinho Ribeiro
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
/**
|
|
31
|
-
* Command Registry - manages available CLI commands
|
|
32
|
-
*/
|
|
33
|
-
import { BaseCommand } from './BaseCommand';
|
|
34
|
-
import { CLIContext } from './CLIContext';
|
|
35
|
-
export type CommandConstructor = new (context: CLIContext) => BaseCommand;
|
|
36
|
-
/**
|
|
37
|
-
* Registry of available CLI commands
|
|
38
|
-
*/
|
|
39
|
-
export declare class CommandRegistry {
|
|
40
|
-
private static commands;
|
|
41
|
-
/**
|
|
42
|
-
* Get all available command names
|
|
43
|
-
*/
|
|
44
|
-
static getCommandNames(): string[];
|
|
45
|
-
/**
|
|
46
|
-
* Check if command exists
|
|
47
|
-
*/
|
|
48
|
-
static hasCommand(name: string): boolean;
|
|
49
|
-
/**
|
|
50
|
-
* Create command instance
|
|
51
|
-
*/
|
|
52
|
-
static createCommand(name: string, context: CLIContext): BaseCommand;
|
|
53
|
-
/**
|
|
54
|
-
* Register a new command
|
|
55
|
-
*/
|
|
56
|
-
static registerCommand(name: string, commandClass: CommandConstructor): void;
|
|
57
|
-
/**
|
|
58
|
-
* Get command help information
|
|
59
|
-
*/
|
|
60
|
-
static getCommandHelp(): Array<{
|
|
61
|
-
name: string;
|
|
62
|
-
description: string;
|
|
63
|
-
}>;
|
|
64
|
-
}
|