Skip to content

Commit f40eb99

Browse files
authored
Merge pull request #714 from Stansom/main
JS: Fix export bug, support multiple type imports, and ensure type import semicolon consistency
2 parents e1cd2d2 + 5c32d89 commit f40eb99

File tree

8 files changed

+58
-12
lines changed

8 files changed

+58
-12
lines changed

dev/typescript/moped.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,6 @@ export interface IMoped {
55
countWheels: () => number;
66
getEngineDisplacement: () => number;
77
}
8+
9+
export type ConvertOptions = string;
10+
export type OptimizationOptions = number;

dev/typescript/sandbox.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ import { minus } from "../javascript/math.js";
7272

7373
minus(1, 2);
7474

75-
import type { IMoped } from "./moped.ts";
75+
import type { IMoped } from "./moped.ts"
7676

7777
class Moped implements IMoped {
7878
wheels: number
@@ -324,3 +324,13 @@ for (let user of users) {
324324
}
325325

326326
process.stderr.write("error! some error occurred");
327+
328+
import {
329+
type ConvertOptions as CrateConvertOptions,
330+
type OptimizationOptions,
331+
} from "./moped";
332+
333+
export const expFn = () => "export fn";
334+
expFn()
335+
export function funFun() { return "export function Fun" }
336+
export { }

fnl/conjure/client/javascript/import-replacer.fnl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717

1818
(fn is-type-import? [node code]
1919
(let [first-child (node:child 0)
20-
second-child (node:child 1)]
21-
(and first-child
20+
second-child (node:child 1)
21+
contains-type (string.find (tsc.get-text second-child code) "type")]
22+
(or (and first-child
2223
(= (tsc.get-text first-child code) "import")
2324
second-child
24-
(= (tsc.get-text second-child code) "type"))))
25+
(= (tsc.get-text second-child code) "type"))
26+
contains-type)))
2527

2628
(fn clean-named-imports [node code]
2729
(let [text (tsc.get-text node code)]
@@ -34,7 +36,8 @@
3436
(if (and source.resolved-path source.text)
3537
(-> (tsc.get-text node code)
3638
(string.gsub (vim.pesc source.text)
37-
(string.format "\"%s\"" source.resolved-path)))
39+
(string.format "\"%s\"" source.resolved-path))
40+
(.. ";"))
3841
(tsc.get-text node code)))
3942

4043
(fn transform-plain-import [source]

fnl/conjure/client/javascript/stdio.fnl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134

135135
;; To get rid of the "Uncaught SyntaxError: Unexpected token 'export'",
136136
;; the REPL silently evaluates the following expression:
137-
(set M.initialise-repl-code "1+1")
137+
(set M.initialise-repl-code "")
138138

139139
(fn repl-command-for-filetype []
140140
(if
@@ -162,6 +162,7 @@
162162
:on-success
163163
(fn []
164164
(display-repl-status :started)
165+
(let [repl (state :repl)] (repl.send "1+1;"))
165166
(with-repl-or-warn
166167
(fn [repl]
167168
(repl.send

fnl/conjure/client/javascript/transformers.fnl

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,17 @@
8282
(set node-handlers.call_expression
8383
(ir.call-expression node-handlers.default))
8484

85+
(set node-handlers.export_statement
86+
(fn [node code]
87+
(let [child (node:child 1)]
88+
(case (child:type)
89+
(where (or "interface_declaration" "class_declaration"))
90+
(node-handlers.default node code)
91+
92+
"export_clause" ""
93+
94+
_ (node-handlers.default child code)))))
95+
8596
(each [_ t (pairs
8697
[:expression_statement
8798
:variable_declaration
@@ -90,11 +101,11 @@
90101
:break_statement
91102
:continue_statement
92103
:debugger_statement
93-
:export_statement
94104
:class_declaration
95105
:field_definition
96106
:public_field_definition
97-
:function_declaration])]
107+
:function_declaration ])]
108+
98109
(set (. node-handlers t) handle-statement))
99110

100111
(fn M.transform [s]

lua/conjure/client/javascript/import-replacer.lua

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lua/conjure/client/javascript/stdio.lua

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lua/conjure/client/javascript/transformers.lua

Lines changed: 14 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)