Skip to content
This repository has been archived by the owner on Nov 7, 2023. It is now read-only.

Commit

Permalink
refactor(extensions): add map utility method: listFromMap
Browse files Browse the repository at this point in the history
  • Loading branch information
zyrouge committed Oct 26, 2021
1 parent 1bbfde2 commit 0439ca0
Show file tree
Hide file tree
Showing 19 changed files with 211 additions and 189 deletions.
4 changes: 4 additions & 0 deletions packages/extensions/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,7 @@
## 0.0.15

- Added language utitlity methods: `allLanguages`, `validLanguages`

## 0.0.16

- Added map utilitu method: `listFromMap`
28 changes: 14 additions & 14 deletions packages/extensions/lib/extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -162,20 +162,20 @@ abstract class ExtensionUtils {
try {
return runner.invoke('defaultLocale') as String;
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
}

static Future<AnimeExtractor> transpileToAnimeExtractor(
final ResolvedExtension ext,
) async {
final Hetu runner = await createHetu();
final Hetu runner = await HetuManager.create();

try {
await runner.eval(appendHetuExternals(ext.code));
await runner.eval(HetuManager.appendDefinitions(ext.code));
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}

Expand All @@ -202,7 +202,7 @@ abstract class ExtensionUtils {
)
.toList();
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand All @@ -218,7 +218,7 @@ abstract class ExtensionUtils {

return AnimeInfo.fromJson(result as Map<dynamic, dynamic>);
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand All @@ -238,7 +238,7 @@ abstract class ExtensionUtils {
)
.toList();
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand All @@ -248,12 +248,12 @@ abstract class ExtensionUtils {
static Future<MangaExtractor> transpileToMangaExtractor(
final ResolvedExtension ext,
) async {
final Hetu runner = await createHetu();
final Hetu runner = await HetuManager.create();

try {
await runner.eval(appendHetuExternals(ext.code));
await runner.eval(HetuManager.appendDefinitions(ext.code));
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}

Expand All @@ -280,7 +280,7 @@ abstract class ExtensionUtils {
)
.toList();
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand All @@ -296,7 +296,7 @@ abstract class ExtensionUtils {

return MangaInfo.fromJson(result as Map<dynamic, dynamic>);
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand All @@ -316,7 +316,7 @@ abstract class ExtensionUtils {
)
.toList();
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand All @@ -331,7 +331,7 @@ abstract class ExtensionUtils {

return ImageInfo.fromJson(result as Map<dynamic, dynamic>);
} on HTError catch (err) {
editHetuError(err);
HetuManager.editError(err);
rethrow;
}
},
Expand Down
107 changes: 0 additions & 107 deletions packages/extensions/lib/hetu/externals.dart

This file was deleted.

4 changes: 4 additions & 0 deletions packages/extensions/lib/hetu/helpers/crypto.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ import 'dart:typed_data';
import 'package:crypto/crypto.dart';
import 'package:encrypt/encrypt.dart' as crypto;

const String cryptoDefinitions = '''
external fun decryptCryptoJsAES(salted: str, decrypter: str, length: num) -> str;
''';

String decryptCryptoJsAES(
final String salted,
final String decrypter,
Expand Down
5 changes: 5 additions & 0 deletions packages/extensions/lib/hetu/helpers/error.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const String errorDefinitions = '''
external fun throwError(err: str) -> void;
''';

void throwError(final String err) => throw err;
11 changes: 11 additions & 0 deletions packages/extensions/lib/hetu/helpers/future.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
import 'package:hetu_script/hetu_script.dart';

const String futureDefinitions = '''
const ResolveFutureCallback: type = fun(err, result); // err - str or null, result - any or null (Any one will be null)
external fun resolveFuture(future, fn: ResolveFutureCallback);
const ResolveFutureAllCallback: type = fun(err, result); // err - str or null, result - List or null (Any one will be null)
external fun resolveFutureAll(futures: List, fn: ResolveFutureAllCallback);
const WaitCallback: type = fun();
external fun wait(duration: num, fn: WaitCallback);
''';

Future<dynamic> resolveFuture(
final Future<dynamic> future,
final HTFunction fn,
Expand Down
5 changes: 5 additions & 0 deletions packages/extensions/lib/hetu/helpers/fuzzy.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import 'package:fuzzy/data/result.dart';
import 'package:fuzzy/fuzzy.dart';

const String fuzzyDefinitions = '''
const FuzzySearcher: type = fun(terms: str, limit: num) -> List<Map>;
external fun createFuzzy(data: List<Map>, keys: List<Map>) -> FuzzySearcher;
''';

List<Map<dynamic, dynamic>> Function(String, int) createFuzzy(
final List<dynamic> data,
final List<dynamic> keys,
Expand Down
12 changes: 12 additions & 0 deletions packages/extensions/lib/hetu/helpers/helpers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export './crypto.dart';
export './error.dart';
export './future.dart';
export './fuzzy.dart';
export './html.dart';
export './http.dart';
export './json.dart';
export './languages.dart';
export './list.dart';
export './map.dart';
export './qs.dart';
export './regex.dart';
14 changes: 14 additions & 0 deletions packages/extensions/lib/hetu/helpers/html.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@ import 'package:hetu_script/hetu_script.dart';
import 'package:html/dom.dart' as dom;
import 'package:html/parser.dart' as html;

const String htmlDefinitions = '''
external class HtmlElement {
const classes: List<str>;
const id; // str or null
const text; // str or null
const innerHtml: str;
const outerHtml: str;
const attributes: Map<str>;
fun querySelector(selector: str); // returns HtmlElement or null
fun querySelectorAll(selector: str) -> List<HtmlElement>;
}
external fun parseHtml(html: str) -> HtmlElement;
''';

Map<String, String> _mapElementAttributes(
final Map<Object, String> attributes,
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import 'package:http/http.dart' as http;
import '../../utils/http.dart';

const String httpDefinitions = '''
external fun fetch(data: Map);
external fun httpUserAgent() -> str;
external fun ensureURL(url: str) -> str;
''';

Future<Map<dynamic, dynamic>> fetch(
final Map<dynamic, dynamic> data,
) async {
Expand Down
5 changes: 5 additions & 0 deletions packages/extensions/lib/hetu/helpers/json.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import 'dart:convert';

const String jsonDefinitions = '''
external fun jsonEncode(data) -> str;
external fun jsonDecode(data: str);
''';

String jsonEncode(final dynamic data) => json.encode(data);

dynamic jsonDecode(final String data) => json.decode(data);
5 changes: 5 additions & 0 deletions packages/extensions/lib/hetu/helpers/languages.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import 'package:utilx/utilities/languages.dart';

const String languagesDefinitions = '''
external fun isValidLanguage(lang: str) -> bool;
external fun allLanguages() -> List<str>;
''';

final List<String> _languages = LanguageUtils.languageCodeMap.keys.toList();

bool isValidLanguages(final String language) => _languages.contains(language);
Expand Down
17 changes: 17 additions & 0 deletions packages/extensions/lib/hetu/helpers/list.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
import 'package:hetu_script/hetu_script.dart';

const String listDefinitions = '''
const ListMapper: type = fun(i: num, item: any) -> any;
external fun mapList(data: List<any>, mapper: ListMapper) -> str;
const ListFilterer: type = fun(i: num, item: any) -> bool;
external fun filterList(data: List<any>, filterer: ListFilterer) -> List<any>;
external fun findList(data: List<any>, filterer: ListFilterer); // returns any or null
const ListEachCb: type = fun(i: num, item: any) -> any;
external fun eachList(data: List<any>, cb: ListEachCb) -> void;
external fun mergeList(m1: List<any>, m2: List<any>) -> List<any>;
external fun rangeList(a: num, b: num) -> List<int>;
external fun flattenList(data: List, level: num) -> List;
external fun deepFlattenList(data: List) -> List;
''';

List<int> rangeList(final int a, final int b) {
final int length = (b - a).abs();
return b > a
Expand Down
26 changes: 21 additions & 5 deletions packages/extensions/lib/hetu/helpers/map.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import 'package:hetu_script/hetu_script.dart';

const String mapDefinitions = '''
const MapEachCb: type = fun(key: any, item: any) -> any;
external fun eachMap(data: Map, cb: ListEachCb) -> void;
external fun mergeMap(m1: Map, m2: Map) -> Map;
''';

Map<dynamic, dynamic> mergeMap(
final Map<dynamic, dynamic> m1,
final Map<dynamic, dynamic> m2,
Expand All @@ -13,9 +19,19 @@ void eachMap(
final Map<dynamic, dynamic> data,
final HTFunction fn,
) {
data.forEach(
(final dynamic k, final dynamic v) {
fn.call(positionalArgs: <dynamic>[k, v]);
},
);
for (final MapEntry<dynamic, dynamic> x in data.entries) {
if (fn.call(positionalArgs: <dynamic>[x.key, x.value]) == false) {
break;
}
}
}

List<Map<dynamic, dynamic>> listFromMap(final Map<dynamic, dynamic> data) =>
data.entries
.map(
(final MapEntry<dynamic, dynamic> x) => <dynamic, dynamic>{
'key': x.key,
'value': x.value,
},
)
.toList();

0 comments on commit 0439ca0

Please sign in to comment.