crankscript 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -11
- package/package.json +4 -2
- package/src/commands/CompileCommand/CompileCommand.d.ts +7 -0
- package/src/commands/CompileCommand/CompileCommand.js +49 -0
- package/src/commands/CompileCommand/CompileCommand.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/CompileCommand/plugin.js +168 -0
- package/src/commands/CompileCommand/plugin.js.map +1 -0
- package/src/commands/GenerateTypes/GenerateTypesCommand.d.ts +1 -0
- package/src/commands/GenerateTypes/GenerateTypesCommand.js +5 -1
- package/src/commands/GenerateTypes/GenerateTypesCommand.js.map +1 -1
- package/src/commands/GenerateTypes/components/GenerateTypes.d.ts +2 -1
- package/src/commands/GenerateTypes/components/GenerateTypes.js +11 -5
- package/src/commands/GenerateTypes/components/GenerateTypes.js.map +1 -1
- package/src/commands/GenerateTypes/fn/generateFunction.d.ts +4 -0
- package/src/commands/GenerateTypes/fn/generateFunction.js +28 -0
- package/src/commands/GenerateTypes/fn/generateFunction.js.map +1 -0
- package/src/commands/GenerateTypes/fn/generateNamespace.d.ts +4 -3
- package/src/commands/GenerateTypes/fn/generateNamespace.js +68 -21
- package/src/commands/GenerateTypes/fn/generateNamespace.js.map +1 -1
- package/src/commands/GenerateTypes/fn/getApiDefinitions.d.ts +2 -11
- package/src/commands/GenerateTypes/fn/getApiDefinitions.js +26 -9
- package/src/commands/GenerateTypes/fn/getApiDefinitions.js.map +1 -1
- package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.d.ts +5 -0
- package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.js +75 -0
- package/src/commands/GenerateTypes/fn/getDescriptionsFromHtml.js.map +1 -0
- package/src/commands/GenerateTypes/fn/parseFunctionSignature.d.ts +1 -1
- package/src/commands/GenerateTypes/fn/parseFunctionSignature.js +4 -6
- package/src/commands/GenerateTypes/fn/parseFunctionSignature.js.map +1 -1
- package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.d.ts +2 -1
- package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.js +14 -23
- package/src/commands/GenerateTypes/hooks/useGenerateTypeFile.js.map +1 -1
- package/src/commands/GenerateTypes/hooks/useGetVersion.d.ts +10 -0
- package/src/commands/GenerateTypes/hooks/useGetVersion.js +5 -1
- package/src/commands/GenerateTypes/hooks/useGetVersion.js.map +1 -1
- package/src/commands/GenerateTypes/hooks/useParseDocumentation.d.ts +0 -9
- package/src/commands/GenerateTypes/hooks/useParseDocumentation.js +3 -3
- package/src/commands/GenerateTypes/hooks/useParseDocumentation.js.map +1 -1
- package/src/commands/GenerateTypes/utils/createTypeProvider.d.ts +12 -0
- package/src/commands/GenerateTypes/utils/createTypeProvider.js +141 -0
- package/src/commands/GenerateTypes/utils/createTypeProvider.js.map +1 -0
- package/src/components/CheckList/CheckList.js +1 -2
- package/src/components/CheckList/CheckList.js.map +1 -1
- package/src/components/CheckList/Item.js +1 -0
- package/src/components/CheckList/Item.js.map +1 -1
- package/src/constants.d.ts +2 -0
- package/src/constants.js +4 -0
- package/src/constants.js.map +1 -1
- package/src/index.js +4 -2
- package/src/index.js.map +1 -1
- package/src/types.d.ts +34 -3
- package/src/types.js.map +1 -1
- package/src/utils/dirname.d.ts +1 -1
- package/src/utils/dirname.js +2 -3
- package/src/utils/dirname.js.map +1 -1
- package/src/commands/GenerateTypes/fn/getFunctionDescriptionsFromHtml.d.ts +0 -2
- package/src/commands/GenerateTypes/fn/getFunctionDescriptionsFromHtml.js +0 -37
- package/src/commands/GenerateTypes/fn/getFunctionDescriptionsFromHtml.js.map +0 -1
- package/src/commands/GenerateTypes/utils/playdateConstants.d.ts +0 -9
- package/src/commands/GenerateTypes/utils/playdateConstants.js +0 -134
- package/src/commands/GenerateTypes/utils/playdateConstants.js.map +0 -1
@@ -0,0 +1,141 @@
|
|
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
|
+
properties: {},
|
16
|
+
functions: {}
|
17
|
+
};
|
18
|
+
const provider = {
|
19
|
+
globalStatements: fallbackProvider.globalStatements,
|
20
|
+
statements: fallbackProvider.statements,
|
21
|
+
properties: {},
|
22
|
+
functions: {}
|
23
|
+
};
|
24
|
+
const visitedProperties = new Map();
|
25
|
+
const visitedFunctions = new Map();
|
26
|
+
const getPropertyDetails = (property)=>{
|
27
|
+
if (visitedProperties.has(property.signature)) {
|
28
|
+
return visitedProperties.get(property.signature);
|
29
|
+
}
|
30
|
+
let result;
|
31
|
+
let prop = provider.properties[property.signature];
|
32
|
+
if (!prop) {
|
33
|
+
prop = fallbackProvider.properties[property.signature];
|
34
|
+
}
|
35
|
+
if (!prop) {
|
36
|
+
const details = {
|
37
|
+
signature: property.signature,
|
38
|
+
type: 'any'
|
39
|
+
};
|
40
|
+
provider.properties[property.signature] = details;
|
41
|
+
result = details;
|
42
|
+
} else {
|
43
|
+
provider.properties[property.signature] = prop;
|
44
|
+
result = prop;
|
45
|
+
}
|
46
|
+
visitedProperties.set(property.signature, result);
|
47
|
+
return result;
|
48
|
+
};
|
49
|
+
const getFunctionDetails = (func)=>{
|
50
|
+
if (visitedFunctions.has(func.signature)) {
|
51
|
+
return visitedFunctions.get(func.signature);
|
52
|
+
}
|
53
|
+
let result;
|
54
|
+
let fn = provider.functions[func.signature];
|
55
|
+
if (!fn) {
|
56
|
+
fn = fallbackProvider.functions[func.signature];
|
57
|
+
}
|
58
|
+
if (!fn) {
|
59
|
+
const details = {
|
60
|
+
signature: func.signature,
|
61
|
+
parameters: func.parameters.map((p)=>({
|
62
|
+
name: p.name,
|
63
|
+
type: 'any'
|
64
|
+
})),
|
65
|
+
returnType: 'any'
|
66
|
+
};
|
67
|
+
provider.functions[func.signature] = details;
|
68
|
+
result = details;
|
69
|
+
} else {
|
70
|
+
provider.functions[func.signature] = fn;
|
71
|
+
result = fn;
|
72
|
+
}
|
73
|
+
visitedFunctions.set(func.signature, result);
|
74
|
+
return result;
|
75
|
+
};
|
76
|
+
const getGlobalStatements = ()=>{
|
77
|
+
return provider.globalStatements;
|
78
|
+
};
|
79
|
+
const getStatements = ()=>{
|
80
|
+
return provider.statements;
|
81
|
+
};
|
82
|
+
const isPropertyStatic = (property)=>{
|
83
|
+
const { isStatic } = getPropertyDetails(property);
|
84
|
+
return isStatic;
|
85
|
+
};
|
86
|
+
const getFunctionReturnType = (func)=>{
|
87
|
+
const { returnType } = getFunctionDetails(func);
|
88
|
+
return returnType;
|
89
|
+
};
|
90
|
+
const getParameterDetails = (func, parameter)=>{
|
91
|
+
const { parameters } = getFunctionDetails(func);
|
92
|
+
const param = parameters.find((p)=>p.name === parameter);
|
93
|
+
if (!param) {
|
94
|
+
return {
|
95
|
+
name: parameter,
|
96
|
+
type: 'any'
|
97
|
+
};
|
98
|
+
}
|
99
|
+
return param;
|
100
|
+
};
|
101
|
+
const getParameters = (func)=>{
|
102
|
+
const { overrideParameters = false, parameters } = getFunctionDetails(func);
|
103
|
+
const getParameterFromDetails = (parameter)=>{
|
104
|
+
var _parameter_overrideOptions;
|
105
|
+
return _extends({
|
106
|
+
kind: StructureKind.Parameter,
|
107
|
+
name: kebabToCamelCase(parameter.name),
|
108
|
+
type: parameter.type
|
109
|
+
}, (_parameter_overrideOptions = parameter.overrideOptions) != null ? _parameter_overrideOptions : {});
|
110
|
+
};
|
111
|
+
if (overrideParameters) {
|
112
|
+
return parameters.map((details)=>{
|
113
|
+
return getParameterFromDetails(details);
|
114
|
+
});
|
115
|
+
}
|
116
|
+
return func.parameters.map((parameter)=>{
|
117
|
+
const details = getParameterDetails(func, parameter.name);
|
118
|
+
return getParameterFromDetails(details);
|
119
|
+
});
|
120
|
+
};
|
121
|
+
const getFunctionOverrideOptions = (func)=>{
|
122
|
+
var _getFunctionDetails_overrideOptions;
|
123
|
+
return (_getFunctionDetails_overrideOptions = getFunctionDetails(func).overrideOptions) != null ? _getFunctionDetails_overrideOptions : {};
|
124
|
+
};
|
125
|
+
const save = ()=>{
|
126
|
+
const contents = JSON.stringify(provider, null, 4);
|
127
|
+
writeFileSync(path, contents, 'utf-8');
|
128
|
+
};
|
129
|
+
return {
|
130
|
+
getGlobalStatements,
|
131
|
+
getStatements,
|
132
|
+
getPropertyDetails,
|
133
|
+
getFunctionReturnType,
|
134
|
+
getParameterDetails,
|
135
|
+
getParameters,
|
136
|
+
getFunctionOverrideOptions,
|
137
|
+
save
|
138
|
+
};
|
139
|
+
};
|
140
|
+
|
141
|
+
//# 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 properties: {},\n functions: {},\n } satisfies TypeProviderData);\n const provider = {\n globalStatements: fallbackProvider.globalStatements,\n statements: fallbackProvider.statements,\n properties: {},\n functions: {},\n } as TypeProviderData;\n const visitedProperties = new Map<string, PropertyDetails>();\n const visitedFunctions = new Map<string, FunctionDetails>();\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 isPropertyStatic = (property: PropertyDescription) => {\n const { isStatic } = getPropertyDetails(property);\n\n return isStatic;\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 getParameterFromDetails(details);\n });\n };\n\n const getFunctionOverrideOptions = (func: FunctionDescription) => {\n return getFunctionDetails(func).overrideOptions ?? {};\n };\n\n const save = () => {\n const contents = JSON.stringify(provider, null, 4);\n\n writeFileSync(path, contents, 'utf-8');\n };\n\n return {\n getGlobalStatements,\n getStatements,\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","properties","functions","provider","visitedProperties","Map","visitedFunctions","getPropertyDetails","property","has","signature","get","result","prop","details","type","set","getFunctionDetails","func","fn","parameters","map","p","name","returnType","getGlobalStatements","getStatements","isPropertyStatic","isStatic","getFunctionReturnType","getParameterDetails","parameter","param","find","getParameters","overrideParameters","getParameterFromDetails","kind","Parameter","overrideOptions","getFunctionOverrideOptions","save","contents","stringify"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
@@ -15,12 +15,11 @@ export const CheckList = ({ items, onFinish })=>{
|
|
15
15
|
if (index + 1 < items.length) {
|
16
16
|
setCurrentIndex(index + 1);
|
17
17
|
} else {
|
18
|
-
setCurrentIndex(null);
|
19
18
|
onFinish == null ? void 0 : onFinish();
|
20
19
|
}
|
21
20
|
};
|
22
21
|
return /*#__PURE__*/ React.createElement(React.Fragment, null, items.map((item, index)=>/*#__PURE__*/ React.createElement(Item, {
|
23
|
-
key:
|
22
|
+
key: item.waitingDescription,
|
24
23
|
item: _extends({}, item, {
|
25
24
|
onFinish: (result)=>{
|
26
25
|
var _item_onFinish;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../../libs/cli/src/components/CheckList/CheckList.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { CheckListItem } from '@/cli/types.js';\nimport { Item } from './Item.js';\n\ninterface Props {\n items: CheckListItem<unknown>[];\n onFinish?: () => void;\n}\n\nexport const CheckList = ({ items, onFinish }: Props) => {\n const [currentIndex, setCurrentIndex] = useState<number | null>(null);\n\n useEffect(() => {\n if (currentIndex === null && items.length > 0) {\n setCurrentIndex(0);\n }\n }, [currentIndex, items]);\n\n const handleFinish = (index: number) => {\n if (index + 1 < items.length) {\n setCurrentIndex(index + 1);\n } else {\n
|
1
|
+
{"version":3,"sources":["../../../../../../libs/cli/src/components/CheckList/CheckList.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { CheckListItem } from '@/cli/types.js';\nimport { Item } from './Item.js';\n\ninterface Props {\n items: CheckListItem<unknown>[];\n onFinish?: () => void;\n}\n\nexport const CheckList = ({ items, onFinish }: Props) => {\n const [currentIndex, setCurrentIndex] = useState<number | null>(null);\n\n useEffect(() => {\n if (currentIndex === null && items.length > 0) {\n setCurrentIndex(0);\n }\n }, [currentIndex, items]);\n\n const handleFinish = (index: number) => {\n if (index + 1 < items.length) {\n setCurrentIndex(index + 1);\n } else {\n onFinish?.();\n }\n };\n\n return (\n <>\n {items.map((item, index) => (\n <Item\n key={item.waitingDescription}\n item={{\n ...item,\n onFinish: (result: unknown) => {\n item?.onFinish?.(result);\n handleFinish(index);\n },\n }}\n start={index === currentIndex}\n />\n ))}\n </>\n );\n};\n"],"names":["React","useEffect","useState","Item","CheckList","items","onFinish","currentIndex","setCurrentIndex","length","handleFinish","index","map","item","key","waitingDescription","result","start"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,OAAOA,SAASC,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAEnD,SAASC,IAAI,QAAQ,YAAY;AAOjC,OAAO,MAAMC,YAAY,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAS;IAChD,MAAM,CAACC,cAAcC,gBAAgB,GAAGN,SAAwB;IAEhED,UAAU;QACN,IAAIM,iBAAiB,QAAQF,MAAMI,MAAM,GAAG,GAAG;YAC3CD,gBAAgB;QACpB;IACJ,GAAG;QAACD;QAAcF;KAAM;IAExB,MAAMK,eAAe,CAACC;QAClB,IAAIA,QAAQ,IAAIN,MAAMI,MAAM,EAAE;YAC1BD,gBAAgBG,QAAQ;QAC5B,OAAO;YACHL,4BAAAA;QACJ;IACJ;IAEA,qBACI,0CACKD,MAAMO,GAAG,CAAC,CAACC,MAAMF,sBACd,oBAACR;YACGW,KAAKD,KAAKE,kBAAkB;YAC5BF,MAAM,aACCA;gBACHP,UAAU,CAACU;wBACPH;oBAAAA,yBAAAA,iBAAAA,KAAMP,QAAQ,qBAAdO,oBAAAA,MAAiBG;oBACjBN,aAAaC;gBACjB;;YAEJM,OAAON,UAAUJ;;AAKrC,EAAE"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../../libs/cli/src/components/CheckList/Item.tsx"],"sourcesContent":["import {\n StatusMessage,\n StatusMessageProps,\n Spinner,\n extendTheme,\n defaultTheme,\n ThemeProvider,\n} from '@inkjs/ui';\nimport { Text, TextProps } from 'ink';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { CheckListItem } from '@/cli/types.js';\n\nexport interface ItemProps<TResult> {\n item: CheckListItem<TResult>;\n start: boolean;\n}\n\n// todo: possibly extract this\nconst SpinnerTheme = extendTheme(defaultTheme, {\n components: {\n Spinner: {\n styles: {\n frame: (): TextProps => ({\n color: 'yellowBright',\n }),\n label: (): TextProps => ({\n color: 'yellowBright',\n }),\n },\n },\n },\n});\n\nexport const Item = <TResult,>({\n item: {\n runningDescription,\n waitingDescription,\n errorDescription,\n finishedDescription,\n runner,\n onFinish,\n ready,\n },\n start,\n}: ItemProps<TResult>) => {\n const executed = useRef(false);\n const interval = useRef<NodeJS.Timeout | null>(null);\n const [dotCount, setDotCount] = useState(0);\n const [result, setResult] = useState<TResult | null>(null);\n const [failedReason, setfailedReason] = useState<string | null>(null);\n const hasResult = !failedReason && result !== null;\n const isRunning = !failedReason && !hasResult && start && ready !== false;\n const isWaiting = !failedReason && !hasResult && (!start || !ready);\n const couldStartButNotReady =\n !failedReason && !hasResult && start && ready === false;\n\n useEffect(() => {\n if (failedReason) {\n process.exit();\n }\n }, [failedReason]);\n\n useEffect(() => {\n if (couldStartButNotReady) {\n interval.current = setInterval(() => {\n setDotCount((count) => (count + 1) % 4);\n }, 250);\n } else {\n if (interval.current) {\n clearInterval(interval.current);\n }\n }\n\n return () => {\n if (interval.current) {\n clearInterval(interval.current);\n }\n };\n }, [couldStartButNotReady]);\n\n useEffect(() => {\n if (!start || executed.current || ready === false) {\n return;\n }\n\n runner()\n .then((result) => {\n executed.current = true;\n\n if (result === false) {\n setfailedReason(errorDescription);\n\n return;\n }\n\n setResult(result);\n onFinish?.(result);\n })\n .catch((reason) => {\n setfailedReason(reason.message);\n });\n }, [errorDescription, onFinish, runner, start]);\n\n let message = waitingDescription;\n let variant: StatusMessageProps['variant'] = 'info';\n\n if (failedReason) {\n message = ` ${failedReason}`;\n variant = 'error';\n } else if (isRunning) {\n message = runningDescription;\n variant = 'warning';\n } else if (hasResult) {\n message = finishedDescription(result);\n variant = 'success';\n }\n\n if (isRunning) {\n return (\n <ThemeProvider theme={SpinnerTheme}>\n <Spinner label={` ${message}`} />\n </ThemeProvider>\n );\n }\n\n return (\n <StatusMessage variant={variant}>\n <Text\n bold={!isWaiting}\n color={\n isRunning\n ? 'yellow'\n : isWaiting\n ? 'gray'\n : failedReason\n ? 'red'\n : 'green'\n }\n >\n {message}{' '}\n {couldStartButNotReady &&\n `— not ready yet${'.'.repeat(dotCount)}`}\n </Text>\n </StatusMessage>\n );\n};\n"],"names":["StatusMessage","Spinner","extendTheme","defaultTheme","ThemeProvider","Text","React","useEffect","useRef","useState","SpinnerTheme","components","styles","frame","color","label","Item","item","runningDescription","waitingDescription","errorDescription","finishedDescription","runner","onFinish","ready","start","executed","interval","dotCount","setDotCount","result","setResult","failedReason","setfailedReason","hasResult","isRunning","isWaiting","couldStartButNotReady","process","exit","current","setInterval","count","clearInterval","then","catch","reason","message","variant","theme","bold","repeat"],"rangeMappings":"
|
1
|
+
{"version":3,"sources":["../../../../../../libs/cli/src/components/CheckList/Item.tsx"],"sourcesContent":["import {\n StatusMessage,\n StatusMessageProps,\n Spinner,\n extendTheme,\n defaultTheme,\n ThemeProvider,\n} from '@inkjs/ui';\nimport { Text, TextProps } from 'ink';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { CheckListItem } from '@/cli/types.js';\n\nexport interface ItemProps<TResult> {\n item: CheckListItem<TResult>;\n start: boolean;\n}\n\n// todo: possibly extract this\nconst SpinnerTheme = extendTheme(defaultTheme, {\n components: {\n Spinner: {\n styles: {\n frame: (): TextProps => ({\n color: 'yellowBright',\n }),\n label: (): TextProps => ({\n color: 'yellowBright',\n }),\n },\n },\n },\n});\n\nexport const Item = <TResult,>({\n item: {\n runningDescription,\n waitingDescription,\n errorDescription,\n finishedDescription,\n runner,\n onFinish,\n ready,\n },\n start,\n}: ItemProps<TResult>) => {\n const executed = useRef(false);\n const interval = useRef<NodeJS.Timeout | null>(null);\n const [dotCount, setDotCount] = useState(0);\n const [result, setResult] = useState<TResult | null>(null);\n const [failedReason, setfailedReason] = useState<string | null>(null);\n const hasResult = !failedReason && result !== null;\n const isRunning = !failedReason && !hasResult && start && ready !== false;\n const isWaiting = !failedReason && !hasResult && (!start || !ready);\n const couldStartButNotReady =\n !failedReason && !hasResult && start && ready === false;\n\n useEffect(() => {\n if (failedReason) {\n process.exit();\n }\n }, [failedReason]);\n\n useEffect(() => {\n if (couldStartButNotReady) {\n interval.current = setInterval(() => {\n setDotCount((count) => (count + 1) % 4);\n }, 250);\n } else {\n if (interval.current) {\n clearInterval(interval.current);\n }\n }\n\n return () => {\n if (interval.current) {\n clearInterval(interval.current);\n }\n };\n }, [couldStartButNotReady]);\n\n useEffect(() => {\n if (!start || executed.current || ready === false) {\n return;\n }\n\n runner()\n .then((result) => {\n executed.current = true;\n\n if (result === false) {\n setfailedReason(errorDescription);\n\n return;\n }\n\n setResult(result);\n onFinish?.(result);\n })\n .catch((reason) => {\n console.log(reason);\n setfailedReason(reason.message);\n });\n }, [errorDescription, onFinish, runner, start]);\n\n let message = waitingDescription;\n let variant: StatusMessageProps['variant'] = 'info';\n\n if (failedReason) {\n message = ` ${failedReason}`;\n variant = 'error';\n } else if (isRunning) {\n message = runningDescription;\n variant = 'warning';\n } else if (hasResult) {\n message = finishedDescription(result);\n variant = 'success';\n }\n\n if (isRunning) {\n return (\n <ThemeProvider theme={SpinnerTheme}>\n <Spinner label={` ${message}`} />\n </ThemeProvider>\n );\n }\n\n return (\n <StatusMessage variant={variant}>\n <Text\n bold={!isWaiting}\n color={\n isRunning\n ? 'yellow'\n : isWaiting\n ? 'gray'\n : failedReason\n ? 'red'\n : 'green'\n }\n >\n {message}{' '}\n {couldStartButNotReady &&\n `— not ready yet${'.'.repeat(dotCount)}`}\n </Text>\n </StatusMessage>\n );\n};\n"],"names":["StatusMessage","Spinner","extendTheme","defaultTheme","ThemeProvider","Text","React","useEffect","useRef","useState","SpinnerTheme","components","styles","frame","color","label","Item","item","runningDescription","waitingDescription","errorDescription","finishedDescription","runner","onFinish","ready","start","executed","interval","dotCount","setDotCount","result","setResult","failedReason","setfailedReason","hasResult","isRunning","isWaiting","couldStartButNotReady","process","exit","current","setInterval","count","clearInterval","then","catch","reason","console","log","message","variant","theme","bold","repeat"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/src/constants.d.ts
CHANGED
package/src/constants.js
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
import { join } from 'node:path';
|
2
|
+
import { __dirname } from './utils/dirname.js';
|
1
3
|
export const CrankscriptConfigurationFileName = 'crankscript.json';
|
2
4
|
export const TypescriptReservedNamed = [
|
3
5
|
'delete',
|
4
6
|
'new',
|
5
7
|
'function'
|
6
8
|
];
|
9
|
+
export const RootFolder = join(__dirname, '..', '..');
|
10
|
+
export const DataFolder = join(RootFolder, 'src', 'data');
|
7
11
|
|
8
12
|
//# sourceMappingURL=constants.js.map
|
package/src/constants.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../libs/cli/src/constants.ts"],"sourcesContent":["
|
1
|
+
{"version":3,"sources":["../../../../libs/cli/src/constants.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { __dirname } from './utils/dirname.js';\n\nexport const CrankscriptConfigurationFileName = 'crankscript.json';\nexport const TypescriptReservedNamed = ['delete', 'new', 'function'];\nexport const RootFolder = join(__dirname, '..', '..');\nexport const DataFolder = join(RootFolder, 'src', 'data');\n"],"names":["join","__dirname","CrankscriptConfigurationFileName","TypescriptReservedNamed","RootFolder","DataFolder"],"rangeMappings":";;;;;;;;;","mappings":"AAAA,SAASA,IAAI,QAAQ,YAAY;AACjC,SAASC,SAAS,QAAQ,qBAAqB;AAE/C,OAAO,MAAMC,mCAAmC,mBAAmB;AACnE,OAAO,MAAMC,0BAA0B;IAAC;IAAU;IAAO;CAAW,CAAC;AACrE,OAAO,MAAMC,aAAaJ,KAAKC,WAAW,MAAM,MAAM;AACtD,OAAO,MAAMI,aAAaL,KAAKI,YAAY,OAAO,QAAQ"}
|
package/src/index.js
CHANGED
@@ -2,9 +2,10 @@
|
|
2
2
|
import { readFileSync } from 'fs';
|
3
3
|
import { join } from 'node:path';
|
4
4
|
import { Cli } from 'clipanion';
|
5
|
+
import { CompileCommand } from './commands/CompileCommand/index.js';
|
5
6
|
import { DoctorCommand } from './commands/DoctorCommand.js';
|
6
|
-
import { GenerateTypesCommand } from './commands/GenerateTypes/
|
7
|
-
import { RootFolder } from './
|
7
|
+
import { GenerateTypesCommand } from './commands/GenerateTypes/index.js';
|
8
|
+
import { RootFolder } from './constants.js';
|
8
9
|
const packageJsonContents = readFileSync(join(RootFolder, 'package.json'), 'utf-8');
|
9
10
|
const packageJson = JSON.parse(packageJsonContents);
|
10
11
|
const args = process.argv.slice(2);
|
@@ -15,6 +16,7 @@ const cli = new Cli({
|
|
15
16
|
});
|
16
17
|
cli.register(DoctorCommand);
|
17
18
|
cli.register(GenerateTypesCommand);
|
19
|
+
cli.register(CompileCommand);
|
18
20
|
cli.runExit(args);
|
19
21
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../libs/cli/src/index.ts"],"sourcesContent":["#!/usr/bin/env node --no-warnings=ExperimentalWarning\n\nimport { readFileSync } from 'fs';\nimport { join } from 'node:path';\nimport { Cli } from 'clipanion';\nimport { DoctorCommand } from '@/cli/commands/DoctorCommand.js';\nimport { GenerateTypesCommand } from '@/cli/commands/GenerateTypes/
|
1
|
+
{"version":3,"sources":["../../../../libs/cli/src/index.ts"],"sourcesContent":["#!/usr/bin/env node --no-warnings=ExperimentalWarning\n\nimport { readFileSync } from 'fs';\nimport { join } from 'node:path';\nimport { Cli } from 'clipanion';\nimport { CompileCommand } from '@/cli/commands/CompileCommand/index.js';\nimport { DoctorCommand } from '@/cli/commands/DoctorCommand.js';\nimport { GenerateTypesCommand } from '@/cli/commands/GenerateTypes/index.js';\nimport { RootFolder } from '@/cli/constants.js';\n\nconst packageJsonContents = readFileSync(\n join(RootFolder, 'package.json'),\n 'utf-8'\n);\nconst packageJson = JSON.parse(packageJsonContents);\n\nconst args = process.argv.slice(2);\n\nconst cli = new Cli({\n binaryLabel: 'crankscript',\n binaryName: 'crankscript',\n binaryVersion: packageJson.version,\n});\n\ncli.register(DoctorCommand);\ncli.register(GenerateTypesCommand);\ncli.register(CompileCommand);\ncli.runExit(args);\n"],"names":["readFileSync","join","Cli","CompileCommand","DoctorCommand","GenerateTypesCommand","RootFolder","packageJsonContents","packageJson","JSON","parse","args","process","argv","slice","cli","binaryLabel","binaryName","binaryVersion","version","register","runExit"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":";AAEA,SAASA,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,GAAG,QAAQ,YAAY;AAChC,SAASC,cAAc,QAAQ,yCAAyC;AACxE,SAASC,aAAa,QAAQ,kCAAkC;AAChE,SAASC,oBAAoB,QAAQ,wCAAwC;AAC7E,SAASC,UAAU,QAAQ,qBAAqB;AAEhD,MAAMC,sBAAsBP,aACxBC,KAAKK,YAAY,iBACjB;AAEJ,MAAME,cAAcC,KAAKC,KAAK,CAACH;AAE/B,MAAMI,OAAOC,QAAQC,IAAI,CAACC,KAAK,CAAC;AAEhC,MAAMC,MAAM,IAAIb,IAAI;IAChBc,aAAa;IACbC,YAAY;IACZC,eAAeV,YAAYW,OAAO;AACtC;AAEAJ,IAAIK,QAAQ,CAAChB;AACbW,IAAIK,QAAQ,CAACf;AACbU,IAAIK,QAAQ,CAACjB;AACbY,IAAIM,OAAO,CAACV"}
|
package/src/types.d.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { FunctionDeclarationStructure, MethodSignatureStructure, ParameterDeclarationStructure } from 'ts-morph';
|
1
2
|
import { Environment } from './environment/dto/Environment.js';
|
2
3
|
import { PlaydateSdkPath } from './environment/path/dto/PlaydateSdkPath.js';
|
3
4
|
export declare enum PlaydateSdkVersionIdentifier {
|
@@ -38,9 +39,15 @@ export type CheckListItem<TResult> = {
|
|
38
39
|
export interface ParameterDescription {
|
39
40
|
name: string;
|
40
41
|
required: boolean;
|
41
|
-
|
42
|
+
}
|
43
|
+
export interface PropertyDescription {
|
44
|
+
signature: string;
|
45
|
+
name: string;
|
46
|
+
namespaces: string[];
|
47
|
+
docs: string;
|
42
48
|
}
|
43
49
|
export interface FunctionDescription {
|
50
|
+
signature: string;
|
44
51
|
name: string;
|
45
52
|
namespaces: string[];
|
46
53
|
parameters: ParameterDescription[];
|
@@ -58,7 +65,8 @@ export interface ConstantDescription {
|
|
58
65
|
}
|
59
66
|
export interface PlaydateNamespace {
|
60
67
|
functions: FunctionDescription[];
|
61
|
-
|
68
|
+
methods: FunctionDescription[];
|
69
|
+
properties: PropertyDescription[];
|
62
70
|
}
|
63
71
|
export interface PlaydateType {
|
64
72
|
methods: FunctionDescription[];
|
@@ -66,5 +74,28 @@ export interface PlaydateType {
|
|
66
74
|
export interface ApiDefinitions {
|
67
75
|
namespaces: Record<string, PlaydateNamespace>;
|
68
76
|
types: Record<string, PlaydateType>;
|
69
|
-
constants: ConstantDescription[];
|
70
77
|
}
|
78
|
+
export interface ParameterDetails {
|
79
|
+
name: string;
|
80
|
+
type: string;
|
81
|
+
overrideOptions?: Partial<Omit<ParameterDeclarationStructure, 'kind' | 'name' | 'type'>>;
|
82
|
+
}
|
83
|
+
export interface PropertyDetails {
|
84
|
+
signature: string;
|
85
|
+
type: string;
|
86
|
+
isStatic?: boolean;
|
87
|
+
isReadOnly?: boolean;
|
88
|
+
}
|
89
|
+
export interface FunctionDetails {
|
90
|
+
signature: string;
|
91
|
+
parameters: ParameterDetails[];
|
92
|
+
returnType: string;
|
93
|
+
overrideParameters?: boolean;
|
94
|
+
overrideOptions?: Partial<FunctionDeclarationStructure | MethodSignatureStructure>;
|
95
|
+
}
|
96
|
+
export type TypeProviderData = {
|
97
|
+
globalStatements: string[];
|
98
|
+
statements: string[];
|
99
|
+
properties: Record<string, PropertyDetails>;
|
100
|
+
functions: Record<string, FunctionDetails>;
|
101
|
+
};
|
package/src/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../libs/cli/src/types.ts"],"sourcesContent":["import { Environment } from '@/cli/environment/dto/Environment.js';\nimport { PlaydateSdkPath } from '@/cli/environment/path/dto/PlaydateSdkPath.js';\n\nexport enum PlaydateSdkVersionIdentifier {\n Latest = 'latest',\n}\n\nexport type PlaydateSdkVersion = PlaydateSdkVersionIdentifier.Latest | string;\n\nexport type EnvironmentHealthResult =\n | {\n isHealthy: true;\n environment: Environment;\n health: EnvironmentHealth;\n }\n | {\n isHealthy: false;\n health: EnvironmentHealth;\n };\n\nexport enum HealthCheckStatusType {\n Healthy = 'Healthy',\n Unhealthy = 'Unhealthy',\n Unknown = 'Unknown',\n}\n\nexport type HealthCheckStatus<TArgument> =\n | {\n healthStatus:\n | HealthCheckStatusType.Unknown\n | HealthCheckStatusType.Unhealthy;\n }\n | {\n healthStatus: HealthCheckStatusType.Healthy;\n argument: TArgument;\n };\n\nexport interface EnvironmentHealth {\n sdkPathKnown: HealthCheckStatus<PlaydateSdkPath>;\n}\n\nexport type CheckListItem<TResult> = {\n runningDescription: string;\n waitingDescription: string;\n errorDescription: string;\n finishedDescription: (result: TResult) => string;\n runner: () => Promise<TResult> | Promise<false>;\n onFinish?: (result: TResult) => void;\n ready?: boolean;\n};\n\nexport interface ParameterDescription {\n name: string;\n required: boolean;\n
|
1
|
+
{"version":3,"sources":["../../../../libs/cli/src/types.ts"],"sourcesContent":["import {\n FunctionDeclarationStructure,\n MethodSignatureStructure,\n ParameterDeclarationStructure,\n} from 'ts-morph';\nimport { Environment } from '@/cli/environment/dto/Environment.js';\nimport { PlaydateSdkPath } from '@/cli/environment/path/dto/PlaydateSdkPath.js';\n\nexport enum PlaydateSdkVersionIdentifier {\n Latest = 'latest',\n}\n\nexport type PlaydateSdkVersion = PlaydateSdkVersionIdentifier.Latest | string;\n\nexport type EnvironmentHealthResult =\n | {\n isHealthy: true;\n environment: Environment;\n health: EnvironmentHealth;\n }\n | {\n isHealthy: false;\n health: EnvironmentHealth;\n };\n\nexport enum HealthCheckStatusType {\n Healthy = 'Healthy',\n Unhealthy = 'Unhealthy',\n Unknown = 'Unknown',\n}\n\nexport type HealthCheckStatus<TArgument> =\n | {\n healthStatus:\n | HealthCheckStatusType.Unknown\n | HealthCheckStatusType.Unhealthy;\n }\n | {\n healthStatus: HealthCheckStatusType.Healthy;\n argument: TArgument;\n };\n\nexport interface EnvironmentHealth {\n sdkPathKnown: HealthCheckStatus<PlaydateSdkPath>;\n}\n\nexport type CheckListItem<TResult> = {\n runningDescription: string;\n waitingDescription: string;\n errorDescription: string;\n finishedDescription: (result: TResult) => string;\n runner: () => Promise<TResult> | Promise<false>;\n onFinish?: (result: TResult) => void;\n ready?: boolean;\n};\n\nexport interface ParameterDescription {\n name: string;\n required: boolean;\n}\n\nexport interface PropertyDescription {\n signature: string;\n name: string;\n namespaces: string[];\n docs: string;\n}\n\nexport interface FunctionDescription {\n signature: string;\n name: string;\n namespaces: string[];\n parameters: ParameterDescription[];\n hasSelf: boolean;\n docs: string;\n}\n\nexport interface ConstantDescription {\n name: string;\n docs: string;\n values: {\n name: string;\n value: number;\n docs: string;\n }[];\n}\n\nexport interface PlaydateNamespace {\n functions: FunctionDescription[];\n methods: FunctionDescription[];\n properties: PropertyDescription[];\n}\n\nexport interface PlaydateType {\n methods: FunctionDescription[];\n}\n\nexport interface ApiDefinitions {\n namespaces: Record<string, PlaydateNamespace>;\n types: Record<string, PlaydateType>;\n}\n\nexport interface ParameterDetails {\n name: string;\n type: string;\n overrideOptions?: Partial<\n Omit<ParameterDeclarationStructure, 'kind' | 'name' | 'type'>\n >;\n}\n\nexport interface PropertyDetails {\n signature: string;\n type: string;\n isStatic?: boolean;\n isReadOnly?: boolean;\n}\n\nexport interface FunctionDetails {\n signature: string;\n parameters: ParameterDetails[];\n returnType: string;\n overrideParameters?: boolean;\n overrideOptions?: Partial<\n FunctionDeclarationStructure | MethodSignatureStructure\n >;\n}\n\nexport type TypeProviderData = {\n globalStatements: string[];\n statements: string[];\n properties: Record<string, PropertyDetails>;\n functions: Record<string, FunctionDetails>;\n};\n"],"names":["PlaydateSdkVersionIdentifier","HealthCheckStatusType"],"rangeMappings":";;;;;;;;;","mappings":";UAQYA;;GAAAA,iCAAAA;;UAiBAC;;;;GAAAA,0BAAAA"}
|
package/src/utils/dirname.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export declare const
|
1
|
+
export declare const __dirname: string;
|
package/src/utils/dirname.js
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
import { dirname
|
1
|
+
import { dirname } from 'node:path';
|
2
2
|
import { fileURLToPath } from 'node:url';
|
3
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
4
|
-
export const RootFolder = join(__dirname, '..', '..');
|
3
|
+
export const __dirname = dirname(fileURLToPath(import.meta.url));
|
5
4
|
|
6
5
|
//# sourceMappingURL=dirname.js.map
|
package/src/utils/dirname.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../libs/cli/src/utils/dirname.ts"],"sourcesContent":["import { dirname
|
1
|
+
{"version":3,"sources":["../../../../../libs/cli/src/utils/dirname.ts"],"sourcesContent":["import { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport const __dirname = dirname(fileURLToPath(import.meta.url));\n"],"names":["dirname","fileURLToPath","__dirname","url"],"rangeMappings":";;","mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AACpC,SAASC,aAAa,QAAQ,WAAW;AAEzC,OAAO,MAAMC,YAAYF,QAAQC,cAAc,YAAYE,GAAG,GAAG"}
|
@@ -1,37 +0,0 @@
|
|
1
|
-
import { _ as _extends } from "@swc/helpers/_/_extends";
|
2
|
-
import { load } from 'cheerio';
|
3
|
-
import { PlaydateSdkUrl } from '../../../commands/GenerateTypes/constants.js';
|
4
|
-
import { parseFunctionSignature } from '../../../commands/GenerateTypes/fn/parseFunctionSignature.js';
|
5
|
-
export const getFunctionDescriptionsFromHtml = (html, version)=>{
|
6
|
-
const $ = load(html);
|
7
|
-
const allSignatures = $('[id^="m-"], [id^="f-"], [id^="c-"]').toArray();
|
8
|
-
const result = [];
|
9
|
-
for (const element of allSignatures){
|
10
|
-
var _$_attr;
|
11
|
-
const id = (_$_attr = $(element).attr('id')) != null ? _$_attr : '';
|
12
|
-
var _$_find_text;
|
13
|
-
const titles = ((_$_find_text = $(element).find('.title').text()) != null ? _$_find_text : '').split(' ');
|
14
|
-
var _$_find_html;
|
15
|
-
let docsString = ((_$_find_html = $(element).find('.content').html()) != null ? _$_find_html : '').trim();
|
16
|
-
if (docsString.startsWith('<div class="paragraph">')) {
|
17
|
-
docsString = docsString.slice('<div class="paragraph">'.length);
|
18
|
-
}
|
19
|
-
if (docsString.endsWith('</div>')) {
|
20
|
-
docsString = docsString.slice(0, docsString.length - '</div>'.length);
|
21
|
-
}
|
22
|
-
docsString = docsString.replace(/<a href="#/g, '<a href="' + PlaydateSdkUrl + version + '#');
|
23
|
-
const docs = id ? `${docsString}\n[Read more](${PlaydateSdkUrl}${version}#${id})` : docsString;
|
24
|
-
for (const title of titles){
|
25
|
-
try {
|
26
|
-
result.push(_extends({}, parseFunctionSignature(title), {
|
27
|
-
docs
|
28
|
-
}));
|
29
|
-
} catch (e) {
|
30
|
-
// skip
|
31
|
-
}
|
32
|
-
}
|
33
|
-
}
|
34
|
-
return result;
|
35
|
-
};
|
36
|
-
|
37
|
-
//# sourceMappingURL=getFunctionDescriptionsFromHtml.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../../../libs/cli/src/commands/GenerateTypes/fn/getFunctionDescriptionsFromHtml.ts"],"sourcesContent":["import { load } from 'cheerio';\nimport { PlaydateSdkUrl } from '@/cli/commands/GenerateTypes/constants.js';\nimport { parseFunctionSignature } from '@/cli/commands/GenerateTypes/fn/parseFunctionSignature.js';\nimport { FunctionDescription } from '@/cli/types.js';\n\nexport const getFunctionDescriptionsFromHtml = (\n html: string,\n version: string\n) => {\n const $ = load(html);\n\n const allSignatures = $('[id^=\"m-\"], [id^=\"f-\"], [id^=\"c-\"]').toArray();\n const result: FunctionDescription[] = [];\n\n for (const element of allSignatures) {\n const id = $(element).attr('id') ?? '';\n const titles = ($(element).find('.title').text() ?? '').split(' ');\n let docsString = ($(element).find('.content').html() ?? '').trim();\n\n if (docsString.startsWith('<div class=\"paragraph\">')) {\n docsString = docsString.slice('<div class=\"paragraph\">'.length);\n }\n\n if (docsString.endsWith('</div>')) {\n docsString = docsString.slice(\n 0,\n docsString.length - '</div>'.length\n );\n }\n\n docsString = docsString.replace(\n /<a href=\"#/g,\n '<a href=\"' + PlaydateSdkUrl + version + '#'\n );\n\n const docs = id\n ? `${docsString}\\n[Read more](${PlaydateSdkUrl}${version}#${id})`\n : docsString;\n\n for (const title of titles) {\n try {\n result.push({ ...parseFunctionSignature(title), docs });\n } catch (e) {\n // skip\n }\n }\n }\n\n return result;\n};\n"],"names":["load","PlaydateSdkUrl","parseFunctionSignature","getFunctionDescriptionsFromHtml","html","version","$","allSignatures","toArray","result","element","id","attr","titles","find","text","split","docsString","trim","startsWith","slice","length","endsWith","replace","docs","title","push","e"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,SAASA,IAAI,QAAQ,UAAU;AAC/B,SAASC,cAAc,QAAQ,4CAA4C;AAC3E,SAASC,sBAAsB,QAAQ,4DAA4D;AAGnG,OAAO,MAAMC,kCAAkC,CAC3CC,MACAC;IAEA,MAAMC,IAAIN,KAAKI;IAEf,MAAMG,gBAAgBD,EAAE,sCAAsCE,OAAO;IACrE,MAAMC,SAAgC,EAAE;IAExC,KAAK,MAAMC,WAAWH,cAAe;YACtBD;QAAX,MAAMK,KAAKL,CAAAA,UAAAA,EAAEI,SAASE,IAAI,CAAC,iBAAhBN,UAAyB;YACpBA;QAAhB,MAAMO,SAAS,AAACP,CAAAA,CAAAA,eAAAA,EAAEI,SAASI,IAAI,CAAC,UAAUC,IAAI,cAA9BT,eAAoC,EAAC,EAAGU,KAAK,CAAC;YAC5CV;QAAlB,IAAIW,aAAa,AAACX,CAAAA,CAAAA,eAAAA,EAAEI,SAASI,IAAI,CAAC,YAAYV,IAAI,cAAhCE,eAAsC,EAAC,EAAGY,IAAI;QAEhE,IAAID,WAAWE,UAAU,CAAC,4BAA4B;YAClDF,aAAaA,WAAWG,KAAK,CAAC,0BAA0BC,MAAM;QAClE;QAEA,IAAIJ,WAAWK,QAAQ,CAAC,WAAW;YAC/BL,aAAaA,WAAWG,KAAK,CACzB,GACAH,WAAWI,MAAM,GAAG,SAASA,MAAM;QAE3C;QAEAJ,aAAaA,WAAWM,OAAO,CAC3B,eACA,cAActB,iBAAiBI,UAAU;QAG7C,MAAMmB,OAAOb,KACP,CAAC,EAAEM,WAAW,cAAc,EAAEhB,eAAe,EAAEI,QAAQ,CAAC,EAAEM,GAAG,CAAC,CAAC,GAC/DM;QAEN,KAAK,MAAMQ,SAASZ,OAAQ;YACxB,IAAI;gBACAJ,OAAOiB,IAAI,CAAC,aAAKxB,uBAAuBuB;oBAAQD;;YACpD,EAAE,OAAOG,GAAG;YACR,OAAO;YACX;QACJ;IACJ;IAEA,OAAOlB;AACX,EAAE"}
|
@@ -1,134 +0,0 @@
|
|
1
|
-
export const playdateConstants = [
|
2
|
-
{
|
3
|
-
name: 'PlaydateColor',
|
4
|
-
values: [
|
5
|
-
{
|
6
|
-
name: 'Black',
|
7
|
-
value: 0,
|
8
|
-
docs: ''
|
9
|
-
},
|
10
|
-
{
|
11
|
-
name: 'White',
|
12
|
-
value: 1,
|
13
|
-
docs: ''
|
14
|
-
},
|
15
|
-
{
|
16
|
-
name: 'Clear',
|
17
|
-
value: 2,
|
18
|
-
docs: ''
|
19
|
-
},
|
20
|
-
{
|
21
|
-
name: 'XOR',
|
22
|
-
value: 4,
|
23
|
-
docs: ''
|
24
|
-
}
|
25
|
-
],
|
26
|
-
docs: ''
|
27
|
-
},
|
28
|
-
{
|
29
|
-
name: 'PlaydateImageFlip',
|
30
|
-
values: [
|
31
|
-
{
|
32
|
-
name: 'Unflipped',
|
33
|
-
value: 0,
|
34
|
-
docs: ''
|
35
|
-
},
|
36
|
-
{
|
37
|
-
name: 'FlippedX',
|
38
|
-
value: 1,
|
39
|
-
docs: ''
|
40
|
-
},
|
41
|
-
{
|
42
|
-
name: 'FlippedY',
|
43
|
-
value: 2,
|
44
|
-
docs: ''
|
45
|
-
},
|
46
|
-
{
|
47
|
-
name: 'FlippedXY',
|
48
|
-
value: 4,
|
49
|
-
docs: ''
|
50
|
-
}
|
51
|
-
],
|
52
|
-
docs: ''
|
53
|
-
},
|
54
|
-
{
|
55
|
-
name: 'PlaydatePolygonFill',
|
56
|
-
values: [
|
57
|
-
{
|
58
|
-
name: 'NonZero',
|
59
|
-
value: 1,
|
60
|
-
docs: ''
|
61
|
-
},
|
62
|
-
{
|
63
|
-
name: 'EvenOdd',
|
64
|
-
value: 2,
|
65
|
-
docs: ''
|
66
|
-
}
|
67
|
-
],
|
68
|
-
docs: ''
|
69
|
-
},
|
70
|
-
{
|
71
|
-
name: 'PlaydateButton',
|
72
|
-
values: [
|
73
|
-
{
|
74
|
-
name: 'Left',
|
75
|
-
value: 1,
|
76
|
-
docs: ''
|
77
|
-
},
|
78
|
-
{
|
79
|
-
name: 'Right',
|
80
|
-
value: 2,
|
81
|
-
docs: ''
|
82
|
-
},
|
83
|
-
{
|
84
|
-
name: 'Up',
|
85
|
-
value: 4,
|
86
|
-
docs: ''
|
87
|
-
},
|
88
|
-
{
|
89
|
-
name: 'Down',
|
90
|
-
value: 8,
|
91
|
-
docs: ''
|
92
|
-
},
|
93
|
-
{
|
94
|
-
name: 'B',
|
95
|
-
value: 16,
|
96
|
-
docs: ''
|
97
|
-
},
|
98
|
-
{
|
99
|
-
name: 'A',
|
100
|
-
value: 32,
|
101
|
-
docs: ''
|
102
|
-
},
|
103
|
-
{
|
104
|
-
name: 'Menu',
|
105
|
-
value: 64,
|
106
|
-
docs: ''
|
107
|
-
},
|
108
|
-
{
|
109
|
-
name: 'Lock',
|
110
|
-
value: 124,
|
111
|
-
docs: ''
|
112
|
-
}
|
113
|
-
],
|
114
|
-
docs: ''
|
115
|
-
},
|
116
|
-
{
|
117
|
-
name: 'PlaydateLanguage',
|
118
|
-
values: [
|
119
|
-
{
|
120
|
-
name: 'English',
|
121
|
-
value: 1,
|
122
|
-
docs: ''
|
123
|
-
},
|
124
|
-
{
|
125
|
-
name: 'Japanese',
|
126
|
-
value: 2,
|
127
|
-
docs: ''
|
128
|
-
}
|
129
|
-
],
|
130
|
-
docs: ''
|
131
|
-
}
|
132
|
-
];
|
133
|
-
|
134
|
-
//# sourceMappingURL=playdateConstants.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../../../libs/cli/src/commands/GenerateTypes/utils/playdateConstants.ts"],"sourcesContent":["import { ConstantDescription } from '@/cli/types.js';\n\nexport const playdateConstants = [\n {\n name: 'PlaydateColor',\n values: [\n { name: 'Black', value: 0, docs: '' },\n { name: 'White', value: 1, docs: '' },\n { name: 'Clear', value: 2, docs: '' },\n { name: 'XOR', value: 4, docs: '' },\n ],\n docs: '',\n },\n {\n name: 'PlaydateImageFlip',\n values: [\n { name: 'Unflipped', value: 0, docs: '' },\n { name: 'FlippedX', value: 1, docs: '' },\n { name: 'FlippedY', value: 2, docs: '' },\n { name: 'FlippedXY', value: 4, docs: '' },\n ],\n docs: '',\n },\n {\n name: 'PlaydatePolygonFill',\n values: [\n { name: 'NonZero', value: 1, docs: '' },\n { name: 'EvenOdd', value: 2, docs: '' },\n ],\n docs: '',\n },\n {\n name: 'PlaydateButton',\n values: [\n { name: 'Left', value: 1, docs: '' },\n { name: 'Right', value: 2, docs: '' },\n { name: 'Up', value: 4, docs: '' },\n { name: 'Down', value: 8, docs: '' },\n { name: 'B', value: 16, docs: '' },\n { name: 'A', value: 32, docs: '' },\n { name: 'Menu', value: 64, docs: '' },\n { name: 'Lock', value: 124, docs: '' },\n ],\n docs: '',\n },\n {\n name: 'PlaydateLanguage',\n values: [\n { name: 'English', value: 1, docs: '' },\n { name: 'Japanese', value: 2, docs: '' },\n ],\n docs: '',\n },\n] satisfies ConstantDescription[];\n"],"names":["playdateConstants","name","values","value","docs"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,oBAAoB;IAC7B;QACIC,MAAM;QACNC,QAAQ;YACJ;gBAAED,MAAM;gBAASE,OAAO;gBAAGC,MAAM;YAAG;YACpC;gBAAEH,MAAM;gBAASE,OAAO;gBAAGC,MAAM;YAAG;YACpC;gBAAEH,MAAM;gBAASE,OAAO;gBAAGC,MAAM;YAAG;YACpC;gBAAEH,MAAM;gBAAOE,OAAO;gBAAGC,MAAM;YAAG;SACrC;QACDA,MAAM;IACV;IACA;QACIH,MAAM;QACNC,QAAQ;YACJ;gBAAED,MAAM;gBAAaE,OAAO;gBAAGC,MAAM;YAAG;YACxC;gBAAEH,MAAM;gBAAYE,OAAO;gBAAGC,MAAM;YAAG;YACvC;gBAAEH,MAAM;gBAAYE,OAAO;gBAAGC,MAAM;YAAG;YACvC;gBAAEH,MAAM;gBAAaE,OAAO;gBAAGC,MAAM;YAAG;SAC3C;QACDA,MAAM;IACV;IACA;QACIH,MAAM;QACNC,QAAQ;YACJ;gBAAED,MAAM;gBAAWE,OAAO;gBAAGC,MAAM;YAAG;YACtC;gBAAEH,MAAM;gBAAWE,OAAO;gBAAGC,MAAM;YAAG;SACzC;QACDA,MAAM;IACV;IACA;QACIH,MAAM;QACNC,QAAQ;YACJ;gBAAED,MAAM;gBAAQE,OAAO;gBAAGC,MAAM;YAAG;YACnC;gBAAEH,MAAM;gBAASE,OAAO;gBAAGC,MAAM;YAAG;YACpC;gBAAEH,MAAM;gBAAME,OAAO;gBAAGC,MAAM;YAAG;YACjC;gBAAEH,MAAM;gBAAQE,OAAO;gBAAGC,MAAM;YAAG;YACnC;gBAAEH,MAAM;gBAAKE,OAAO;gBAAIC,MAAM;YAAG;YACjC;gBAAEH,MAAM;gBAAKE,OAAO;gBAAIC,MAAM;YAAG;YACjC;gBAAEH,MAAM;gBAAQE,OAAO;gBAAIC,MAAM;YAAG;YACpC;gBAAEH,MAAM;gBAAQE,OAAO;gBAAKC,MAAM;YAAG;SACxC;QACDA,MAAM;IACV;IACA;QACIH,MAAM;QACNC,QAAQ;YACJ;gBAAED,MAAM;gBAAWE,OAAO;gBAAGC,MAAM;YAAG;YACtC;gBAAEH,MAAM;gBAAYE,OAAO;gBAAGC,MAAM;YAAG;SAC1C;QACDA,MAAM;IACV;CACH,CAAiC"}
|