crankscript 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/package.json +32 -31
  4. package/src/commands/CompileCommand/components/Compile.js +3 -1
  5. package/src/commands/CompileCommand/components/Compile.js.map +1 -1
  6. package/src/commands/CompileCommand/hooks/useCompileTasks.d.ts +6 -1
  7. package/src/commands/CompileCommand/hooks/useCompileTasks.js +2 -2
  8. package/src/commands/CompileCommand/hooks/useCompileTasks.js.map +1 -1
  9. package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.d.ts +1 -0
  10. package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.js +25 -1
  11. package/src/commands/EnvironmentAwareCommand/EnvironmentAwareCommand.js.map +1 -1
  12. package/src/commands/EnvironmentAwareCommand/contexts/CrankScriptContext.d.ts +11 -0
  13. package/src/commands/EnvironmentAwareCommand/contexts/CrankScriptContext.js +20 -0
  14. package/src/commands/EnvironmentAwareCommand/contexts/CrankScriptContext.js.map +1 -0
  15. package/src/commands/GenerateTypes/hooks/useFormatTypeFile.js +4 -4
  16. package/src/commands/GenerateTypes/hooks/useFormatTypeFile.js.map +1 -1
  17. package/src/commands/SimulatorCommand/SimulatorCommand.d.ts +2 -0
  18. package/src/commands/SimulatorCommand/SimulatorCommand.js +27 -3
  19. package/src/commands/SimulatorCommand/SimulatorCommand.js.map +1 -1
  20. package/src/commands/SimulatorCommand/components/Simulator.d.ts +3 -1
  21. package/src/commands/SimulatorCommand/components/Simulator.js +20 -84
  22. package/src/commands/SimulatorCommand/components/Simulator.js.map +1 -1
  23. package/src/commands/SimulatorCommand/components/TemporaryFolderCreator.d.ts +7 -0
  24. package/src/commands/SimulatorCommand/components/TemporaryFolderCreator.js +43 -0
  25. package/src/commands/SimulatorCommand/components/TemporaryFolderCreator.js.map +1 -0
  26. package/src/commands/SimulatorCommand/fn/createTemporaryFolderPathFromEntryFile.d.ts +1 -0
  27. package/src/commands/SimulatorCommand/fn/createTemporaryFolderPathFromEntryFile.js +9 -0
  28. package/src/commands/SimulatorCommand/fn/createTemporaryFolderPathFromEntryFile.js.map +1 -0
  29. package/src/commands/SimulatorCommand/hooks/useFileWatcher.d.ts +6 -0
  30. package/src/commands/SimulatorCommand/hooks/useFileWatcher.js +37 -0
  31. package/src/commands/SimulatorCommand/hooks/useFileWatcher.js.map +1 -0
  32. package/src/commands/SimulatorCommand/hooks/useSimulatorTasks.d.ts +22 -0
  33. package/src/commands/SimulatorCommand/hooks/useSimulatorTasks.js +109 -0
  34. package/src/commands/SimulatorCommand/hooks/useSimulatorTasks.js.map +1 -0
  35. package/src/commands/TranspileCommand/TranspileCommand.d.ts +1 -0
  36. package/src/commands/TranspileCommand/TranspileCommand.js +3 -2
  37. package/src/commands/TranspileCommand/TranspileCommand.js.map +1 -1
  38. package/src/commands/TranspileCommand/fn/transpile.d.ts +3 -2
  39. package/src/commands/TranspileCommand/fn/transpile.js +18 -2
  40. package/src/commands/TranspileCommand/fn/transpile.js.map +1 -1
  41. package/src/commands/TranspileCommand/fn/validateEntryPoint.d.ts +2 -1
  42. package/src/commands/TranspileCommand/fn/validateEntryPoint.js +19 -9
  43. package/src/commands/TranspileCommand/fn/validateEntryPoint.js.map +1 -1
  44. package/src/commands/TranspileCommand/fn/validateExitPoint.d.ts +2 -1
  45. package/src/commands/TranspileCommand/fn/validateExitPoint.js +16 -10
  46. package/src/commands/TranspileCommand/fn/validateExitPoint.js.map +1 -1
  47. package/src/commands/TranspileCommand/hooks/useTranspileTasks.d.ts +3 -1
  48. package/src/commands/TranspileCommand/hooks/useTranspileTasks.js +4 -2
  49. package/src/commands/TranspileCommand/hooks/useTranspileTasks.js.map +1 -1
  50. package/src/commands/TranspileCommand/types.d.ts +4 -0
  51. package/src/commands/TranspileCommand/types.js +7 -0
  52. package/src/commands/TranspileCommand/types.js.map +1 -0
  53. package/src/components/CheckList/Item.js +8 -2
  54. package/src/components/CheckList/Item.js.map +1 -1
  55. package/src/components/ErrorBoundary.js +28 -0
  56. package/src/components/ErrorBoundary.js.map +1 -0
  57. package/src/index.js +5 -1
  58. package/src/index.js.map +1 -1
