crankscript 0.0.6 → 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.
Files changed (156) hide show
  1. package/README.md +1 -11
  2. package/assets/package.json +4 -0
  3. package/assets/plugin.js +260 -0
  4. package/assets/plugin.ts +372 -0
  5. package/assets/tsconfig.json +10 -0
  6. package/package.json +30 -17
  7. package/src/commands/CompileCommand/CompileCommand.d.ts +8 -0
  8. package/src/commands/CompileCommand/CompileCommand.js +21 -0
  9. package/src/commands/CompileCommand/CompileCommand.js.map +1 -0
  10. package/src/commands/CompileCommand/components/Compile.d.ts +7 -0
  11. package/src/commands/CompileCommand/components/Compile.js +14 -0
  12. package/src/commands/CompileCommand/components/Compile.js.map +1 -0
  13. package/src/commands/CompileCommand/fn/getPdcPathFromEnvironment.d.ts +2 -0
  14. package/src/commands/CompileCommand/fn/getPdcPathFromEnvironment.js +6 -0
  15. package/src/commands/CompileCommand/fn/getPdcPathFromEnvironment.js.map +1 -0
  16. package/src/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.d.ts +2 -0
  17. package/src/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.js +6 -0
  18. package/src/commands/CompileCommand/fn/getSimulatorPathFromEnvironment.js.map +1 -0
  19. package/src/commands/CompileCommand/hooks/useCompileTasks.d.ts +2 -0
  20. package/src/commands/CompileCommand/hooks/useCompileTasks.js +60 -0
  21. package/src/commands/CompileCommand/hooks/useCompileTasks.js.map +1 -0
  22. package/src/commands/CompileCommand/index.d.ts +1 -0
  23. package/src/commands/CompileCommand/index.js +3 -0
  24. package/src/commands/CompileCommand/index.js.map +1 -0
  25. package/src/commands/DoctorCommand.d.ts +7 -0
  26. package/src/commands/DoctorCommand.js +26 -0
  27. package/src/commands/DoctorCommand.js.map +1 -0
  28. package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.d.ts +9 -0
  29. package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.js +25 -0
  30. package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.js.map +1 -0
  31. package/src/commands/EnvironmentAwareCommand/components/HealthReport.d.ts +7 -0
  32. package/src/commands/EnvironmentAwareCommand/components/HealthReport.js +41 -0
  33. package/src/commands/EnvironmentAwareCommand/components/HealthReport.js.map +1 -0
  34. package/src/commands/EnvironmentAwareCommand/index.d.ts +1 -0
  35. package/src/commands/EnvironmentAwareCommand/index.js +3 -0
  36. package/src/commands/EnvironmentAwareCommand/index.js.map +1 -0
  37. package/src/commands/GenerateTypes/GenerateTypesCommand.d.ts +10 -0
  38. package/src/commands/GenerateTypes/GenerateTypesCommand.js +45 -0
  39. package/src/commands/GenerateTypes/GenerateTypesCommand.js.map +1 -0
  40. package/src/commands/GenerateTypes/components/GenerateTypes.d.ts +9 -0
  41. package/src/commands/GenerateTypes/components/GenerateTypes.js +36 -0
  42. package/src/commands/GenerateTypes/components/GenerateTypes.js.map +1 -0
  43. package/src/commands/GenerateTypes/constants.d.ts +1 -0
  44. package/src/commands/GenerateTypes/constants.js +3 -0
  45. package/src/commands/GenerateTypes/constants.js.map +1 -0
  46. package/src/commands/GenerateTypes/fn/getApiDefinitions.d.ts +2 -0
  47. package/src/commands/GenerateTypes/fn/getApiDefinitions.js +39 -0
  48. package/src/commands/GenerateTypes/fn/getApiDefinitions.js.map +1 -0
  49. package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.d.ts +5 -0
  50. package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.js +78 -0
  51. package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.js.map +1 -0
  52. package/src/commands/GenerateTypes/fn/getFunctionTypeOverride.d.ts +1 -0
  53. package/src/commands/GenerateTypes/fn/getFunctionTypeOverride.js +7 -0
  54. package/src/commands/GenerateTypes/fn/getFunctionTypeOverride.js.map +1 -0
  55. package/src/commands/GenerateTypes/fn/getHtmlForVersion.d.ts +1 -0
  56. package/src/commands/GenerateTypes/fn/getHtmlForVersion.js +21 -0
  57. package/src/commands/GenerateTypes/fn/getHtmlForVersion.js.map +1 -0
  58. package/src/commands/GenerateTypes/fn/parseFunctionSignature.d.ts +10 -0
  59. package/src/commands/GenerateTypes/fn/parseFunctionSignature.js +22 -0
  60. package/src/commands/GenerateTypes/fn/parseFunctionSignature.js.map +1 -0
  61. package/src/commands/GenerateTypes/hooks/useFetchHtml.d.ts +12 -0
  62. package/src/commands/GenerateTypes/hooks/useFetchHtml.js +31 -0
  63. package/src/commands/GenerateTypes/hooks/useFetchHtml.js.map +1 -0
  64. package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.d.ts +12 -0
  65. package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.js +126 -0
  66. package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.js.map +1 -0
  67. package/src/commands/GenerateTypes/hooks/useGetVersion.d.ts +53 -0
  68. package/src/commands/GenerateTypes/hooks/useGetVersion.js +52 -0
  69. package/src/commands/GenerateTypes/hooks/useGetVersion.js.map +1 -0
  70. package/src/commands/GenerateTypes/hooks/useParseDocumentation.d.ts +13 -0
  71. package/src/commands/GenerateTypes/hooks/useParseDocumentation.js +34 -0
  72. package/src/commands/GenerateTypes/hooks/useParseDocumentation.js.map +1 -0
  73. package/src/commands/GenerateTypes/index.d.ts +1 -0
  74. package/src/commands/GenerateTypes/index.js +3 -0
  75. package/src/commands/GenerateTypes/index.js.map +1 -0
  76. package/src/commands/GenerateTypes/utils/createTypeProvider.d.ts +43 -0
  77. package/src/commands/GenerateTypes/utils/createTypeProvider.js +156 -0
  78. package/src/commands/GenerateTypes/utils/createTypeProvider.js.map +1 -0
  79. package/src/commands/GenerateTypes/utils/functionTypeOverrides.d.ts +2 -0
  80. package/src/commands/GenerateTypes/utils/functionTypeOverrides.js +18 -0
  81. package/src/commands/GenerateTypes/utils/functionTypeOverrides.js.map +1 -0
  82. package/src/commands/NewCommand/NewCommand.d.ts +10 -0
  83. package/src/commands/NewCommand/NewCommand.js +35 -0
  84. package/src/commands/NewCommand/NewCommand.js.map +1 -0
  85. package/src/commands/NewCommand/components/New.d.ts +8 -0
  86. package/src/commands/NewCommand/components/New.js +26 -0
  87. package/src/commands/NewCommand/components/New.js.map +1 -0
  88. package/src/commands/RenderableCommand.d.ts +7 -0
  89. package/src/commands/RenderableCommand.js +12 -0
  90. package/src/commands/RenderableCommand.js.map +1 -0
  91. package/src/commands/SimulatorCommand/SimulatorCommand.d.ts +12 -0
  92. package/src/commands/SimulatorCommand/SimulatorCommand.js +39 -0
  93. package/src/commands/SimulatorCommand/SimulatorCommand.js.map +1 -0
  94. package/src/commands/SimulatorCommand/components/Simulator.d.ts +11 -0
  95. package/src/commands/SimulatorCommand/components/Simulator.js +80 -0
  96. package/src/commands/SimulatorCommand/components/Simulator.js.map +1 -0
  97. package/src/commands/SimulatorCommand/index.d.ts +1 -0
  98. package/src/commands/SimulatorCommand/index.js +3 -0
  99. package/src/commands/SimulatorCommand/index.js.map +1 -0
  100. package/src/commands/TranspileCommand/TranspileCommand.d.ts +9 -0
  101. package/src/commands/TranspileCommand/TranspileCommand.js +31 -0
  102. package/src/commands/TranspileCommand/TranspileCommand.js.map +1 -0
  103. package/src/commands/TranspileCommand/components/Transpile.d.ts +6 -0
  104. package/src/commands/TranspileCommand/components/Transpile.js +12 -0
  105. package/src/commands/TranspileCommand/components/Transpile.js.map +1 -0
  106. package/src/commands/TranspileCommand/fn/transpile.d.ts +1 -0
  107. package/src/commands/TranspileCommand/fn/transpile.js +19 -0
  108. package/src/commands/TranspileCommand/fn/transpile.js.map +1 -0
  109. package/src/commands/TranspileCommand/hooks/useTranspileTasks.d.ts +2 -0
  110. package/src/commands/TranspileCommand/hooks/useTranspileTasks.js +18 -0
  111. package/src/commands/TranspileCommand/hooks/useTranspileTasks.js.map +1 -0
  112. package/src/commands/TranspileCommand/index.d.ts +1 -0
  113. package/src/commands/TranspileCommand/index.js +3 -0
  114. package/src/commands/TranspileCommand/index.js.map +1 -0
  115. package/src/components/CheckList/CheckList.d.ts +8 -0
  116. package/src/components/CheckList/CheckList.js +34 -0
  117. package/src/components/CheckList/CheckList.js.map +1 -0
  118. package/src/components/CheckList/Item.d.ts +7 -0
  119. package/src/components/CheckList/Item.js +87 -0
  120. package/src/components/CheckList/Item.js.map +1 -0
  121. package/src/components/CheckList/index.d.ts +1 -0
  122. package/src/components/CheckList/index.js +3 -0
  123. package/src/components/CheckList/index.js.map +1 -0
  124. package/src/components/Spinner.d.ts +3 -0
  125. package/src/components/Spinner.js +26 -0
  126. package/src/components/Spinner.js.map +1 -0
  127. package/src/constants.d.ts +3 -0
  128. package/src/constants.js +11 -0
  129. package/src/constants.js.map +1 -0
  130. package/src/environment/createEnvironment.d.ts +12 -0
  131. package/src/environment/createEnvironment.js +37 -0
  132. package/src/environment/createEnvironment.js.map +1 -0
  133. package/src/environment/dto/Environment.d.ts +7 -0
  134. package/src/environment/dto/Environment.js +7 -0
  135. package/src/environment/dto/Environment.js.map +1 -0
  136. package/src/environment/error/EnvironmentError.d.ts +2 -0
  137. package/src/environment/error/EnvironmentError.js +4 -0
  138. package/src/environment/error/EnvironmentError.js.map +1 -0
  139. package/src/environment/path/dto/PlaydateSdkPath.d.ts +5 -0
  140. package/src/environment/path/dto/PlaydateSdkPath.js +10 -0
  141. package/src/environment/path/dto/PlaydateSdkPath.js.map +1 -0
  142. package/src/environment/path/error/PlaydateSdkPathVariableNotSetError.d.ts +4 -0
  143. package/src/environment/path/error/PlaydateSdkPathVariableNotSetError.js +8 -0
  144. package/src/environment/path/error/PlaydateSdkPathVariableNotSetError.js.map +1 -0
  145. package/src/environment/path/getPlaydateSdkPath.d.ts +14 -0
  146. package/src/environment/path/getPlaydateSdkPath.js +16 -0
  147. package/src/environment/path/getPlaydateSdkPath.js.map +1 -0
  148. package/src/index.d.ts +1 -1
  149. package/src/index.js +30 -11
  150. package/src/index.js.map +1 -1
  151. package/src/types.d.ts +96 -0
  152. package/src/types.js +16 -0
  153. package/src/types.js.map +1 -0
  154. package/src/utils/dirname.d.ts +1 -0
  155. package/src/utils/dirname.js +5 -0
  156. 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,2 @@
1
+ import { FunctionTypeOverrideMap } from '../../../types.js';
2
+ export declare const functionTypeOverrides: Record<string, FunctionTypeOverrideMap>;
@@ -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,8 @@
1
+ import React from 'react';
2
+ import { TemplateName } from '../../../types.js';
3
+ interface Props {
4
+ name: string;
5
+ template: TemplateName;
6
+ }
7
+ export declare const New: ({ name, template }: Props) => React.JSX.Element;
8
+ export {};
@@ -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,7 @@
1
+ import { Command } from 'clipanion';
2
+ import { JSX } from 'react';
3
+ export declare abstract class RenderableCommand extends Command {
4
+ protected abstract render(): JSX.Element;
5
+ protected renderElement(element: JSX.Element): void;
6
+ execute(): Promise<void>;
7
+ }
@@ -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,3 @@
1
+ export * from './SimulatorCommand.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ path: string;
4
+ }
5
+ export declare const Transpile: ({ path }: Props) => React.JSX.Element;
6
+ export {};
@@ -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