crankscript 0.1.2 → 0.1.5-beta
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 +1 -11
- package/assets/package.json +4 -0
- package/assets/plugin.js +260 -0
- package/assets/plugin.ts +372 -0
- package/assets/tsconfig.json +10 -0
- package/package.json +30 -17
- package/src/commands/CompileCommand/CompileCommand.d.ts +8 -0
- package/src/commands/CompileCommand/CompileCommand.js +21 -0
- package/src/commands/CompileCommand/CompileCommand.js.map +1 -0
- package/src/commands/CompileCommand/components/Compile.d.ts +7 -0
- package/src/commands/CompileCommand/components/Compile.js +14 -0
- package/src/commands/CompileCommand/components/Compile.js.map +1 -0
- package/src/commands/CompileCommand/fn/getPdcPathFromEnvironment.d.ts +2 -0
- package/src/commands/CompileCommand/fn/getPdcPathFromEnvironment.js +6 -0
- package/src/commands/CompileCommand/fn/getPdcPathFromEnvironment.js.map +1 -0
- package/src/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.d.ts +2 -0
- package/src/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.js +6 -0
- package/src/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.js.map +1 -0
- package/src/commands/CompileCommand/hooks/useCompileTasks.d.ts +2 -0
- package/src/commands/CompileCommand/hooks/useCompileTasks.js +60 -0
- package/src/commands/CompileCommand/hooks/useCompileTasks.js.map +1 -0
- package/src/commands/CompileCommand/index.d.ts +1 -0
- package/src/commands/CompileCommand/index.js +3 -0
- package/src/commands/CompileCommand/index.js.map +1 -0
- package/src/commands/DoctorCommand.d.ts +7 -0
- package/src/commands/DoctorCommand.js +26 -0
- package/src/commands/DoctorCommand.js.map +1 -0
- package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.d.ts +9 -0
- package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.js +25 -0
- package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.js.map +1 -0
- package/src/commands/EnvironmentAwareCommand/components/HealthReport.d.ts +7 -0
- package/src/commands/EnvironmentAwareCommand/components/HealthReport.js +41 -0
- package/src/commands/EnvironmentAwareCommand/components/HealthReport.js.map +1 -0
- package/src/commands/EnvironmentAwareCommand/index.d.ts +1 -0
- package/src/commands/EnvironmentAwareCommand/index.js +3 -0
- package/src/commands/EnvironmentAwareCommand/index.js.map +1 -0
- package/src/commands/GenerateTypes/GenerateTypesCommand.d.ts +10 -0
- package/src/commands/GenerateTypes/GenerateTypesCommand.js +45 -0
- package/src/commands/GenerateTypes/GenerateTypesCommand.js.map +1 -0
- package/src/commands/GenerateTypes/components/GenerateTypes.d.ts +9 -0
- package/src/commands/GenerateTypes/components/GenerateTypes.js +36 -0
- package/src/commands/GenerateTypes/components/GenerateTypes.js.map +1 -0
- package/src/commands/GenerateTypes/constants.d.ts +1 -0
- package/src/commands/GenerateTypes/constants.js +3 -0
- package/src/commands/GenerateTypes/constants.js.map +1 -0
- package/src/commands/GenerateTypes/fn/getApiDefinitions.d.ts +2 -0
- package/src/commands/GenerateTypes/fn/getApiDefinitions.js +39 -0
- package/src/commands/GenerateTypes/fn/getApiDefinitions.js.map +1 -0
- package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.d.ts +5 -0
- package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.js +78 -0
- package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.js.map +1 -0
- package/src/commands/GenerateTypes/fn/getFunctionTypeOverride.d.ts +1 -0
- package/src/commands/GenerateTypes/fn/getFunctionTypeOverride.js +7 -0
- package/src/commands/GenerateTypes/fn/getFunctionTypeOverride.js.map +1 -0
- package/src/commands/GenerateTypes/fn/getHtmlForVersion.d.ts +1 -0
- package/src/commands/GenerateTypes/fn/getHtmlForVersion.js +21 -0
- package/src/commands/GenerateTypes/fn/getHtmlForVersion.js.map +1 -0
- package/src/commands/GenerateTypes/fn/parseFunctionSignature.d.ts +10 -0
- package/src/commands/GenerateTypes/fn/parseFunctionSignature.js +22 -0
- package/src/commands/GenerateTypes/fn/parseFunctionSignature.js.map +1 -0
- package/src/commands/GenerateTypes/hooks/useFetchHtml.d.ts +12 -0
- package/src/commands/GenerateTypes/hooks/useFetchHtml.js +31 -0
- package/src/commands/GenerateTypes/hooks/useFetchHtml.js.map +1 -0
- package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.d.ts +12 -0
- package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.js +126 -0
- package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.js.map +1 -0
- package/src/commands/GenerateTypes/hooks/useGetVersion.d.ts +53 -0
- package/src/commands/GenerateTypes/hooks/useGetVersion.js +52 -0
- package/src/commands/GenerateTypes/hooks/useGetVersion.js.map +1 -0
- package/src/commands/GenerateTypes/hooks/useParseDocumentation.d.ts +13 -0
- package/src/commands/GenerateTypes/hooks/useParseDocumentation.js +34 -0
- package/src/commands/GenerateTypes/hooks/useParseDocumentation.js.map +1 -0
- package/src/commands/GenerateTypes/index.d.ts +1 -0
- package/src/commands/GenerateTypes/index.js +3 -0
- package/src/commands/GenerateTypes/index.js.map +1 -0
- package/src/commands/GenerateTypes/utils/createTypeProvider.d.ts +43 -0
- package/src/commands/GenerateTypes/utils/createTypeProvider.js +156 -0
- package/src/commands/GenerateTypes/utils/createTypeProvider.js.map +1 -0
- package/src/commands/GenerateTypes/utils/functionTypeOverrides.d.ts +2 -0
- package/src/commands/GenerateTypes/utils/functionTypeOverrides.js +18 -0
- package/src/commands/GenerateTypes/utils/functionTypeOverrides.js.map +1 -0
- package/src/commands/NewCommand/NewCommand.d.ts +10 -0
- package/src/commands/NewCommand/NewCommand.js +35 -0
- package/src/commands/NewCommand/NewCommand.js.map +1 -0
- package/src/commands/NewCommand/components/New.d.ts +8 -0
- package/src/commands/NewCommand/components/New.js +26 -0
- package/src/commands/NewCommand/components/New.js.map +1 -0
- package/src/commands/RenderableCommand.d.ts +7 -0
- package/src/commands/RenderableCommand.js +12 -0
- package/src/commands/RenderableCommand.js.map +1 -0
- package/src/commands/SimulatorCommand/SimulatorCommand.d.ts +12 -0
- package/src/commands/SimulatorCommand/SimulatorCommand.js +39 -0
- package/src/commands/SimulatorCommand/SimulatorCommand.js.map +1 -0
- package/src/commands/SimulatorCommand/components/Simulator.d.ts +11 -0
- package/src/commands/SimulatorCommand/components/Simulator.js +80 -0
- package/src/commands/SimulatorCommand/components/Simulator.js.map +1 -0
- package/src/commands/SimulatorCommand/index.d.ts +1 -0
- package/src/commands/SimulatorCommand/index.js +3 -0
- package/src/commands/SimulatorCommand/index.js.map +1 -0
- package/src/commands/TranspileCommand/TranspileCommand.d.ts +9 -0
- package/src/commands/TranspileCommand/TranspileCommand.js +31 -0
- package/src/commands/TranspileCommand/TranspileCommand.js.map +1 -0
- package/src/commands/TranspileCommand/components/Transpile.d.ts +6 -0
- package/src/commands/TranspileCommand/components/Transpile.js +12 -0
- package/src/commands/TranspileCommand/components/Transpile.js.map +1 -0
- package/src/commands/TranspileCommand/fn/transpile.d.ts +1 -0
- package/src/commands/TranspileCommand/fn/transpile.js +19 -0
- package/src/commands/TranspileCommand/fn/transpile.js.map +1 -0
- package/src/commands/TranspileCommand/hooks/useTranspileTasks.d.ts +2 -0
- package/src/commands/TranspileCommand/hooks/useTranspileTasks.js +18 -0
- package/src/commands/TranspileCommand/hooks/useTranspileTasks.js.map +1 -0
- package/src/commands/TranspileCommand/index.d.ts +1 -0
- package/src/commands/TranspileCommand/index.js +3 -0
- package/src/commands/TranspileCommand/index.js.map +1 -0
- package/src/components/CheckList/CheckList.d.ts +8 -0
- package/src/components/CheckList/CheckList.js +34 -0
- package/src/components/CheckList/CheckList.js.map +1 -0
- package/src/components/CheckList/Item.d.ts +7 -0
- package/src/components/CheckList/Item.js +87 -0
- package/src/components/CheckList/Item.js.map +1 -0
- package/src/components/CheckList/index.d.ts +1 -0
- package/src/components/CheckList/index.js +3 -0
- package/src/components/CheckList/index.js.map +1 -0
- package/src/components/Spinner.d.ts +3 -0
- package/src/components/Spinner.js +26 -0
- package/src/components/Spinner.js.map +1 -0
- package/src/constants.d.ts +3 -0
- package/src/constants.js +11 -0
- package/src/constants.js.map +1 -0
- package/src/environment/createEnvironment.d.ts +12 -0
- package/src/environment/createEnvironment.js +37 -0
- package/src/environment/createEnvironment.js.map +1 -0
- package/src/environment/dto/Environment.d.ts +7 -0
- package/src/environment/dto/Environment.js +7 -0
- package/src/environment/dto/Environment.js.map +1 -0
- package/src/environment/error/EnvironmentError.d.ts +2 -0
- package/src/environment/error/EnvironmentError.js +4 -0
- package/src/environment/error/EnvironmentError.js.map +1 -0
- package/src/environment/path/dto/PlaydateSdkPath.d.ts +5 -0
- package/src/environment/path/dto/PlaydateSdkPath.js +10 -0
- package/src/environment/path/dto/PlaydateSdkPath.js.map +1 -0
- package/src/environment/path/error/PlaydateSdkPathVariableNotSetError.d.ts +4 -0
- package/src/environment/path/error/PlaydateSdkPathVariableNotSetError.js +8 -0
- package/src/environment/path/error/PlaydateSdkPathVariableNotSetError.js.map +1 -0
- package/src/environment/path/getPlaydateSdkPath.d.ts +14 -0
- package/src/environment/path/getPlaydateSdkPath.js +16 -0
- package/src/environment/path/getPlaydateSdkPath.js.map +1 -0
- package/src/index.d.ts +1 -1
- package/src/index.js +30 -13
- package/src/index.js.map +1 -1
- package/src/types.d.ts +96 -0
- package/src/types.js +16 -0
- package/src/types.js.map +1 -0
- package/src/utils/dirname.d.ts +1 -0
- package/src/utils/dirname.js +5 -0
- package/src/utils/dirname.js.map +1 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
import { FunctionDeclarationStructure, ParameterDeclarationStructure, StructureKind } from 'ts-morph';
|
2
|
+
import { FunctionDescription, ParameterDetails, PropertyDescription, PropertyDetails } from '../../../types.js';
|
3
|
+
export declare const createTypeProvider: (version: string) => {
|
4
|
+
getGlobalStatements: () => string[];
|
5
|
+
getStatements: () => string[];
|
6
|
+
getClassOptions: (className: string) => Partial<import("ts-morph").ClassDeclarationStructure>;
|
7
|
+
getPropertyDetails: (property: PropertyDescription) => PropertyDetails;
|
8
|
+
getFunctionReturnType: (func: FunctionDescription) => string;
|
9
|
+
getParameterDetails: (func: FunctionDescription, parameter: string) => ParameterDetails;
|
10
|
+
getParameters: (func: FunctionDescription) => FunctionDeclarationStructure["parameters"];
|
11
|
+
getFunctionOverrideOptions: (func: FunctionDescription) => Partial<FunctionDeclarationStructure> | Partial<import("ts-morph").MethodDeclarationStructure> | {
|
12
|
+
overloads: ({
|
13
|
+
docs: string[];
|
14
|
+
leadingTrivia?: (string | import("ts-morph").WriterFunction | (string | import("ts-morph").WriterFunction)[]) | undefined;
|
15
|
+
trailingTrivia?: (string | import("ts-morph").WriterFunction | (string | import("ts-morph").WriterFunction)[]) | undefined;
|
16
|
+
hasQuestionToken?: boolean | undefined;
|
17
|
+
scope?: import("ts-morph").Scope | undefined;
|
18
|
+
hasOverrideKeyword?: boolean | undefined;
|
19
|
+
parameters?: import("ts-morph").OptionalKind<ParameterDeclarationStructure>[] | undefined;
|
20
|
+
typeParameters?: (import("ts-morph").OptionalKind<import("ts-morph").TypeParameterDeclarationStructure> | string)[] | undefined;
|
21
|
+
isAbstract?: boolean | undefined;
|
22
|
+
returnType?: (string | import("ts-morph").WriterFunction) | undefined;
|
23
|
+
isAsync?: boolean | undefined;
|
24
|
+
isGenerator?: boolean | undefined;
|
25
|
+
isStatic?: boolean | undefined;
|
26
|
+
kind?: StructureKind.MethodOverload | undefined;
|
27
|
+
} | {
|
28
|
+
docs: string[];
|
29
|
+
leadingTrivia?: (string | import("ts-morph").WriterFunction | (string | import("ts-morph").WriterFunction)[]) | undefined;
|
30
|
+
trailingTrivia?: (string | import("ts-morph").WriterFunction | (string | import("ts-morph").WriterFunction)[]) | undefined;
|
31
|
+
parameters?: import("ts-morph").OptionalKind<ParameterDeclarationStructure>[] | undefined;
|
32
|
+
typeParameters?: (import("ts-morph").OptionalKind<import("ts-morph").TypeParameterDeclarationStructure> | string)[] | undefined;
|
33
|
+
hasDeclareKeyword?: boolean | undefined;
|
34
|
+
isExported?: boolean | undefined;
|
35
|
+
isDefaultExport?: boolean | undefined;
|
36
|
+
returnType?: (string | import("ts-morph").WriterFunction) | undefined;
|
37
|
+
isAsync?: boolean | undefined;
|
38
|
+
isGenerator?: boolean | undefined;
|
39
|
+
kind?: StructureKind.FunctionOverload | undefined;
|
40
|
+
})[];
|
41
|
+
};
|
42
|
+
save: () => void;
|
43
|
+
};
|
@@ -0,0 +1,156 @@
|
|
1
|
+
import { _ as _extends } from "@swc/helpers/_/_extends";
|
2
|
+
import { readFileSync } from 'fs';
|
3
|
+
import { existsSync, writeFileSync } from 'node:fs';
|
4
|
+
import { join } from 'node:path';
|
5
|
+
import { StructureKind } from 'ts-morph';
|
6
|
+
import { DataFolder } from '../../../constants.js';
|
7
|
+
function kebabToCamelCase(str) {
|
8
|
+
return str.replace(/-([a-z])/g, (_, letter)=>letter.toUpperCase());
|
9
|
+
}
|
10
|
+
export const createTypeProvider = (version)=>{
|
11
|
+
const path = join(DataFolder, `${version}.json`);
|
12
|
+
const fallbackProvider = existsSync(path) ? JSON.parse(readFileSync(path, 'utf-8')) : {
|
13
|
+
globalStatements: [],
|
14
|
+
statements: [],
|
15
|
+
classes: {},
|
16
|
+
properties: {},
|
17
|
+
functions: {}
|
18
|
+
};
|
19
|
+
const provider = {
|
20
|
+
globalStatements: fallbackProvider.globalStatements,
|
21
|
+
statements: fallbackProvider.statements,
|
22
|
+
classes: fallbackProvider.classes,
|
23
|
+
properties: {},
|
24
|
+
functions: {}
|
25
|
+
};
|
26
|
+
const visitedProperties = new Map();
|
27
|
+
const visitedFunctions = new Map();
|
28
|
+
const getClassOptions = (className)=>{
|
29
|
+
var _provider_classes_className;
|
30
|
+
return (_provider_classes_className = provider.classes[className]) != null ? _provider_classes_className : {};
|
31
|
+
};
|
32
|
+
const getPropertyDetails = (property)=>{
|
33
|
+
if (visitedProperties.has(property.signature)) {
|
34
|
+
return visitedProperties.get(property.signature);
|
35
|
+
}
|
36
|
+
let result;
|
37
|
+
let prop = provider.properties[property.signature];
|
38
|
+
if (!prop) {
|
39
|
+
prop = fallbackProvider.properties[property.signature];
|
40
|
+
}
|
41
|
+
if (!prop) {
|
42
|
+
const details = {
|
43
|
+
signature: property.signature,
|
44
|
+
type: 'any'
|
45
|
+
};
|
46
|
+
provider.properties[property.signature] = details;
|
47
|
+
result = details;
|
48
|
+
} else {
|
49
|
+
provider.properties[property.signature] = prop;
|
50
|
+
result = prop;
|
51
|
+
}
|
52
|
+
visitedProperties.set(property.signature, result);
|
53
|
+
return result;
|
54
|
+
};
|
55
|
+
const getFunctionDetails = (func)=>{
|
56
|
+
if (visitedFunctions.has(func.signature)) {
|
57
|
+
return visitedFunctions.get(func.signature);
|
58
|
+
}
|
59
|
+
let result;
|
60
|
+
let fn = provider.functions[func.signature];
|
61
|
+
if (!fn) {
|
62
|
+
fn = fallbackProvider.functions[func.signature];
|
63
|
+
}
|
64
|
+
if (!fn) {
|
65
|
+
const details = {
|
66
|
+
signature: func.signature,
|
67
|
+
parameters: func.parameters.map((p)=>({
|
68
|
+
name: p.name,
|
69
|
+
type: 'any'
|
70
|
+
})),
|
71
|
+
returnType: 'any'
|
72
|
+
};
|
73
|
+
provider.functions[func.signature] = details;
|
74
|
+
result = details;
|
75
|
+
} else {
|
76
|
+
provider.functions[func.signature] = fn;
|
77
|
+
result = fn;
|
78
|
+
}
|
79
|
+
visitedFunctions.set(func.signature, result);
|
80
|
+
return result;
|
81
|
+
};
|
82
|
+
const getGlobalStatements = ()=>{
|
83
|
+
return provider.globalStatements;
|
84
|
+
};
|
85
|
+
const getStatements = ()=>{
|
86
|
+
return provider.statements;
|
87
|
+
};
|
88
|
+
const getFunctionReturnType = (func)=>{
|
89
|
+
const { returnType } = getFunctionDetails(func);
|
90
|
+
return returnType;
|
91
|
+
};
|
92
|
+
const getParameterDetails = (func, parameter)=>{
|
93
|
+
const { parameters } = getFunctionDetails(func);
|
94
|
+
const param = parameters.find((p)=>p.name === parameter);
|
95
|
+
if (!param) {
|
96
|
+
return {
|
97
|
+
name: parameter,
|
98
|
+
type: 'any'
|
99
|
+
};
|
100
|
+
}
|
101
|
+
return param;
|
102
|
+
};
|
103
|
+
const getParameters = (func)=>{
|
104
|
+
const { overrideParameters = false, parameters } = getFunctionDetails(func);
|
105
|
+
const getParameterFromDetails = (parameter)=>{
|
106
|
+
var _parameter_overrideOptions;
|
107
|
+
return _extends({
|
108
|
+
kind: StructureKind.Parameter,
|
109
|
+
name: kebabToCamelCase(parameter.name),
|
110
|
+
type: parameter.type
|
111
|
+
}, (_parameter_overrideOptions = parameter.overrideOptions) != null ? _parameter_overrideOptions : {});
|
112
|
+
};
|
113
|
+
if (overrideParameters) {
|
114
|
+
return parameters.map((details)=>{
|
115
|
+
return getParameterFromDetails(details);
|
116
|
+
});
|
117
|
+
}
|
118
|
+
return func.parameters.map((parameter)=>{
|
119
|
+
const details = getParameterDetails(func, parameter.name);
|
120
|
+
return _extends({
|
121
|
+
hasQuestionToken: !parameter.required
|
122
|
+
}, getParameterFromDetails(details));
|
123
|
+
});
|
124
|
+
};
|
125
|
+
const getFunctionOverrideOptions = (func)=>{
|
126
|
+
var _getFunctionDetails_overrideOptions;
|
127
|
+
const options = (_getFunctionDetails_overrideOptions = getFunctionDetails(func).overrideOptions) != null ? _getFunctionDetails_overrideOptions : {};
|
128
|
+
if ('overloads' in options && Array.isArray(options.overloads)) {
|
129
|
+
return {
|
130
|
+
overloads: options.overloads.map((overload)=>_extends({}, overload, {
|
131
|
+
docs: [
|
132
|
+
func.docs
|
133
|
+
]
|
134
|
+
}))
|
135
|
+
};
|
136
|
+
}
|
137
|
+
return options;
|
138
|
+
};
|
139
|
+
const save = ()=>{
|
140
|
+
const contents = JSON.stringify(provider, null, 4) + '\n';
|
141
|
+
writeFileSync(path, contents, 'utf-8');
|
142
|
+
};
|
143
|
+
return {
|
144
|
+
getGlobalStatements,
|
145
|
+
getStatements,
|
146
|
+
getClassOptions,
|
147
|
+
getPropertyDetails,
|
148
|
+
getFunctionReturnType,
|
149
|
+
getParameterDetails,
|
150
|
+
getParameters,
|
151
|
+
getFunctionOverrideOptions,
|
152
|
+
save
|
153
|
+
};
|
154
|
+
};
|
155
|
+
|
156
|
+
//# sourceMappingURL=createTypeProvider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/cli/src/commands/GenerateTypes/utils/createTypeProvider.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { existsSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n FunctionDeclarationStructure,\n ParameterDeclarationStructure,\n StructureKind,\n} from 'ts-morph';\nimport { DataFolder } from '@/cli/constants.js';\nimport {\n FunctionDescription,\n FunctionDetails,\n ParameterDetails,\n PropertyDescription,\n PropertyDetails,\n TypeProviderData,\n} from '@/cli/types.js';\n\nfunction kebabToCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n\nexport const createTypeProvider = (version: string) => {\n const path = join(DataFolder, `${version}.json`);\n const fallbackProvider = existsSync(path)\n ? (JSON.parse(readFileSync(path, 'utf-8')) as TypeProviderData)\n : ({\n globalStatements: [],\n statements: [],\n classes: {},\n properties: {},\n functions: {},\n } satisfies TypeProviderData);\n const provider = {\n globalStatements: fallbackProvider.globalStatements,\n statements: fallbackProvider.statements,\n classes: fallbackProvider.classes,\n properties: {},\n functions: {},\n } as TypeProviderData;\n const visitedProperties = new Map<string, PropertyDetails>();\n const visitedFunctions = new Map<string, FunctionDetails>();\n\n const getClassOptions = (className: string) => {\n return provider.classes[className] ?? {};\n };\n\n const getPropertyDetails = (property: PropertyDescription) => {\n if (visitedProperties.has(property.signature)) {\n return visitedProperties.get(property.signature) as PropertyDetails;\n }\n\n let result: PropertyDetails;\n let prop = provider.properties[property.signature];\n\n if (!prop) {\n prop = fallbackProvider.properties[property.signature];\n }\n\n if (!prop) {\n const details = {\n signature: property.signature,\n type: 'any',\n } satisfies PropertyDetails;\n\n provider.properties[property.signature] = details;\n\n result = details;\n } else {\n provider.properties[property.signature] = prop;\n\n result = prop;\n }\n\n visitedProperties.set(property.signature, result);\n\n return result;\n };\n\n const getFunctionDetails = (func: FunctionDescription): FunctionDetails => {\n if (visitedFunctions.has(func.signature)) {\n return visitedFunctions.get(func.signature) as FunctionDetails;\n }\n\n let result: FunctionDetails;\n let fn = provider.functions[func.signature];\n\n if (!fn) {\n fn = fallbackProvider.functions[func.signature];\n }\n\n if (!fn) {\n const details = {\n signature: func.signature,\n parameters: func.parameters.map((p) => ({\n name: p.name,\n type: 'any',\n })),\n returnType: 'any',\n } satisfies FunctionDetails;\n\n provider.functions[func.signature] = details;\n\n result = details;\n } else {\n provider.functions[func.signature] = fn;\n\n result = fn;\n }\n\n visitedFunctions.set(func.signature, result);\n\n return result;\n };\n\n const getGlobalStatements = () => {\n return provider.globalStatements;\n };\n\n const getStatements = () => {\n return provider.statements;\n };\n\n const getFunctionReturnType = (func: FunctionDescription) => {\n const { returnType } = getFunctionDetails(func);\n\n return returnType;\n };\n\n const getParameterDetails = (\n func: FunctionDescription,\n parameter: string\n ) => {\n const { parameters } = getFunctionDetails(func);\n const param = parameters.find((p) => p.name === parameter);\n\n if (!param) {\n return {\n name: parameter,\n type: 'any',\n } satisfies ParameterDetails;\n }\n\n return param;\n };\n\n const getParameters = (\n func: FunctionDescription\n ): FunctionDeclarationStructure['parameters'] => {\n const { overrideParameters = false, parameters } =\n getFunctionDetails(func);\n const getParameterFromDetails = (parameter: ParameterDetails) => {\n return {\n kind: StructureKind.Parameter,\n name: kebabToCamelCase(parameter.name),\n type: parameter.type,\n ...(parameter.overrideOptions ?? {}),\n } satisfies ParameterDeclarationStructure;\n };\n\n if (overrideParameters) {\n return parameters.map((details) => {\n return getParameterFromDetails(details);\n });\n }\n\n return func.parameters.map((parameter) => {\n const details = getParameterDetails(func, parameter.name);\n\n return {\n hasQuestionToken: !parameter.required,\n ...getParameterFromDetails(details),\n } satisfies ParameterDeclarationStructure;\n });\n };\n\n const getFunctionOverrideOptions = (func: FunctionDescription) => {\n const options = getFunctionDetails(func).overrideOptions ?? {};\n\n if ('overloads' in options && Array.isArray(options.overloads)) {\n return {\n overloads: options.overloads.map((overload) => ({\n ...overload,\n docs: [func.docs],\n })),\n };\n }\n\n return options;\n };\n\n const save = () => {\n const contents = JSON.stringify(provider, null, 4) + '\\n';\n\n writeFileSync(path, contents, 'utf-8');\n };\n\n return {\n getGlobalStatements,\n getStatements,\n getClassOptions,\n getPropertyDetails,\n getFunctionReturnType,\n getParameterDetails,\n getParameters,\n getFunctionOverrideOptions,\n save,\n };\n};\n"],"names":["readFileSync","existsSync","writeFileSync","join","StructureKind","DataFolder","kebabToCamelCase","str","replace","_","letter","toUpperCase","createTypeProvider","version","path","fallbackProvider","JSON","parse","globalStatements","statements","classes","properties","functions","provider","visitedProperties","Map","visitedFunctions","getClassOptions","className","getPropertyDetails","property","has","signature","get","result","prop","details","type","set","getFunctionDetails","func","fn","parameters","map","p","name","returnType","getGlobalStatements","getStatements","getFunctionReturnType","getParameterDetails","parameter","param","find","getParameters","overrideParameters","getParameterFromDetails","kind","Parameter","overrideOptions","hasQuestionToken","required","getFunctionOverrideOptions","options","Array","isArray","overloads","overload","docs","save","contents","stringify"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
export const functionTypeOverrides = {
|
2
|
+
defaultVersion: {
|
3
|
+
'playdate.timer.timerEndedCallback': {
|
4
|
+
isMethod: true
|
5
|
+
},
|
6
|
+
'playdate.timer.updateCallback': {
|
7
|
+
isMethod: true
|
8
|
+
},
|
9
|
+
'playdate.frameTimer.timerEndedCallback': {
|
10
|
+
isMethod: true
|
11
|
+
},
|
12
|
+
'playdate.frameTimer.updateCallback': {
|
13
|
+
isMethod: true
|
14
|
+
}
|
15
|
+
}
|
16
|
+
};
|
17
|
+
|
18
|
+
//# sourceMappingURL=functionTypeOverrides.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/cli/src/commands/GenerateTypes/utils/functionTypeOverrides.ts"],"sourcesContent":["import { FunctionTypeOverrideMap } from '@/cli/types.js';\n\nexport const functionTypeOverrides: Record<string, FunctionTypeOverrideMap> = {\n defaultVersion: {\n 'playdate.timer.timerEndedCallback': {\n isMethod: true,\n },\n 'playdate.timer.updateCallback': {\n isMethod: true,\n },\n 'playdate.frameTimer.timerEndedCallback': {\n isMethod: true,\n },\n 'playdate.frameTimer.updateCallback': {\n isMethod: true,\n },\n },\n};\n"],"names":["functionTypeOverrides","defaultVersion","isMethod"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,wBAAiE;IAC1EC,gBAAgB;QACZ,qCAAqC;YACjCC,UAAU;QACd;QACA,iCAAiC;YAC7BA,UAAU;QACd;QACA,0CAA0C;YACtCA,UAAU;QACd;QACA,sCAAsC;YAClCA,UAAU;QACd;IACJ;AACJ,EAAE"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { RenderableCommand } from '../../commands/RenderableCommand.js';
|
3
|
+
import { TemplateName } from '../../types.js';
|
4
|
+
export declare class NewCommand extends RenderableCommand {
|
5
|
+
static paths: string[][];
|
6
|
+
static usage: import("clipanion").Usage;
|
7
|
+
name: string;
|
8
|
+
template: TemplateName;
|
9
|
+
render(): React.JSX.Element;
|
10
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
2
|
+
import React from 'react';
|
3
|
+
import * as t from 'typanion';
|
4
|
+
import { RenderableCommand } from '../../commands/RenderableCommand.js';
|
5
|
+
import { TemplateName } from '../../types.js';
|
6
|
+
import { New } from './components/New.js';
|
7
|
+
const defaultTemplate = TemplateName.Blank;
|
8
|
+
export class NewCommand extends RenderableCommand {
|
9
|
+
render() {
|
10
|
+
return /*#__PURE__*/ React.createElement(New, {
|
11
|
+
name: this.name,
|
12
|
+
template: this.template
|
13
|
+
});
|
14
|
+
}
|
15
|
+
constructor(...args){
|
16
|
+
super(...args);
|
17
|
+
this.name = Option.String({
|
18
|
+
name: 'name'
|
19
|
+
});
|
20
|
+
this.template = Option.String('-t,--template', defaultTemplate, {
|
21
|
+
description: `The template to use, defaults to "${defaultTemplate}"`,
|
22
|
+
validator: t.isEnum(TemplateName)
|
23
|
+
});
|
24
|
+
}
|
25
|
+
}
|
26
|
+
NewCommand.paths = [
|
27
|
+
[
|
28
|
+
'new'
|
29
|
+
]
|
30
|
+
];
|
31
|
+
NewCommand.usage = Command.Usage({
|
32
|
+
description: 'Create a new crankscript project'
|
33
|
+
});
|
34
|
+
|
35
|
+
//# sourceMappingURL=NewCommand.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/cli/src/commands/NewCommand/NewCommand.tsx"],"sourcesContent":["import { Command, Option } from 'clipanion';\nimport React from 'react';\nimport * as t from 'typanion';\nimport { RenderableCommand } from '@/cli/commands/RenderableCommand.js';\nimport { TemplateName } from '@/cli/types.js';\nimport { New } from './components/New.js';\n\nconst defaultTemplate = TemplateName.Blank;\n\nexport class NewCommand extends RenderableCommand {\n static override paths = [['new']];\n\n static override usage = Command.Usage({\n description: 'Create a new crankscript project',\n });\n\n name = Option.String({\n name: 'name',\n });\n\n template = Option.String('-t,--template', defaultTemplate, {\n description: `The template to use, defaults to \"${defaultTemplate}\"`,\n validator: t.isEnum(TemplateName),\n });\n\n override render() {\n return <New name={this.name} template={this.template} />;\n }\n}\n"],"names":["Command","Option","React","t","RenderableCommand","TemplateName","New","defaultTemplate","Blank","NewCommand","render","name","template","String","description","validator","isEnum","paths","usage","Usage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,YAAY;AAC5C,OAAOC,WAAW,QAAQ;AAC1B,YAAYC,OAAO,WAAW;AAC9B,SAASC,iBAAiB,QAAQ,sCAAsC;AACxE,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,GAAG,QAAQ,sBAAsB;AAE1C,MAAMC,kBAAkBF,aAAaG,KAAK;AAE1C,OAAO,MAAMC,mBAAmBL;IAgBnBM,SAAS;QACd,qBAAO,oBAACJ;YAAIK,MAAM,IAAI,CAACA,IAAI;YAAEC,UAAU,IAAI,CAACA,QAAQ;;IACxD;;;aAXAD,OAAOV,OAAOY,MAAM,CAAC;YACjBF,MAAM;QACV;aAEAC,WAAWX,OAAOY,MAAM,CAAC,iBAAiBN,iBAAiB;YACvDO,aAAa,CAAC,kCAAkC,EAAEP,gBAAgB,CAAC,CAAC;YACpEQ,WAAWZ,EAAEa,MAAM,CAACX;QACxB;;AAKJ;AAnBaI,WACOQ,QAAQ;IAAC;QAAC;KAAM;CAAC;AADxBR,WAGOS,QAAQlB,QAAQmB,KAAK,CAAC;IAClCL,aAAa;AACjB"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import React, { useMemo } from 'react';
|
2
|
+
import tiged from 'tiged';
|
3
|
+
import { CheckList } from '../../../components/CheckList/index.js';
|
4
|
+
export const New = ({ name, template })=>{
|
5
|
+
const items = useMemo(()=>{
|
6
|
+
return [
|
7
|
+
{
|
8
|
+
ready: true,
|
9
|
+
runner: async ()=>{
|
10
|
+
const task = tiged(`crankscript/template-${template}`);
|
11
|
+
await task.clone(name);
|
12
|
+
},
|
13
|
+
waitingDescription: `About to create a new project named "${name}" using the "${template}" template`,
|
14
|
+
runningDescription: `Creating a new project named "${name}" using the "${template}" template`,
|
15
|
+
finishedDescription: ()=>`Created a new project named "${name}" using the "${template}" template`,
|
16
|
+
errorDescription: `Failed to create project named "${name}" using the "${template}" template`
|
17
|
+
}
|
18
|
+
];
|
19
|
+
}, []);
|
20
|
+
return /*#__PURE__*/ React.createElement(CheckList, {
|
21
|
+
items: items,
|
22
|
+
onFinish: process.exit
|
23
|
+
});
|
24
|
+
};
|
25
|
+
|
26
|
+
//# sourceMappingURL=New.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/cli/src/commands/NewCommand/components/New.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport tiged from 'tiged';\nimport { CheckList } from '@/cli/components/CheckList/index.js';\nimport { CheckListItem, TemplateName } from '@/cli/types.js';\n\ninterface Props {\n name: string;\n template: TemplateName;\n}\n\nexport const New = ({ name, template }: Props) => {\n const items = useMemo(() => {\n return [\n {\n ready: true,\n runner: async () => {\n const task = tiged(`crankscript/template-${template}`);\n\n await task.clone(name);\n },\n waitingDescription: `About to create a new project named \"${name}\" using the \"${template}\" template`,\n runningDescription: `Creating a new project named \"${name}\" using the \"${template}\" template`,\n finishedDescription: () =>\n `Created a new project named \"${name}\" using the \"${template}\" template`,\n errorDescription: `Failed to create project named \"${name}\" using the \"${template}\" template`,\n },\n ];\n }, []) satisfies CheckListItem<unknown>[];\n\n return <CheckList items={items} onFinish={process.exit} />;\n};\n"],"names":["React","useMemo","tiged","CheckList","New","name","template","items","ready","runner","task","clone","waitingDescription","runningDescription","finishedDescription","errorDescription","onFinish","process","exit"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,SAASC,OAAO,QAAQ,QAAQ;AACvC,OAAOC,WAAW,QAAQ;AAC1B,SAASC,SAAS,QAAQ,sCAAsC;AAQhE,OAAO,MAAMC,MAAM,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAS;IACzC,MAAMC,QAAQN,QAAQ;QAClB,OAAO;YACH;gBACIO,OAAO;gBACPC,QAAQ;oBACJ,MAAMC,OAAOR,MAAM,CAAC,qBAAqB,EAAEI,SAAS,CAAC;oBAErD,MAAMI,KAAKC,KAAK,CAACN;gBACrB;gBACAO,oBAAoB,CAAC,qCAAqC,EAAEP,KAAK,aAAa,EAAEC,SAAS,UAAU,CAAC;gBACpGO,oBAAoB,CAAC,8BAA8B,EAAER,KAAK,aAAa,EAAEC,SAAS,UAAU,CAAC;gBAC7FQ,qBAAqB,IACjB,CAAC,6BAA6B,EAAET,KAAK,aAAa,EAAEC,SAAS,UAAU,CAAC;gBAC5ES,kBAAkB,CAAC,gCAAgC,EAAEV,KAAK,aAAa,EAAEC,SAAS,UAAU,CAAC;YACjG;SACH;IACL,GAAG,EAAE;IAEL,qBAAO,oBAACH;QAAUI,OAAOA;QAAOS,UAAUC,QAAQC,IAAI;;AAC1D,EAAE"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Command } from 'clipanion';
|
2
|
+
import { render } from 'ink';
|
3
|
+
export class RenderableCommand extends Command {
|
4
|
+
renderElement(element) {
|
5
|
+
render(element);
|
6
|
+
}
|
7
|
+
async execute() {
|
8
|
+
this.renderElement(this.render());
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
//# sourceMappingURL=RenderableCommand.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../libs/cli/src/commands/RenderableCommand.ts"],"sourcesContent":["import { Command } from 'clipanion';\nimport { render } from 'ink';\nimport { JSX } from 'react';\n\nexport abstract class RenderableCommand extends Command {\n protected abstract render(): JSX.Element;\n\n protected renderElement(element: JSX.Element) {\n render(element);\n }\n\n override async execute() {\n this.renderElement(this.render());\n }\n}\n"],"names":["Command","render","RenderableCommand","renderElement","element","execute"],"rangeMappings":";;;;;;;;;","mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AACpC,SAASC,MAAM,QAAQ,MAAM;AAG7B,OAAO,MAAeC,0BAA0BF;IAGlCG,cAAcC,OAAoB,EAAE;QAC1CH,OAAOG;IACX;IAEA,MAAeC,UAAU;QACrB,IAAI,CAACF,aAAa,CAAC,IAAI,CAACF,MAAM;IAClC;AACJ"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { EnvironmentAwareCommand } from '../../commands/EnvironmentAwareCommand/index.js';
|
3
|
+
import { Environment } from '../../environment/dto/Environment.js';
|
4
|
+
export declare class SimulatorCommand extends EnvironmentAwareCommand {
|
5
|
+
static paths: string[][];
|
6
|
+
static usage: import("clipanion").Usage;
|
7
|
+
watch: boolean;
|
8
|
+
compileOnly: boolean;
|
9
|
+
background: boolean;
|
10
|
+
projectPath: string;
|
11
|
+
renderWithEnvironment(environment: Environment): React.JSX.Element;
|
12
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { Command, Option } from 'clipanion';
|
2
|
+
import React from 'react';
|
3
|
+
import { EnvironmentAwareCommand } from '../../commands/EnvironmentAwareCommand/index.js';
|
4
|
+
import { Simulator } from '../../commands/SimulatorCommand/components/Simulator.js';
|
5
|
+
import { projectPathOption } from '../../commands/TranspileCommand/index.js';
|
6
|
+
export class SimulatorCommand extends EnvironmentAwareCommand {
|
7
|
+
renderWithEnvironment(environment) {
|
8
|
+
return /*#__PURE__*/ React.createElement(Simulator, {
|
9
|
+
environment: environment,
|
10
|
+
path: this.projectPath,
|
11
|
+
watch: this.watch,
|
12
|
+
recompileOnly: this.compileOnly,
|
13
|
+
background: this.background
|
14
|
+
});
|
15
|
+
}
|
16
|
+
constructor(...args){
|
17
|
+
super(...args);
|
18
|
+
this.watch = Option.Boolean('-w,--watch', false, {
|
19
|
+
description: 'Watch for changes'
|
20
|
+
});
|
21
|
+
this.compileOnly = Option.Boolean('-c,--compile-only', false, {
|
22
|
+
description: 'Use with --watch to only recompile without launching the simulator'
|
23
|
+
});
|
24
|
+
this.background = Option.Boolean('-b,--background', false, {
|
25
|
+
description: 'Do not bring simulator to foreground'
|
26
|
+
});
|
27
|
+
this.projectPath = projectPathOption;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
SimulatorCommand.paths = [
|
31
|
+
[
|
32
|
+
'simulator'
|
33
|
+
]
|
34
|
+
];
|
35
|
+
SimulatorCommand.usage = Command.Usage({
|
36
|
+
description: 'Transpile, compile, and run the simulator'
|
37
|
+
});
|
38
|
+
|
39
|
+
//# sourceMappingURL=SimulatorCommand.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/cli/src/commands/SimulatorCommand/SimulatorCommand.tsx"],"sourcesContent":["import { Command, Option } from 'clipanion';\nimport React from 'react';\nimport { EnvironmentAwareCommand } from '@/cli/commands/EnvironmentAwareCommand/index.js';\nimport { Simulator } from '@/cli/commands/SimulatorCommand/components/Simulator.js';\nimport { projectPathOption } from '@/cli/commands/TranspileCommand/index.js';\nimport { Environment } from '@/cli/environment/dto/Environment.js';\n\nexport class SimulatorCommand extends EnvironmentAwareCommand {\n static override paths = [['simulator']];\n\n static override usage = Command.Usage({\n description: 'Transpile, compile, and run the simulator',\n });\n\n watch = Option.Boolean('-w,--watch', false, {\n description: 'Watch for changes',\n });\n\n compileOnly = Option.Boolean('-c,--compile-only', false, {\n description:\n 'Use with --watch to only recompile without launching the simulator',\n });\n\n background = Option.Boolean('-b,--background', false, {\n description: 'Do not bring simulator to foreground',\n });\n\n projectPath = projectPathOption;\n\n override renderWithEnvironment(environment: Environment) {\n return (\n <Simulator\n environment={environment}\n path={this.projectPath}\n watch={this.watch}\n recompileOnly={this.compileOnly}\n background={this.background}\n />\n );\n }\n}\n"],"names":["Command","Option","React","EnvironmentAwareCommand","Simulator","projectPathOption","SimulatorCommand","renderWithEnvironment","environment","path","projectPath","watch","recompileOnly","compileOnly","background","Boolean","description","paths","usage","Usage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,YAAY;AAC5C,OAAOC,WAAW,QAAQ;AAC1B,SAASC,uBAAuB,QAAQ,kDAAkD;AAC1F,SAASC,SAAS,QAAQ,0DAA0D;AACpF,SAASC,iBAAiB,QAAQ,2CAA2C;AAG7E,OAAO,MAAMC,yBAAyBH;IAsBzBI,sBAAsBC,WAAwB,EAAE;QACrD,qBACI,oBAACJ;YACGI,aAAaA;YACbC,MAAM,IAAI,CAACC,WAAW;YACtBC,OAAO,IAAI,CAACA,KAAK;YACjBC,eAAe,IAAI,CAACC,WAAW;YAC/BC,YAAY,IAAI,CAACA,UAAU;;IAGvC;;;aAzBAH,QAAQV,OAAOc,OAAO,CAAC,cAAc,OAAO;YACxCC,aAAa;QACjB;aAEAH,cAAcZ,OAAOc,OAAO,CAAC,qBAAqB,OAAO;YACrDC,aACI;QACR;aAEAF,aAAab,OAAOc,OAAO,CAAC,mBAAmB,OAAO;YAClDC,aAAa;QACjB;aAEAN,cAAcL;;AAalB;AAjCaC,iBACOW,QAAQ;IAAC;QAAC;KAAY;CAAC;AAD9BX,iBAGOY,QAAQlB,QAAQmB,KAAK,CAAC;IAClCH,aAAa;AACjB"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { Environment } from '../../../environment/dto/Environment.js';
|
3
|
+
interface Props {
|
4
|
+
environment: Environment;
|
5
|
+
path: string;
|
6
|
+
watch?: boolean;
|
7
|
+
recompileOnly?: boolean;
|
8
|
+
background?: boolean;
|
9
|
+
}
|
10
|
+
export declare const Simulator: ({ environment, path, watch, recompileOnly, background, }: Props) => React.JSX.Element;
|
11
|
+
export {};
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import { watch as watchDir } from 'node:fs';
|
2
|
+
import { platform } from 'node:os';
|
3
|
+
import { join } from 'node:path';
|
4
|
+
import { StatusMessage } from '@inkjs/ui';
|
5
|
+
import open from 'open';
|
6
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
7
|
+
import { getPdcPathFromEnvironment } from '../../../commands/CompileCommand/fn/getPdcPathFromEnvironment.js';
|
8
|
+
import { getSimulatorPathFromEnvironment } from '../../../commands/CompileCommand/fn/getSimulatorPathFromEnvironment.js';
|
9
|
+
import { useCompileTasks } from '../../../commands/CompileCommand/hooks/useCompileTasks.js';
|
10
|
+
import { useTranspileTasks } from '../../../commands/TranspileCommand/hooks/useTranspileTasks.js';
|
11
|
+
import { CheckList } from '../../../components/CheckList/index.js';
|
12
|
+
const platformName = platform();
|
13
|
+
export const Simulator = ({ environment, path, watch = false, recompileOnly = false, background = false })=>{
|
14
|
+
const watcher = useRef(null);
|
15
|
+
const [isWatching, setIsWatching] = useState(false);
|
16
|
+
const [hasChanged, setHasChanged] = useState(false);
|
17
|
+
const [hasChangedMessage, setHasChangedMessage] = useState(false);
|
18
|
+
const transpileTasks = useTranspileTasks(path);
|
19
|
+
const compileTasks = useCompileTasks(getPdcPathFromEnvironment(environment));
|
20
|
+
const hasRun = useRef(false);
|
21
|
+
useEffect(()=>{
|
22
|
+
if (hasChanged) {
|
23
|
+
setHasChanged(false);
|
24
|
+
}
|
25
|
+
}, [
|
26
|
+
hasChanged,
|
27
|
+
setHasChanged
|
28
|
+
]);
|
29
|
+
const handleFinish = useCallback(()=>{
|
30
|
+
if (hasRun.current && recompileOnly) {
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
hasRun.current = true;
|
34
|
+
open('Game.pdx', {
|
35
|
+
background,
|
36
|
+
app: platformName === 'linux' ? {
|
37
|
+
name: getSimulatorPathFromEnvironment(environment)
|
38
|
+
} : undefined
|
39
|
+
}).then(()=>{
|
40
|
+
if (!watch) {
|
41
|
+
process.exit();
|
42
|
+
}
|
43
|
+
setHasChangedMessage(false);
|
44
|
+
if (watcher.current) {
|
45
|
+
watcher.current.close();
|
46
|
+
}
|
47
|
+
setIsWatching(true);
|
48
|
+
watcher.current = watchDir(join(path, 'src'), {
|
49
|
+
recursive: true
|
50
|
+
}, ()=>{
|
51
|
+
setHasChanged(true);
|
52
|
+
setHasChangedMessage(true);
|
53
|
+
setIsWatching(false);
|
54
|
+
});
|
55
|
+
});
|
56
|
+
}, [
|
57
|
+
watch,
|
58
|
+
setHasChanged,
|
59
|
+
setIsWatching
|
60
|
+
]);
|
61
|
+
const tasks = useMemo(()=>{
|
62
|
+
return [
|
63
|
+
...transpileTasks,
|
64
|
+
...compileTasks
|
65
|
+
];
|
66
|
+
}, [
|
67
|
+
transpileTasks,
|
68
|
+
compileTasks
|
69
|
+
]);
|
70
|
+
return /*#__PURE__*/ React.createElement(React.Fragment, null, !hasChanged && /*#__PURE__*/ React.createElement(CheckList, {
|
71
|
+
items: tasks,
|
72
|
+
onFinish: handleFinish
|
73
|
+
}), isWatching && !hasChangedMessage && /*#__PURE__*/ React.createElement(StatusMessage, {
|
74
|
+
variant: "info"
|
75
|
+
}, "Watching for changes..."), hasChangedMessage && /*#__PURE__*/ React.createElement(StatusMessage, {
|
76
|
+
variant: "info"
|
77
|
+
}, "Change detected"));
|
78
|
+
};
|
79
|
+
|
80
|
+
//# sourceMappingURL=Simulator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/cli/src/commands/SimulatorCommand/components/Simulator.tsx"],"sourcesContent":["import { FSWatcher, watch as watchDir } from 'node:fs';\nimport { platform } from 'node:os';\nimport { join } from 'node:path';\nimport { StatusMessage } from '@inkjs/ui';\nimport open from 'open';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { getPdcPathFromEnvironment } from '@/cli/commands/CompileCommand/fn/getPdcPathFromEnvironment.js';\nimport { getSimulatorPathFromEnvironment } from '@/cli/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.js';\nimport { useCompileTasks } from '@/cli/commands/CompileCommand/hooks/useCompileTasks.js';\nimport { useTranspileTasks } from '@/cli/commands/TranspileCommand/hooks/useTranspileTasks.js';\nimport { CheckList } from '@/cli/components/CheckList/index.js';\nimport { Environment } from '@/cli/environment/dto/Environment.js';\n\ninterface Props {\n environment: Environment;\n path: string;\n watch?: boolean;\n recompileOnly?: boolean;\n background?: boolean;\n}\n\nconst platformName = platform();\n\nexport const Simulator = ({\n environment,\n path,\n watch = false,\n recompileOnly = false,\n background = false,\n}: Props) => {\n const watcher = useRef<FSWatcher | null>(null);\n const [isWatching, setIsWatching] = useState(false);\n const [hasChanged, setHasChanged] = useState(false);\n const [hasChangedMessage, setHasChangedMessage] = useState(false);\n const transpileTasks = useTranspileTasks(path);\n const compileTasks = useCompileTasks(\n getPdcPathFromEnvironment(environment)\n );\n const hasRun = useRef(false);\n\n useEffect(() => {\n if (hasChanged) {\n setHasChanged(false);\n }\n }, [hasChanged, setHasChanged]);\n\n const handleFinish = useCallback(() => {\n if (hasRun.current && recompileOnly) {\n return;\n }\n\n hasRun.current = true;\n\n open('Game.pdx', {\n background,\n app:\n platformName === 'linux'\n ? {\n name: getSimulatorPathFromEnvironment(environment),\n }\n : undefined,\n }).then(() => {\n if (!watch) {\n process.exit();\n }\n\n setHasChangedMessage(false);\n\n if (watcher.current) {\n watcher.current.close();\n }\n\n setIsWatching(true);\n\n watcher.current = watchDir(\n join(path, 'src'),\n { recursive: true },\n () => {\n setHasChanged(true);\n setHasChangedMessage(true);\n setIsWatching(false);\n }\n );\n });\n }, [watch, setHasChanged, setIsWatching]);\n\n const tasks = useMemo(() => {\n return [...transpileTasks, ...compileTasks];\n }, [transpileTasks, compileTasks]);\n\n return (\n <>\n {!hasChanged && <CheckList items={tasks} onFinish={handleFinish} />}\n {isWatching && !hasChangedMessage && (\n <StatusMessage variant=\"info\">\n Watching for changes...\n </StatusMessage>\n )}\n {hasChangedMessage && (\n <StatusMessage variant=\"info\">Change detected</StatusMessage>\n )}\n </>\n );\n};\n"],"names":["watch","watchDir","platform","join","StatusMessage","open","React","useCallback","useEffect","useMemo","useRef","useState","getPdcPathFromEnvironment","getSimulatorPathFromEnvironment","useCompileTasks","useTranspileTasks","CheckList","platformName","Simulator","environment","path","recompileOnly","background","watcher","isWatching","setIsWatching","hasChanged","setHasChanged","hasChangedMessage","setHasChangedMessage","transpileTasks","compileTasks","hasRun","handleFinish","current","app","name","undefined","then","process","exit","close","recursive","tasks","items","onFinish","variant"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAAoBA,SAASC,QAAQ,QAAQ,UAAU;AACvD,SAASC,QAAQ,QAAQ,UAAU;AACnC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,aAAa,QAAQ,YAAY;AAC1C,OAAOC,UAAU,OAAO;AACxB,OAAOC,SACHC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACL,QAAQ;AACf,SAASC,yBAAyB,QAAQ,gEAAgE;AAC1G,SAASC,+BAA+B,QAAQ,sEAAsE;AACtH,SAASC,eAAe,QAAQ,yDAAyD;AACzF,SAASC,iBAAiB,QAAQ,6DAA6D;AAC/F,SAASC,SAAS,QAAQ,sCAAsC;AAWhE,MAAMC,eAAef;AAErB,OAAO,MAAMgB,YAAY,CAAC,EACtBC,WAAW,EACXC,IAAI,EACJpB,QAAQ,KAAK,EACbqB,gBAAgB,KAAK,EACrBC,aAAa,KAAK,EACd;IACJ,MAAMC,UAAUb,OAAyB;IACzC,MAAM,CAACc,YAAYC,cAAc,GAAGd,SAAS;IAC7C,MAAM,CAACe,YAAYC,cAAc,GAAGhB,SAAS;IAC7C,MAAM,CAACiB,mBAAmBC,qBAAqB,GAAGlB,SAAS;IAC3D,MAAMmB,iBAAiBf,kBAAkBK;IACzC,MAAMW,eAAejB,gBACjBF,0BAA0BO;IAE9B,MAAMa,SAAStB,OAAO;IAEtBF,UAAU;QACN,IAAIkB,YAAY;YACZC,cAAc;QAClB;IACJ,GAAG;QAACD;QAAYC;KAAc;IAE9B,MAAMM,eAAe1B,YAAY;QAC7B,IAAIyB,OAAOE,OAAO,IAAIb,eAAe;YACjC;QACJ;QAEAW,OAAOE,OAAO,GAAG;QAEjB7B,KAAK,YAAY;YACbiB;YACAa,KACIlB,iBAAiB,UACX;gBACImB,MAAMvB,gCAAgCM;YAC1C,IACAkB;QACd,GAAGC,IAAI,CAAC;YACJ,IAAI,CAACtC,OAAO;gBACRuC,QAAQC,IAAI;YAChB;YAEAX,qBAAqB;YAErB,IAAIN,QAAQW,OAAO,EAAE;gBACjBX,QAAQW,OAAO,CAACO,KAAK;YACzB;YAEAhB,cAAc;YAEdF,QAAQW,OAAO,GAAGjC,SACdE,KAAKiB,MAAM,QACX;gBAAEsB,WAAW;YAAK,GAClB;gBACIf,cAAc;gBACdE,qBAAqB;gBACrBJ,cAAc;YAClB;QAER;IACJ,GAAG;QAACzB;QAAO2B;QAAeF;KAAc;IAExC,MAAMkB,QAAQlC,QAAQ;QAClB,OAAO;eAAIqB;eAAmBC;SAAa;IAC/C,GAAG;QAACD;QAAgBC;KAAa;IAEjC,qBACI,0CACK,CAACL,4BAAc,oBAACV;QAAU4B,OAAOD;QAAOE,UAAUZ;QAClDT,cAAc,CAACI,mCACZ,oBAACxB;QAAc0C,SAAQ;OAAO,4BAIjClB,mCACG,oBAACxB;QAAc0C,SAAQ;OAAO;AAI9C,EAAE"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './SimulatorCommand.js';
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/cli/src/commands/SimulatorCommand/index.ts"],"sourcesContent":["export * from './SimulatorCommand.js';\n"],"names":[],"rangeMappings":"","mappings":"AAAA,cAAc,wBAAwB"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { RenderableCommand } from '../../commands/RenderableCommand.js';
|
3
|
+
export declare const projectPathOption: string;
|
4
|
+
export declare class TranspileCommand extends RenderableCommand {
|
5
|
+
static paths: string[][];
|
6
|
+
static usage: import("clipanion").Usage;
|
7
|
+
projectPath: string;
|
8
|
+
render(): React.JSX.Element;
|
9
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import process from 'node:process';
|
2
|
+
import { Command, Option } from 'clipanion';
|
3
|
+
import React from 'react';
|
4
|
+
import * as t from 'typanion';
|
5
|
+
import { RenderableCommand } from '../../commands/RenderableCommand.js';
|
6
|
+
import { Transpile } from '../../commands/TranspileCommand/components/Transpile.js';
|
7
|
+
export const projectPathOption = Option.String('-p,--path', process.cwd(), {
|
8
|
+
description: `Where to find the project. Defaults to the current working directory ("${process.cwd()}")`,
|
9
|
+
validator: t.isString()
|
10
|
+
});
|
11
|
+
export class TranspileCommand extends RenderableCommand {
|
12
|
+
render() {
|
13
|
+
return /*#__PURE__*/ React.createElement(Transpile, {
|
14
|
+
path: this.projectPath
|
15
|
+
});
|
16
|
+
}
|
17
|
+
constructor(...args){
|
18
|
+
super(...args);
|
19
|
+
this.projectPath = projectPathOption;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
TranspileCommand.paths = [
|
23
|
+
[
|
24
|
+
'transpile'
|
25
|
+
]
|
26
|
+
];
|
27
|
+
TranspileCommand.usage = Command.Usage({
|
28
|
+
description: 'Transpile TypeScript files to Lua'
|
29
|
+
});
|
30
|
+
|
31
|
+
//# sourceMappingURL=TranspileCommand.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../../../../../libs/cli/src/commands/TranspileCommand/TranspileCommand.tsx"],"sourcesContent":["import process from 'node:process';\nimport { Command, Option } from 'clipanion';\nimport React from 'react';\nimport * as t from 'typanion';\nimport { RenderableCommand } from '@/cli/commands/RenderableCommand.js';\nimport { Transpile } from '@/cli/commands/TranspileCommand/components/Transpile.js';\n\nexport const projectPathOption = Option.String('-p,--path', process.cwd(), {\n description: `Where to find the project. Defaults to the current working directory (\"${process.cwd()}\")`,\n validator: t.isString(),\n});\n\nexport class TranspileCommand extends RenderableCommand {\n static override paths = [['transpile']];\n\n static override usage = Command.Usage({\n description: 'Transpile TypeScript files to Lua',\n });\n\n projectPath = projectPathOption;\n\n override render() {\n return <Transpile path={this.projectPath} />;\n }\n}\n"],"names":["process","Command","Option","React","t","RenderableCommand","Transpile","projectPathOption","String","cwd","description","validator","isString","TranspileCommand","render","path","projectPath","paths","usage","Usage"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,aAAa,eAAe;AACnC,SAASC,OAAO,EAAEC,MAAM,QAAQ,YAAY;AAC5C,OAAOC,WAAW,QAAQ;AAC1B,YAAYC,OAAO,WAAW;AAC9B,SAASC,iBAAiB,QAAQ,sCAAsC;AACxE,SAASC,SAAS,QAAQ,0DAA0D;AAEpF,OAAO,MAAMC,oBAAoBL,OAAOM,MAAM,CAAC,aAAaR,QAAQS,GAAG,IAAI;IACvEC,aAAa,CAAC,uEAAuE,EAAEV,QAAQS,GAAG,GAAG,EAAE,CAAC;IACxGE,WAAWP,EAAEQ,QAAQ;AACzB,GAAG;AAEH,OAAO,MAAMC,yBAAyBR;IASzBS,SAAS;QACd,qBAAO,oBAACR;YAAUS,MAAM,IAAI,CAACC,WAAW;;IAC5C;;;aAJAA,cAAcT;;AAKlB;AAZaM,iBACOI,QAAQ;IAAC;QAAC;KAAY;CAAC;AAD9BJ,iBAGOK,QAAQjB,QAAQkB,KAAK,CAAC;IAClCT,aAAa;AACjB"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useTranspileTasks } from '../../../commands/TranspileCommand/hooks/useTranspileTasks.js';
|
3
|
+
import { CheckList } from '../../../components/CheckList/index.js';
|
4
|
+
export const Transpile = ({ path })=>{
|
5
|
+
const items = useTranspileTasks(path);
|
6
|
+
return /*#__PURE__*/ React.createElement(CheckList, {
|
7
|
+
items: items,
|
8
|
+
onFinish: process.exit
|
9
|
+
});
|
10
|
+
};
|
11
|
+
|
12
|
+
//# sourceMappingURL=Transpile.js.map
|