@@ -1,6 +1,7 @@
1
1
  import { StatusMessage } from '@inkjs/ui';
2
2
  import { Text } from 'ink';
3
3
  import React, { useEffect, useRef, useState } from 'react';
4
+ import { useCrankScriptContext } from '../../commands/EnvironmentAwareCommand/contexts/CrankScriptContext.js';
4
5
  import { Spinner } from '../../components/Spinner.js';
5
6
  export const Item = ({ item: { runningDescription, waitingDescription, errorDescription, finishedDescription, skipDescription, runner, onFinish, ready, quitOnError = true, skip }, start })=>{
6
7
  const executed = useRef(false);
@@ -8,7 +9,9 @@ export const Item = ({ item: { runningDescription, waitingDescription, errorDesc
8
9
  const [dotCount, setDotCount] = useState(0);
9
10
  const [result, setResult] = useState(null);
10
11
  const [failedReason, setfailedReason] = useState(null);
12
+ const [failedDetails, setFailedDetails] = useState(null);
11
13
  const [isSkipped, setIsSkipped] = useState(false);
14
+ const { verbose } = useCrankScriptContext();
12
15
  // Determine if the task should be skipped
13
16
  const shouldSkip = typeof skip === 'function' ? skip() : skip === true;
14
17
  const hasResult = !failedReason && result !== null;
@@ -62,7 +65,8 @@ export const Item = ({ item: { runningDescription, waitingDescription, errorDesc
62
65
  setResult(result);
63
66
  onFinish == null ? void 0 : onFinish(result);
64
67
  }).catch((reason)=>{
65
- setfailedReason(reason.message);
68
+ setfailedReason(reason instanceof Error ? reason.message : 'Unknown error');
69
+ setFailedDetails(reason instanceof Error && reason.stack ? reason.stack : null);
66
70
  setResult(false);
67
71
  onFinish == null ? void 0 : onFinish(false);
68
72
  });
@@ -98,7 +102,9 @@ export const Item = ({ item: { runningDescription, waitingDescription, errorDesc
98
102
  }, /*#__PURE__*/ React.createElement(Text, {
99
103
  bold: !isWaiting,
100
104
  color: isRunning ? 'yellow' : isWaiting ? 'gray' : failedReason ? 'red' : isSkipped ? 'gray' : 'green'
101
- }, message, ' ', couldStartButNotReady && `— not ready yet${'.'.repeat(dotCount)}`));
105
+ }, message, ' ', couldStartButNotReady && `— not ready yet${'.'.repeat(dotCount)}`, verbose && failedDetails && /*#__PURE__*/ React.createElement(Text, {
106
+ color: "red"
107
+ }, failedDetails)));
102
108
  };
103
109
 
104
110
  //# sourceMappingURL=Item.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/cli/src/components/CheckList/Item.tsx"],"sourcesContent":["import { StatusMessage, StatusMessageProps } from '@inkjs/ui';\nimport { Text } from 'ink';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Spinner } from '@/cli/components/Spinner.js';\nimport { CheckListItem } from '@/cli/types.js';\n\nexport interface ItemProps<TResult> {\n item: CheckListItem<TResult>;\n start: boolean;\n}\n\nexport const Item = <TResult,>({\n item: {\n runningDescription,\n waitingDescription,\n errorDescription,\n finishedDescription,\n skipDescription,\n runner,\n onFinish,\n ready,\n quitOnError = true,\n skip,\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 | false>(null);\n const [failedReason, setfailedReason] = useState<string | null>(null);\n const [isSkipped, setIsSkipped] = useState(false);\n\n // Determine if the task should be skipped\n const shouldSkip = typeof skip === 'function' ? skip() : skip === true;\n\n const hasResult = !failedReason && result !== null;\n const isRunning =\n !failedReason && !hasResult && start && ready !== false && !shouldSkip;\n const isWaiting = !failedReason && !hasResult && (!start || !ready);\n const couldStartButNotReady =\n !failedReason && !hasResult && start && ready === false;\n\n useEffect(() => {\n if (failedReason && quitOnError) {\n process.exit(1);\n }\n }, [failedReason, quitOnError]);\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 // If the task should be skipped, mark it as executed with a success result\n if (shouldSkip) {\n executed.current = true;\n setIsSkipped(true);\n setResult(true as TResult);\n onFinish?.(true as TResult);\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 setResult(false);\n onFinish?.(false);\n });\n }, [errorDescription, onFinish, runner, start, shouldSkip]);\n\n let message = waitingDescription;\n let variant: StatusMessageProps['variant'] = 'info';\n\n if (failedReason) {\n message = ` ${failedReason}`;\n variant = 'error';\n } else if (isSkipped) {\n message = skipDescription || 'Task skipped';\n variant = 'info';\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 <Spinner label={message} />;\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 : isSkipped\n ? 'gray'\n : 'green'\n }\n >\n {message}{' '}\n {couldStartButNotReady &&\n `— not ready yet${'.'.repeat(dotCount)}`}\n </Text>\n </StatusMessage>\n );\n};\n"],"names":["StatusMessage","Text","React","useEffect","useRef","useState","Spinner","Item","item","runningDescription","waitingDescription","errorDescription","finishedDescription","skipDescription","runner","onFinish","ready","quitOnError","skip","start","executed","interval","dotCount","setDotCount","result","setResult","failedReason","setfailedReason","isSkipped","setIsSkipped","shouldSkip","hasResult","isRunning","isWaiting","couldStartButNotReady","process","exit","current","setInterval","count","clearInterval","then","catch","reason","message","variant","label","bold","color","repeat"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../libs/cli/src/components/CheckList/Item.tsx"],"sourcesContent":["import { StatusMessage, StatusMessageProps } from '@inkjs/ui';\nimport { Text } from 'ink';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useCrankScriptContext } from '@/cli/commands/EnvironmentAwareCommand/contexts/CrankScriptContext.js';\nimport { Spinner } from '@/cli/components/Spinner.js';\nimport { CheckListItem } from '@/cli/types.js';\nexport interface ItemProps<TResult> {\n item: CheckListItem<TResult>;\n start: boolean;\n}\n\nexport const Item = <TResult,>({\n item: {\n runningDescription,\n waitingDescription,\n errorDescription,\n finishedDescription,\n skipDescription,\n runner,\n onFinish,\n ready,\n quitOnError = true,\n skip,\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 | false>(null);\n const [failedReason, setfailedReason] = useState<string | null>(null);\n const [failedDetails, setFailedDetails] = useState<string | null>(null);\n const [isSkipped, setIsSkipped] = useState(false);\n const { verbose } = useCrankScriptContext();\n\n // Determine if the task should be skipped\n const shouldSkip = typeof skip === 'function' ? skip() : skip === true;\n\n const hasResult = !failedReason && result !== null;\n const isRunning =\n !failedReason && !hasResult && start && ready !== false && !shouldSkip;\n const isWaiting = !failedReason && !hasResult && (!start || !ready);\n const couldStartButNotReady =\n !failedReason && !hasResult && start && ready === false;\n\n useEffect(() => {\n if (failedReason && quitOnError) {\n process.exit(1);\n }\n }, [failedReason, quitOnError]);\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 // If the task should be skipped, mark it as executed with a success result\n if (shouldSkip) {\n executed.current = true;\n setIsSkipped(true);\n setResult(true as TResult);\n onFinish?.(true as TResult);\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: unknown) => {\n setfailedReason(\n reason instanceof Error ? reason.message : 'Unknown error',\n );\n setFailedDetails(\n reason instanceof Error && reason.stack\n ? reason.stack\n : null,\n );\n setResult(false);\n onFinish?.(false);\n });\n }, [errorDescription, onFinish, runner, start, shouldSkip]);\n\n let message = waitingDescription;\n let variant: StatusMessageProps['variant'] = 'info';\n\n if (failedReason) {\n message = ` ${failedReason}`;\n variant = 'error';\n } else if (isSkipped) {\n message = skipDescription || 'Task skipped';\n variant = 'info';\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 <Spinner label={message} />;\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 : isSkipped\n ? 'gray'\n : 'green'\n }\n >\n {message}{' '}\n {couldStartButNotReady &&\n `— not ready yet${'.'.repeat(dotCount)}`}\n {verbose && failedDetails && (\n <Text color=\"red\">{failedDetails}</Text>\n )}\n </Text>\n </StatusMessage>\n );\n};\n"],"names":["StatusMessage","Text","React","useEffect","useRef","useState","useCrankScriptContext","Spinner","Item","item","runningDescription","waitingDescription","errorDescription","finishedDescription","skipDescription","runner","onFinish","ready","quitOnError","skip","start","executed","interval","dotCount","setDotCount","result","setResult","failedReason","setfailedReason","failedDetails","setFailedDetails","isSkipped","setIsSkipped","verbose","shouldSkip","hasResult","isRunning","isWaiting","couldStartButNotReady","process","exit","current","setInterval","count","clearInterval","then","catch","reason","Error","message","stack","variant","label","bold","color","repeat"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { StatusMessage } from '@inkjs/ui';
2
+ import { Text } from 'ink';
3
+ import React, { Component } from 'react';
4
+ export class ErrorBoundary extends Component {
5
+ static getDerivedStateFromError(error) {
6
+ return {
7
+ error
8
+ };
9
+ }
10
+ render() {
11
+ const { verbose } = this.props;
12
+ const { error } = this.state;
13
+ if (!error) {
14
+ return this.props.children;
15
+ }
16
+ return /*#__PURE__*/ React.createElement(StatusMessage, {
17
+ variant: "error"
18
+ }, /*#__PURE__*/ React.createElement(Text, {
19
+ color: "red"
20
+ }, verbose ? error.stack : error.message));
21
+ }
22
+ constructor(...args){
23
+ super(...args);
24
+ this.state = {};
25
+ }
26
+ }
27
+
28
+ //# sourceMappingURL=ErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../libs/cli/src/components/ErrorBoundary.tsx"],"sourcesContent":["import { StatusMessage } from '@inkjs/ui';\nimport { Text } from 'ink';\nimport React, { Component, ReactNode } from 'react';\n\ninterface State {\n error?: Error;\n}\n\ninterface Props {\n verbose: boolean;\n children: ReactNode;\n}\n\nexport class ErrorBoundary extends Component<Props, State> {\n override state = {} as State;\n\n static getDerivedStateFromError(error: Error): Partial<State> {\n return { error };\n }\n\n override render() {\n const { verbose } = this.props;\n const { error } = this.state;\n\n if (!error) {\n return this.props.children;\n }\n\n return (\n <StatusMessage variant=\"error\">\n <Text color=\"red\">{verbose ? error.stack : error.message}</Text>\n </StatusMessage>\n );\n }\n}\n"],"names":["StatusMessage","Text","React","Component","ErrorBoundary","getDerivedStateFromError","error","render","verbose","props","state","children","variant","color","stack","message"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,QAAQ,YAAY;AAC1C,SAASC,IAAI,QAAQ,MAAM;AAC3B,OAAOC,SAASC,SAAS,QAAmB,QAAQ;AAWpD,OAAO,MAAMC,sBAAsBD;IAG/B,OAAOE,yBAAyBC,KAAY,EAAkB;QAC1D,OAAO;YAAEA;QAAM;IACnB;IAESC,SAAS;QACd,MAAM,EAAEC,OAAO,EAAE,GAAG,IAAI,CAACC,KAAK;QAC9B,MAAM,EAAEH,KAAK,EAAE,GAAG,IAAI,CAACI,KAAK;QAE5B,IAAI,CAACJ,OAAO;YACR,OAAO,IAAI,CAACG,KAAK,CAACE,QAAQ;QAC9B;QAEA,qBACI,oBAACX;YAAcY,SAAQ;yBACnB,oBAACX;YAAKY,OAAM;WAAOL,UAAUF,MAAMQ,KAAK,GAAGR,MAAMS,OAAO;IAGpE;;;aAnBSL,QAAQ,CAAC;;AAoBtB"}
package/src/index.js CHANGED
@@ -30,6 +30,10 @@ cli.register(TranspileCommand);
30
30
  cli.register(CompileCommand);
31
31
  cli.register(GenerateTypesCommand);
32
32
  cli.register(SimulatorCommand);
33
- cli.runExit(args);
33
+ try {
34
+ cli.runExit(args);
35
+ } catch (error) {
36
+ process.exit(1);
37
+ }
34
38
 
35
39
  //# 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\n\nimport { readFileSync } from 'fs';\nimport { join } from 'node:path';\nimport { Builtins, 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 { NewCommand } from '@/cli/commands/NewCommand/NewCommand.js';\nimport { NewLibCommand } from '@/cli/commands/NewLibCommand/index.js';\nimport { SimulatorCommand } from '@/cli/commands/SimulatorCommand/index.js';\nimport { TranspileCommand } from '@/cli/commands/TranspileCommand/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\nprocess.on('SIGINT', function () {\n process.exit();\n});\n\ncli.register(Builtins.HelpCommand);\ncli.register(Builtins.VersionCommand);\ncli.register(DoctorCommand);\ncli.register(NewCommand);\ncli.register(NewLibCommand);\ncli.register(TranspileCommand);\ncli.register(CompileCommand);\ncli.register(GenerateTypesCommand);\ncli.register(SimulatorCommand);\ncli.runExit(args);\n"],"names":["readFileSync","join","Builtins","Cli","CompileCommand","DoctorCommand","GenerateTypesCommand","NewCommand","NewLibCommand","SimulatorCommand","TranspileCommand","RootFolder","packageJsonContents","packageJson","JSON","parse","args","process","argv","slice","cli","binaryLabel","binaryName","binaryVersion","version","on","exit","register","HelpCommand","VersionCommand","runExit"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAEA,SAASA,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,QAAQ,EAAEC,GAAG,QAAQ,YAAY;AAC1C,SAASC,cAAc,QAAQ,yCAAyC;AACxE,SAASC,aAAa,QAAQ,kCAAkC;AAChE,SAASC,oBAAoB,QAAQ,wCAAwC;AAC7E,SAASC,UAAU,QAAQ,0CAA0C;AACrE,SAASC,aAAa,QAAQ,wCAAwC;AACtE,SAASC,gBAAgB,QAAQ,2CAA2C;AAC5E,SAASC,gBAAgB,QAAQ,2CAA2C;AAC5E,SAASC,UAAU,QAAQ,qBAAqB;AAEhD,MAAMC,sBAAsBZ,aACxBC,KAAKU,YAAY,iBACjB;AAEJ,MAAME,cAAcC,KAAKC,KAAK,CAACH;AAE/B,MAAMI,OAAOC,QAAQC,IAAI,CAACC,KAAK,CAAC;AAEhC,MAAMC,MAAM,IAAIjB,IAAI;IAChBkB,aAAa;IACbC,YAAY;IACZC,eAAeV,YAAYW,OAAO;AACtC;AAEAP,QAAQQ,EAAE,CAAC,UAAU;IACjBR,QAAQS,IAAI;AAChB;AAEAN,IAAIO,QAAQ,CAACzB,SAAS0B,WAAW;AACjCR,IAAIO,QAAQ,CAACzB,SAAS2B,cAAc;AACpCT,IAAIO,QAAQ,CAACtB;AACbe,IAAIO,QAAQ,CAACpB;AACba,IAAIO,QAAQ,CAACnB;AACbY,IAAIO,QAAQ,CAACjB;AACbU,IAAIO,QAAQ,CAACvB;AACbgB,IAAIO,QAAQ,CAACrB;AACbc,IAAIO,QAAQ,CAAClB;AACbW,IAAIU,OAAO,CAACd"}
1
+ {"version":3,"sources":["../../../../libs/cli/src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFileSync } from 'fs';\nimport { join } from 'node:path';\nimport { Builtins, 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 { NewCommand } from '@/cli/commands/NewCommand/NewCommand.js';\nimport { NewLibCommand } from '@/cli/commands/NewLibCommand/index.js';\nimport { SimulatorCommand } from '@/cli/commands/SimulatorCommand/index.js';\nimport { TranspileCommand } from '@/cli/commands/TranspileCommand/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\nprocess.on('SIGINT', function () {\n process.exit();\n});\n\ncli.register(Builtins.HelpCommand);\ncli.register(Builtins.VersionCommand);\ncli.register(DoctorCommand);\ncli.register(NewCommand);\ncli.register(NewLibCommand);\ncli.register(TranspileCommand);\ncli.register(CompileCommand);\ncli.register(GenerateTypesCommand);\ncli.register(SimulatorCommand);\n\ntry {\n cli.runExit(args);\n} catch (error) {\n process.exit(1);\n}\n"],"names":["readFileSync","join","Builtins","Cli","CompileCommand","DoctorCommand","GenerateTypesCommand","NewCommand","NewLibCommand","SimulatorCommand","TranspileCommand","RootFolder","packageJsonContents","packageJson","JSON","parse","args","process","argv","slice","cli","binaryLabel","binaryName","binaryVersion","version","on","exit","register","HelpCommand","VersionCommand","runExit","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAEA,SAASA,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,QAAQ,EAAEC,GAAG,QAAQ,YAAY;AAC1C,SAASC,cAAc,QAAQ,yCAAyC;AACxE,SAASC,aAAa,QAAQ,kCAAkC;AAChE,SAASC,oBAAoB,QAAQ,wCAAwC;AAC7E,SAASC,UAAU,QAAQ,0CAA0C;AACrE,SAASC,aAAa,QAAQ,wCAAwC;AACtE,SAASC,gBAAgB,QAAQ,2CAA2C;AAC5E,SAASC,gBAAgB,QAAQ,2CAA2C;AAC5E,SAASC,UAAU,QAAQ,qBAAqB;AAEhD,MAAMC,sBAAsBZ,aACxBC,KAAKU,YAAY,iBACjB;AAEJ,MAAME,cAAcC,KAAKC,KAAK,CAACH;AAE/B,MAAMI,OAAOC,QAAQC,IAAI,CAACC,KAAK,CAAC;AAEhC,MAAMC,MAAM,IAAIjB,IAAI;IAChBkB,aAAa;IACbC,YAAY;IACZC,eAAeV,YAAYW,OAAO;AACtC;AAEAP,QAAQQ,EAAE,CAAC,UAAU;IACjBR,QAAQS,IAAI;AAChB;AAEAN,IAAIO,QAAQ,CAACzB,SAAS0B,WAAW;AACjCR,IAAIO,QAAQ,CAACzB,SAAS2B,cAAc;AACpCT,IAAIO,QAAQ,CAACtB;AACbe,IAAIO,QAAQ,CAACpB;AACba,IAAIO,QAAQ,CAACnB;AACbY,IAAIO,QAAQ,CAACjB;AACbU,IAAIO,QAAQ,CAACvB;AACbgB,IAAIO,QAAQ,CAACrB;AACbc,IAAIO,QAAQ,CAAClB;AAEb,IAAI;IACAW,IAAIU,OAAO,CAACd;AAChB,EAAE,OAAOe,OAAO;IACZd,QAAQS,IAAI,CAAC;AACjB"}