Skip to content

Commit 93c70c2

Browse files
committed
fix platform scripts to avoid import
1 parent 687b863 commit 93c70c2

3 files changed

Lines changed: 79 additions & 122 deletions

File tree

src/platform/bun-hyperscript.js

Lines changed: 26 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env bun
22

33
import _hyperscript from '../_hyperscript.js';
4-
import { Feature } from '../parsetree/base.js';
54
import path from 'node:path';
65

76
const hsExt = '._hs';
@@ -14,48 +13,35 @@ function run(modulePath) {
1413
.catch(e => console.error("Cannot execute file:", e));
1514
}
1615

17-
class RequireFeature extends Feature {
18-
static keyword = "require";
19-
20-
constructor(id, name) {
21-
super();
22-
this.moduleId = id;
23-
this.moduleName = name;
24-
}
25-
26-
static parse(parser) {
27-
if (!parser.matchToken("require")) return;
28-
var id = parser.requireElement("nakedString").evalStatically();
29-
var name;
30-
if (parser.matchToken("as")) {
31-
name = parser.requireTokenType("IDENTIFIER").value;
32-
} else {
33-
name = path.basename(id).replace(/\.[^.]*$/, '');
34-
}
35-
return new RequireFeature(id, name);
16+
_hyperscript.addFeature("require", function parseRequire(parser) {
17+
if (!parser.matchToken("require")) return;
18+
const id = parser.requireElement("nakedString").evalStatically();
19+
let name;
20+
if (parser.matchToken("as")) {
21+
name = parser.requireTokenType("IDENTIFIER").value;
22+
} else {
23+
name = path.basename(id).replace(/\.[^.]*$/, '');
3624
}
37-
38-
async install(target, source, args, runtime) {
39-
var id = this.moduleId;
40-
if (id.startsWith('./') || id.startsWith('../')) {
41-
id = path.join(args.module.dir, id);
42-
}
43-
44-
var mod;
45-
if (id.endsWith(hsExt)) {
46-
mod = await run(id);
47-
} else {
48-
var file = Bun.file(id + hsExt);
49-
if (await file.exists()) {
50-
mod = await run(id + hsExt);
25+
return {
26+
async install(target, source, args, runtime) {
27+
let resolved = id;
28+
if (resolved.startsWith('./') || resolved.startsWith('../')) {
29+
resolved = path.join(args.module.dir, resolved);
30+
}
31+
let mod;
32+
if (resolved.endsWith(hsExt)) {
33+
mod = await run(resolved);
5134
} else {
52-
mod = await import(id);
35+
const file = Bun.file(resolved + hsExt);
36+
if (await file.exists()) {
37+
mod = await run(resolved + hsExt);
38+
} else {
39+
mod = await import(resolved);
40+
}
5341
}
42+
runtime.assignToNamespace(target, [], name, mod);
5443
}
55-
runtime.assignToNamespace(target, [], this.moduleName, mod);
56-
}
57-
}
58-
59-
_hyperscript.addFeature(RequireFeature.keyword, RequireFeature.parse.bind(RequireFeature));
44+
};
45+
});
6046

6147
run(process.argv[2]);

src/platform/deno-hyperscript.js

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import _hyperscript from '../_hyperscript.js';
2-
import { Feature } from '../parsetree/base.js';
32
import * as path from 'jsr:@std/path';
43

54
const hsExt = '._hs';
@@ -12,49 +11,36 @@ export function run(modulePath) {
1211
.catch(e => console.error("Cannot execute file:", e));
1312
}
1413

15-
class ImportFeature extends Feature {
16-
static keyword = "import";
17-
18-
constructor(id, name) {
19-
super();
20-
this.moduleId = id;
21-
this.moduleName = name;
22-
}
23-
24-
static parse(parser) {
25-
if (!parser.matchToken("import")) return;
26-
var id = parser.requireElement("nakedString").evalStatically();
27-
var name;
28-
if (parser.matchToken("as")) {
29-
name = parser.requireTokenType("IDENTIFIER").value;
30-
} else {
31-
name = path.basename(id).replace(/\.[^.]*$/, '');
32-
}
33-
return new ImportFeature(id, name);
14+
_hyperscript.addFeature("import", function parseImport(parser) {
15+
if (!parser.matchToken("import")) return;
16+
const id = parser.requireElement("nakedString").evalStatically();
17+
let name;
18+
if (parser.matchToken("as")) {
19+
name = parser.requireTokenType("IDENTIFIER").value;
20+
} else {
21+
name = path.basename(id).replace(/\.[^.]*$/, '');
3422
}
35-
36-
async install(target, source, args, runtime) {
37-
var id = this.moduleId;
38-
if (id.startsWith('./') || id.startsWith('../')) {
39-
id = path.join(args.module.dir, id);
40-
}
41-
42-
var mod;
43-
if (id.endsWith(hsExt)) {
44-
mod = await run(id);
45-
} else {
46-
try {
47-
await Deno.stat(id + hsExt);
48-
mod = await run(id + hsExt);
49-
} catch {
50-
mod = await import(id);
23+
return {
24+
async install(target, source, args, runtime) {
25+
let resolved = id;
26+
if (resolved.startsWith('./') || resolved.startsWith('../')) {
27+
resolved = path.join(args.module.dir, resolved);
28+
}
29+
let mod;
30+
if (resolved.endsWith(hsExt)) {
31+
mod = await run(resolved);
32+
} else {
33+
try {
34+
await Deno.stat(resolved + hsExt);
35+
mod = await run(resolved + hsExt);
36+
} catch {
37+
mod = await import(resolved);
38+
}
5139
}
40+
runtime.assignToNamespace(target, [], name, mod);
5241
}
53-
runtime.assignToNamespace(target, [], this.moduleName, mod);
54-
}
55-
}
56-
57-
_hyperscript.addFeature(ImportFeature.keyword, ImportFeature.parse.bind(ImportFeature));
42+
};
43+
});
5844

5945
export default _hyperscript;
6046

src/platform/node-hyperscript.js

Lines changed: 26 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#!/usr/bin/env node
22

33
import _hyperscript from '../_hyperscript.js';
4-
import { Parser } from '../core/parser.js';
5-
import { Feature } from '../parsetree/base.js';
64
import fs from 'node:fs';
75
import path from 'node:path';
86
import { createRequire } from 'node:module';
@@ -23,47 +21,34 @@ function run(modulePath) {
2321
.catch(e => console.error("Cannot execute file:", e));
2422
}
2523

26-
class RequireFeature extends Feature {
27-
static keyword = "require";
28-
29-
constructor(id, name) {
30-
super();
31-
this.moduleId = id;
32-
this.moduleName = name;
33-
}
34-
35-
static parse(parser) {
36-
if (!parser.matchToken("require")) return;
37-
var id = parser.requireElement("nakedString").evalStatically();
38-
var name;
39-
if (parser.matchToken("as")) {
40-
name = parser.requireTokenType("IDENTIFIER").value;
41-
} else {
42-
name = path.basename(id).replace(/\.[^.]*$/, '');
43-
}
44-
return new RequireFeature(id, name);
24+
_hyperscript.addFeature("require", function parseRequire(parser) {
25+
if (!parser.matchToken("require")) return;
26+
const id = parser.requireElement("nakedString").evalStatically();
27+
let name;
28+
if (parser.matchToken("as")) {
29+
name = parser.requireTokenType("IDENTIFIER").value;
30+
} else {
31+
name = path.basename(id).replace(/\.[^.]*$/, '');
4532
}
46-
47-
install(target, source, args, runtime) {
48-
var id = this.moduleId;
49-
if (id.startsWith('./') || id.startsWith('../')) {
50-
id = path.join(args.module.dir, id);
51-
}
52-
53-
var mod;
54-
if (id.endsWith(hsExt)) {
55-
mod = run(id);
56-
} else if (fs.existsSync(id + hsExt)) {
57-
mod = run(id + hsExt);
58-
} else {
59-
var nodeRequire = createRequire(args.module.id);
60-
mod = nodeRequire(id);
33+
return {
34+
install(target, source, args, runtime) {
35+
let resolved = id;
36+
if (resolved.startsWith('./') || resolved.startsWith('../')) {
37+
resolved = path.join(args.module.dir, resolved);
38+
}
39+
let mod;
40+
if (resolved.endsWith(hsExt)) {
41+
mod = run(resolved);
42+
} else if (fs.existsSync(resolved + hsExt)) {
43+
mod = run(resolved + hsExt);
44+
} else {
45+
const nodeRequire = createRequire(args.module.id);
46+
mod = nodeRequire(resolved);
47+
}
48+
runtime.assignToNamespace(target, [], name, mod);
6149
}
62-
runtime.assignToNamespace(target, [], this.moduleName, mod);
63-
}
64-
}
65-
66-
_hyperscript.addFeature(RequireFeature.keyword, RequireFeature.parse.bind(RequireFeature));
50+
};
51+
});
6752

6853
// ===== Validate mode =====
6954

0 commit comments

Comments
 (0)