gt-react-native 0.0.1-alpha.9 → 0.0.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.
- package/README.md +34 -11
- package/lib/module/errors-dir/constants.js +1 -1
- package/lib/module/errors-dir/constants.js.map +1 -1
- package/lib/module/errors-dir/errors.js +5 -0
- package/lib/module/errors-dir/errors.js.map +1 -0
- package/lib/module/errors-dir/warnings.js +12 -0
- package/lib/module/errors-dir/warnings.js.map +1 -0
- package/lib/module/index.js +1 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal.js +4 -0
- package/lib/module/internal.js.map +1 -0
- package/lib/module/plugin-dir/index.js +49 -0
- package/lib/module/plugin-dir/index.js.map +1 -0
- package/lib/module/plugin-dir/types.js +2 -0
- package/lib/module/plugin-dir/types.js.map +1 -0
- package/lib/module/plugin-dir/utils/resolveLocales.js +69 -0
- package/lib/module/plugin-dir/utils/resolveLocales.js.map +1 -0
- package/lib/module/plugin.js +4 -0
- package/lib/module/plugin.js.map +1 -0
- package/lib/module/tools/testLocalePolyfill.js +64 -0
- package/lib/module/tools/testLocalePolyfill.js.map +1 -0
- package/lib/typescript/src/errors-dir/constants.d.ts +1 -1
- package/lib/typescript/src/errors-dir/constants.d.ts.map +1 -1
- package/lib/typescript/src/errors-dir/errors.d.ts +2 -0
- package/lib/typescript/src/errors-dir/errors.d.ts.map +1 -0
- package/lib/typescript/src/errors-dir/warnings.d.ts +4 -0
- package/lib/typescript/src/errors-dir/warnings.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/internal.d.ts +2 -0
- package/lib/typescript/src/internal.d.ts.map +1 -0
- package/lib/typescript/src/plugin-dir/index.d.ts +6 -0
- package/lib/typescript/src/plugin-dir/index.d.ts.map +1 -0
- package/lib/typescript/src/plugin-dir/types.d.ts +10 -0
- package/lib/typescript/src/plugin-dir/types.d.ts.map +1 -0
- package/lib/typescript/src/plugin-dir/utils/resolveLocales.d.ts +13 -0
- package/lib/typescript/src/plugin-dir/utils/resolveLocales.d.ts.map +1 -0
- package/lib/typescript/src/plugin.d.ts +2 -0
- package/lib/typescript/src/plugin.d.ts.map +1 -0
- package/lib/typescript/src/tools/testLocalePolyfill.d.ts +12 -0
- package/lib/typescript/src/tools/testLocalePolyfill.d.ts.map +1 -0
- package/lib/typescript/vitest.config.d.ts +3 -0
- package/lib/typescript/vitest.config.d.ts.map +1 -0
- package/package.json +20 -13
- package/src/errors-dir/constants.ts +1 -1
- package/src/errors-dir/errors.ts +3 -0
- package/src/errors-dir/warnings.ts +14 -0
- package/src/index.tsx +0 -2
- package/src/internal.ts +1 -0
- package/src/plugin-dir/index.ts +80 -0
- package/src/plugin-dir/types.ts +10 -0
- package/src/plugin-dir/utils/resolveLocales.ts +95 -0
- package/src/plugin.ts +1 -0
- package/src/tools/testLocalePolyfill.ts +82 -0
- package/android/app/build/generated/source/codegen/java/com/facebook/fbreact/specs/NativeGtReactNativeSpec.java +0 -51
- package/android/app/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
- package/android/app/build/generated/source/codegen/jni/GtReactNativeSpec-generated.cpp +0 -50
- package/android/app/build/generated/source/codegen/jni/GtReactNativeSpec.h +0 -31
- package/android/app/build/generated/source/codegen/jni/react/renderer/components/GtReactNativeSpec/GtReactNativeSpecJSI-generated.cpp +0 -51
- package/android/app/build/generated/source/codegen/jni/react/renderer/components/GtReactNativeSpec/GtReactNativeSpecJSI.h +0 -98
- package/lib/module/utils/polyfill.js +0 -39
- package/lib/module/utils/polyfill.js.map +0 -1
- package/lib/typescript/src/utils/polyfill.d.ts +0 -29
- package/lib/typescript/src/utils/polyfill.d.ts.map +0 -1
- package/src/utils/polyfill.ts +0 -51
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import type { PluginObj, types } from '@babel/core';
|
|
3
|
+
import type { PluginOptions } from './types';
|
|
4
|
+
import { resolveLocales } from './utils/resolveLocales';
|
|
5
|
+
|
|
6
|
+
export default function (
|
|
7
|
+
babel: { types: typeof types },
|
|
8
|
+
{
|
|
9
|
+
locales,
|
|
10
|
+
config,
|
|
11
|
+
configFilePath,
|
|
12
|
+
entryPointFilePath = path.resolve(process.cwd(), 'src', 'App.tsx'),
|
|
13
|
+
}: PluginOptions
|
|
14
|
+
): PluginObj {
|
|
15
|
+
const { types: t } = babel;
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
name: 'gt-react-native/plugin',
|
|
19
|
+
visitor: {
|
|
20
|
+
Program(programPath, state) {
|
|
21
|
+
const currentFilePath = path.resolve(
|
|
22
|
+
state.filename || state.file.opts.filename || ''
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
// Only apply polyfills to files that import gt-react-native or generaltranslation
|
|
26
|
+
if (currentFilePath !== entryPointFilePath) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const resolvedLocales = resolveLocales({
|
|
31
|
+
locales,
|
|
32
|
+
config,
|
|
33
|
+
configFilePath,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// TODO: smart imports based on if the polyfill is required, do this as a wrapper around AppRegistry.registerComponent()
|
|
37
|
+
const imports = [
|
|
38
|
+
'@formatjs/intl-getcanonicallocales/polyfill',
|
|
39
|
+
'@formatjs/intl-locale/polyfill',
|
|
40
|
+
'@formatjs/intl-displaynames/polyfill',
|
|
41
|
+
'@formatjs/intl-listformat/polyfill',
|
|
42
|
+
'@formatjs/intl-pluralrules/polyfill-force', // https://github.com/formatjs/formatjs/issues/4463
|
|
43
|
+
'@formatjs/intl-numberformat/polyfill',
|
|
44
|
+
'@formatjs/intl-relativetimeformat/polyfill',
|
|
45
|
+
'@formatjs/intl-datetimeformat/polyfill',
|
|
46
|
+
'@formatjs/intl-datetimeformat/add-all-tz',
|
|
47
|
+
...resolvedLocales.flatMap((locale) => [
|
|
48
|
+
`@formatjs/intl-displaynames/locale-data/${locale}`,
|
|
49
|
+
`@formatjs/intl-listformat/locale-data/${locale}`,
|
|
50
|
+
`@formatjs/intl-pluralrules/locale-data/${locale}`,
|
|
51
|
+
`@formatjs/intl-numberformat/locale-data/${locale}`,
|
|
52
|
+
`@formatjs/intl-relativetimeformat/locale-data/${locale}`,
|
|
53
|
+
`@formatjs/intl-datetimeformat/locale-data/${locale}`,
|
|
54
|
+
]),
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const existingImports = new Set<string>();
|
|
58
|
+
programPath.node.body.forEach((node) => {
|
|
59
|
+
if (
|
|
60
|
+
t.isImportDeclaration(node) &&
|
|
61
|
+
typeof node.source.value === 'string' &&
|
|
62
|
+
imports.includes(node.source.value)
|
|
63
|
+
) {
|
|
64
|
+
existingImports.add(node.source.value);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const importsToAdd = imports.filter((imp) => !existingImports.has(imp));
|
|
69
|
+
|
|
70
|
+
if (importsToAdd.length > 0) {
|
|
71
|
+
const newImports = importsToAdd.map((importPath) =>
|
|
72
|
+
t.importDeclaration([], t.stringLiteral(importPath))
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
programPath.node.body.unshift(...newImports);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface PluginOptions {
|
|
2
|
+
/* List of locales to polyfill */
|
|
3
|
+
locales?: string[];
|
|
4
|
+
/* Gt config object */
|
|
5
|
+
config?: { defaultLocale: string; locales: string[] } & Record<string, any>;
|
|
6
|
+
/* Path to the gt config file */
|
|
7
|
+
configFilePath?: string;
|
|
8
|
+
/* Resolved from package.json */
|
|
9
|
+
entryPointFilePath?: string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import {
|
|
3
|
+
couldNotLocateConfigWarning,
|
|
4
|
+
invalidLocalesWarning,
|
|
5
|
+
resolveLocalesFailedWarning,
|
|
6
|
+
} from '../../errors-dir/warnings';
|
|
7
|
+
import { libraryDefaultLocale } from 'generaltranslation/internal';
|
|
8
|
+
import { failedToReadConfigFileError } from '../../errors-dir/errors';
|
|
9
|
+
import { getSupportedLocale } from '@generaltranslation/supported-locales';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
|
|
12
|
+
const DEFAULT_CONFIG_FILE_PATHS = [
|
|
13
|
+
path.join(process.cwd(), 'gt.config.json'),
|
|
14
|
+
path.join(process.cwd(), '.locadex', 'gt.config.json'),
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Given a list of locales or a config object or a path to a config file, return a list of locales to polyfill.
|
|
19
|
+
* Preference order: locales > config > configFilePaths > library default locale
|
|
20
|
+
*/
|
|
21
|
+
export function resolveLocales({
|
|
22
|
+
locales,
|
|
23
|
+
config,
|
|
24
|
+
configFilePath,
|
|
25
|
+
}: {
|
|
26
|
+
locales?: string[];
|
|
27
|
+
config?: { defaultLocale: string; locales: string[] } & Record<string, any>;
|
|
28
|
+
configFilePath?: string;
|
|
29
|
+
}): string[] {
|
|
30
|
+
let result: string[] = [];
|
|
31
|
+
|
|
32
|
+
// Resolve locales from the given options
|
|
33
|
+
if (locales) {
|
|
34
|
+
result = Array.from(new Set(locales));
|
|
35
|
+
} else if (config) {
|
|
36
|
+
result = Array.from(new Set([config.defaultLocale, ...config.locales]));
|
|
37
|
+
} else {
|
|
38
|
+
result = resolveLocalesFromConfig(configFilePath);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Validate the result
|
|
42
|
+
const invalidLocales = result.filter((locale) => !getSupportedLocale(locale));
|
|
43
|
+
if (invalidLocales.length) {
|
|
44
|
+
console.warn(invalidLocalesWarning(invalidLocales));
|
|
45
|
+
result = result.filter((locale) => !invalidLocales.includes(locale));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Fallback to default locale if no locales were found
|
|
49
|
+
if (result.length === 0) {
|
|
50
|
+
console.warn(resolveLocalesFailedWarning);
|
|
51
|
+
result = [libraryDefaultLocale];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Resolve locales from a config file
|
|
59
|
+
* @param configFilePath - The path to the config file
|
|
60
|
+
* @returns A list of locales
|
|
61
|
+
*/
|
|
62
|
+
function resolveLocalesFromConfig(configFilePath: string | undefined) {
|
|
63
|
+
const configFilePaths = [
|
|
64
|
+
...(configFilePath ? [configFilePath] : []),
|
|
65
|
+
...DEFAULT_CONFIG_FILE_PATHS,
|
|
66
|
+
];
|
|
67
|
+
let result: string[] = [];
|
|
68
|
+
|
|
69
|
+
for (const filePath of configFilePaths) {
|
|
70
|
+
try {
|
|
71
|
+
if (!fs.existsSync(filePath)) {
|
|
72
|
+
console.warn(couldNotLocateConfigWarning(filePath));
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const resolvedConfig = JSON.parse(fs.readFileSync(filePath, 'utf8')) as {
|
|
77
|
+
defaultLocale?: string;
|
|
78
|
+
locales?: string[];
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
result = Array.from(
|
|
82
|
+
new Set([
|
|
83
|
+
...(resolvedConfig.defaultLocale
|
|
84
|
+
? [resolvedConfig.defaultLocale]
|
|
85
|
+
: []),
|
|
86
|
+
...(resolvedConfig.locales || []),
|
|
87
|
+
])
|
|
88
|
+
);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error(failedToReadConfigFileError(filePath), error);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
package/src/plugin.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './plugin-dir';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export function testLocalePolyfill(locale = 'en-US') {
|
|
2
|
+
const problems = [];
|
|
3
|
+
|
|
4
|
+
// 1. basic presence
|
|
5
|
+
if (!global.Intl) problems.push('Intl missing entirely');
|
|
6
|
+
const apis = [
|
|
7
|
+
'Locale',
|
|
8
|
+
'NumberFormat',
|
|
9
|
+
'DateTimeFormat',
|
|
10
|
+
'PluralRules',
|
|
11
|
+
'RelativeTimeFormat',
|
|
12
|
+
'ListFormat',
|
|
13
|
+
'DisplayNames',
|
|
14
|
+
];
|
|
15
|
+
apis.forEach((a) => {
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
if (!Intl[a]) problems.push(`Intl.${a} missing`);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// 2. locale actually supported (no silent fallback)
|
|
21
|
+
const dtfSupported =
|
|
22
|
+
Intl.DateTimeFormat.supportedLocalesOf([locale])[0] === locale;
|
|
23
|
+
const nfSupported =
|
|
24
|
+
Intl.NumberFormat.supportedLocalesOf([locale])[0] === locale;
|
|
25
|
+
if (!dtfSupported) problems.push(`${locale} not supported by DateTimeFormat`);
|
|
26
|
+
if (!nfSupported) problems.push(`${locale} not supported by NumberFormat`);
|
|
27
|
+
|
|
28
|
+
// 3. numeric separators sanity
|
|
29
|
+
let group, decimal;
|
|
30
|
+
try {
|
|
31
|
+
const parts = new Intl.NumberFormat(locale).formatToParts(1234.5);
|
|
32
|
+
group = parts.find((p) => p.type === 'group')?.value;
|
|
33
|
+
decimal = parts.find((p) => p.type === 'decimal')?.value;
|
|
34
|
+
if (!group || !decimal)
|
|
35
|
+
problems.push('formatToParts missing group/decimal separators');
|
|
36
|
+
} catch (e) {
|
|
37
|
+
problems.push(
|
|
38
|
+
`NumberFormat threw: ${e instanceof Error ? e.message : String(e)}`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// 4. plural rules sanity
|
|
43
|
+
try {
|
|
44
|
+
const pr = new Intl.PluralRules(locale);
|
|
45
|
+
const sample = pr.select(5);
|
|
46
|
+
if (!sample) problems.push('PluralRules returned undefined');
|
|
47
|
+
} catch (e) {
|
|
48
|
+
problems.push(
|
|
49
|
+
`PluralRules threw: ${e instanceof Error ? e.message : String(e)}`
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 5. show example formatted values
|
|
54
|
+
const example = {
|
|
55
|
+
number: new Intl.NumberFormat(locale).format(1234.5),
|
|
56
|
+
date: new Intl.DateTimeFormat(locale, { dateStyle: 'long' }).format(
|
|
57
|
+
new Date('2020-01-02')
|
|
58
|
+
),
|
|
59
|
+
weekday: new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(
|
|
60
|
+
new Date('2020-01-02')
|
|
61
|
+
),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const result = {
|
|
65
|
+
ok: problems.length === 0,
|
|
66
|
+
problems,
|
|
67
|
+
group,
|
|
68
|
+
decimal,
|
|
69
|
+
example,
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
if (result.ok) {
|
|
73
|
+
console.log(`✅ Locale polyfill looks OK for ${locale}`, example);
|
|
74
|
+
} else {
|
|
75
|
+
console.warn(
|
|
76
|
+
`❌ Locale polyfill check failed for ${locale}:`,
|
|
77
|
+
problems,
|
|
78
|
+
example
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
4
|
-
*
|
|
5
|
-
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
6
|
-
* once the code is regenerated.
|
|
7
|
-
*
|
|
8
|
-
* @generated by codegen project: GenerateModuleJavaSpec.js
|
|
9
|
-
*
|
|
10
|
-
* @nolint
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
package com.facebook.fbreact.specs;
|
|
14
|
-
|
|
15
|
-
import com.facebook.proguard.annotations.DoNotStrip;
|
|
16
|
-
import com.facebook.react.bridge.ReactApplicationContext;
|
|
17
|
-
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
18
|
-
import com.facebook.react.bridge.ReactMethod;
|
|
19
|
-
import com.facebook.react.bridge.WritableArray;
|
|
20
|
-
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
21
|
-
import javax.annotation.Nonnull;
|
|
22
|
-
import javax.annotation.Nullable;
|
|
23
|
-
|
|
24
|
-
public abstract class NativeGtReactNativeSpec extends ReactContextBaseJavaModule implements TurboModule {
|
|
25
|
-
public static final String NAME = "GtReactNative";
|
|
26
|
-
|
|
27
|
-
public NativeGtReactNativeSpec(ReactApplicationContext reactContext) {
|
|
28
|
-
super(reactContext);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@Override
|
|
32
|
-
public @Nonnull String getName() {
|
|
33
|
-
return NAME;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
37
|
-
@DoNotStrip
|
|
38
|
-
public abstract double multiply(double a, double b);
|
|
39
|
-
|
|
40
|
-
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
41
|
-
@DoNotStrip
|
|
42
|
-
public abstract WritableArray getNativeLocales();
|
|
43
|
-
|
|
44
|
-
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
45
|
-
@DoNotStrip
|
|
46
|
-
public abstract @Nullable String nativeStoreGet(String key);
|
|
47
|
-
|
|
48
|
-
@ReactMethod
|
|
49
|
-
@DoNotStrip
|
|
50
|
-
public abstract void nativeStoreSet(String key, String value);
|
|
51
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
#
|
|
3
|
-
# This source code is licensed under the MIT license found in the
|
|
4
|
-
# LICENSE file in the root directory of this source tree.
|
|
5
|
-
|
|
6
|
-
cmake_minimum_required(VERSION 3.13)
|
|
7
|
-
set(CMAKE_VERBOSE_MAKEFILE on)
|
|
8
|
-
|
|
9
|
-
file(GLOB react_codegen_SRCS CONFIGURE_DEPENDS *.cpp react/renderer/components/GtReactNativeSpec/*.cpp)
|
|
10
|
-
|
|
11
|
-
add_library(
|
|
12
|
-
react_codegen_GtReactNativeSpec
|
|
13
|
-
OBJECT
|
|
14
|
-
${react_codegen_SRCS}
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
target_include_directories(react_codegen_GtReactNativeSpec PUBLIC . react/renderer/components/GtReactNativeSpec)
|
|
18
|
-
|
|
19
|
-
target_link_libraries(
|
|
20
|
-
react_codegen_GtReactNativeSpec
|
|
21
|
-
fbjni
|
|
22
|
-
jsi
|
|
23
|
-
# We need to link different libraries based on whether we are building rncore or not, that's necessary
|
|
24
|
-
# because we want to break a circular dependency between react_codegen_rncore and reactnative
|
|
25
|
-
reactnative
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
target_compile_reactnative_options(react_codegen_GtReactNativeSpec PRIVATE)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
4
|
-
*
|
|
5
|
-
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
6
|
-
* once the code is regenerated.
|
|
7
|
-
*
|
|
8
|
-
* @generated by codegen project: GenerateModuleJniCpp.js
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#include "GtReactNativeSpec.h"
|
|
12
|
-
|
|
13
|
-
namespace facebook::react {
|
|
14
|
-
|
|
15
|
-
static facebook::jsi::Value __hostFunction_NativeGtReactNativeSpecJSI_multiply(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
|
16
|
-
static jmethodID cachedMethodId = nullptr;
|
|
17
|
-
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, NumberKind, "multiply", "(DD)D", args, count, cachedMethodId);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
static facebook::jsi::Value __hostFunction_NativeGtReactNativeSpecJSI_getNativeLocales(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
|
21
|
-
static jmethodID cachedMethodId = nullptr;
|
|
22
|
-
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, ArrayKind, "getNativeLocales", "()Lcom/facebook/react/bridge/WritableArray;", args, count, cachedMethodId);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
static facebook::jsi::Value __hostFunction_NativeGtReactNativeSpecJSI_nativeStoreGet(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
|
26
|
-
static jmethodID cachedMethodId = nullptr;
|
|
27
|
-
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, StringKind, "nativeStoreGet", "(Ljava/lang/String;)Ljava/lang/String;", args, count, cachedMethodId);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
static facebook::jsi::Value __hostFunction_NativeGtReactNativeSpecJSI_nativeStoreSet(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
|
31
|
-
static jmethodID cachedMethodId = nullptr;
|
|
32
|
-
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, VoidKind, "nativeStoreSet", "(Ljava/lang/String;Ljava/lang/String;)V", args, count, cachedMethodId);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
NativeGtReactNativeSpecJSI::NativeGtReactNativeSpecJSI(const JavaTurboModule::InitParams ¶ms)
|
|
36
|
-
: JavaTurboModule(params) {
|
|
37
|
-
methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativeGtReactNativeSpecJSI_multiply};
|
|
38
|
-
methodMap_["getNativeLocales"] = MethodMetadata {0, __hostFunction_NativeGtReactNativeSpecJSI_getNativeLocales};
|
|
39
|
-
methodMap_["nativeStoreGet"] = MethodMetadata {1, __hostFunction_NativeGtReactNativeSpecJSI_nativeStoreGet};
|
|
40
|
-
methodMap_["nativeStoreSet"] = MethodMetadata {2, __hostFunction_NativeGtReactNativeSpecJSI_nativeStoreSet};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
std::shared_ptr<TurboModule> GtReactNativeSpec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams ¶ms) {
|
|
44
|
-
if (moduleName == "GtReactNative") {
|
|
45
|
-
return std::make_shared<NativeGtReactNativeSpecJSI>(params);
|
|
46
|
-
}
|
|
47
|
-
return nullptr;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
} // namespace facebook::react
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
4
|
-
*
|
|
5
|
-
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
6
|
-
* once the code is regenerated.
|
|
7
|
-
*
|
|
8
|
-
* @generated by codegen project: GenerateModuleJniH.js
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#pragma once
|
|
12
|
-
|
|
13
|
-
#include <ReactCommon/JavaTurboModule.h>
|
|
14
|
-
#include <ReactCommon/TurboModule.h>
|
|
15
|
-
#include <jsi/jsi.h>
|
|
16
|
-
|
|
17
|
-
namespace facebook::react {
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* JNI C++ class for module 'NativeGtReactNative'
|
|
21
|
-
*/
|
|
22
|
-
class JSI_EXPORT NativeGtReactNativeSpecJSI : public JavaTurboModule {
|
|
23
|
-
public:
|
|
24
|
-
NativeGtReactNativeSpecJSI(const JavaTurboModule::InitParams ¶ms);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
JSI_EXPORT
|
|
29
|
-
std::shared_ptr<TurboModule> GtReactNativeSpec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams ¶ms);
|
|
30
|
-
|
|
31
|
-
} // namespace facebook::react
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
3
|
-
*
|
|
4
|
-
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
5
|
-
* once the code is regenerated.
|
|
6
|
-
*
|
|
7
|
-
* @generated by codegen project: GenerateModuleCpp.js
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
#include "GtReactNativeSpecJSI.h"
|
|
11
|
-
|
|
12
|
-
namespace facebook::react {
|
|
13
|
-
|
|
14
|
-
static jsi::Value __hostFunction_NativeGtReactNativeCxxSpecJSI_multiply(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
15
|
-
return static_cast<NativeGtReactNativeCxxSpecJSI *>(&turboModule)->multiply(
|
|
16
|
-
rt,
|
|
17
|
-
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asNumber(),
|
|
18
|
-
count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asNumber()
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
static jsi::Value __hostFunction_NativeGtReactNativeCxxSpecJSI_getNativeLocales(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
22
|
-
return static_cast<NativeGtReactNativeCxxSpecJSI *>(&turboModule)->getNativeLocales(
|
|
23
|
-
rt
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
static jsi::Value __hostFunction_NativeGtReactNativeCxxSpecJSI_nativeStoreGet(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
27
|
-
auto result = static_cast<NativeGtReactNativeCxxSpecJSI *>(&turboModule)->nativeStoreGet(
|
|
28
|
-
rt,
|
|
29
|
-
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt)
|
|
30
|
-
);
|
|
31
|
-
return result ? jsi::Value(std::move(*result)) : jsi::Value::null();
|
|
32
|
-
}
|
|
33
|
-
static jsi::Value __hostFunction_NativeGtReactNativeCxxSpecJSI_nativeStoreSet(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
|
|
34
|
-
static_cast<NativeGtReactNativeCxxSpecJSI *>(&turboModule)->nativeStoreSet(
|
|
35
|
-
rt,
|
|
36
|
-
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
|
|
37
|
-
count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt)
|
|
38
|
-
);
|
|
39
|
-
return jsi::Value::undefined();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
NativeGtReactNativeCxxSpecJSI::NativeGtReactNativeCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
|
|
43
|
-
: TurboModule("GtReactNative", jsInvoker) {
|
|
44
|
-
methodMap_["multiply"] = MethodMetadata {2, __hostFunction_NativeGtReactNativeCxxSpecJSI_multiply};
|
|
45
|
-
methodMap_["getNativeLocales"] = MethodMetadata {0, __hostFunction_NativeGtReactNativeCxxSpecJSI_getNativeLocales};
|
|
46
|
-
methodMap_["nativeStoreGet"] = MethodMetadata {1, __hostFunction_NativeGtReactNativeCxxSpecJSI_nativeStoreGet};
|
|
47
|
-
methodMap_["nativeStoreSet"] = MethodMetadata {2, __hostFunction_NativeGtReactNativeCxxSpecJSI_nativeStoreSet};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
} // namespace facebook::react
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
3
|
-
*
|
|
4
|
-
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
5
|
-
* once the code is regenerated.
|
|
6
|
-
*
|
|
7
|
-
* @generated by codegen project: GenerateModuleH.js
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
#pragma once
|
|
11
|
-
|
|
12
|
-
#include <ReactCommon/TurboModule.h>
|
|
13
|
-
#include <react/bridging/Bridging.h>
|
|
14
|
-
|
|
15
|
-
namespace facebook::react {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class JSI_EXPORT NativeGtReactNativeCxxSpecJSI : public TurboModule {
|
|
19
|
-
protected:
|
|
20
|
-
NativeGtReactNativeCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
|
|
21
|
-
|
|
22
|
-
public:
|
|
23
|
-
virtual double multiply(jsi::Runtime &rt, double a, double b) = 0;
|
|
24
|
-
virtual jsi::Array getNativeLocales(jsi::Runtime &rt) = 0;
|
|
25
|
-
virtual std::optional<jsi::String> nativeStoreGet(jsi::Runtime &rt, jsi::String key) = 0;
|
|
26
|
-
virtual void nativeStoreSet(jsi::Runtime &rt, jsi::String key, jsi::String value) = 0;
|
|
27
|
-
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
template <typename T>
|
|
31
|
-
class JSI_EXPORT NativeGtReactNativeCxxSpec : public TurboModule {
|
|
32
|
-
public:
|
|
33
|
-
jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
|
|
34
|
-
return delegate_.create(rt, propName);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime& runtime) override {
|
|
38
|
-
return delegate_.getPropertyNames(runtime);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
static constexpr std::string_view kModuleName = "GtReactNative";
|
|
42
|
-
|
|
43
|
-
protected:
|
|
44
|
-
NativeGtReactNativeCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
|
|
45
|
-
: TurboModule(std::string{NativeGtReactNativeCxxSpec::kModuleName}, jsInvoker),
|
|
46
|
-
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
private:
|
|
50
|
-
class Delegate : public NativeGtReactNativeCxxSpecJSI {
|
|
51
|
-
public:
|
|
52
|
-
Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
|
|
53
|
-
NativeGtReactNativeCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
double multiply(jsi::Runtime &rt, double a, double b) override {
|
|
58
|
-
static_assert(
|
|
59
|
-
bridging::getParameterCount(&T::multiply) == 3,
|
|
60
|
-
"Expected multiply(...) to have 3 parameters");
|
|
61
|
-
|
|
62
|
-
return bridging::callFromJs<double>(
|
|
63
|
-
rt, &T::multiply, jsInvoker_, instance_, std::move(a), std::move(b));
|
|
64
|
-
}
|
|
65
|
-
jsi::Array getNativeLocales(jsi::Runtime &rt) override {
|
|
66
|
-
static_assert(
|
|
67
|
-
bridging::getParameterCount(&T::getNativeLocales) == 1,
|
|
68
|
-
"Expected getNativeLocales(...) to have 1 parameters");
|
|
69
|
-
|
|
70
|
-
return bridging::callFromJs<jsi::Array>(
|
|
71
|
-
rt, &T::getNativeLocales, jsInvoker_, instance_);
|
|
72
|
-
}
|
|
73
|
-
std::optional<jsi::String> nativeStoreGet(jsi::Runtime &rt, jsi::String key) override {
|
|
74
|
-
static_assert(
|
|
75
|
-
bridging::getParameterCount(&T::nativeStoreGet) == 2,
|
|
76
|
-
"Expected nativeStoreGet(...) to have 2 parameters");
|
|
77
|
-
|
|
78
|
-
return bridging::callFromJs<std::optional<jsi::String>>(
|
|
79
|
-
rt, &T::nativeStoreGet, jsInvoker_, instance_, std::move(key));
|
|
80
|
-
}
|
|
81
|
-
void nativeStoreSet(jsi::Runtime &rt, jsi::String key, jsi::String value) override {
|
|
82
|
-
static_assert(
|
|
83
|
-
bridging::getParameterCount(&T::nativeStoreSet) == 3,
|
|
84
|
-
"Expected nativeStoreSet(...) to have 3 parameters");
|
|
85
|
-
|
|
86
|
-
return bridging::callFromJs<void>(
|
|
87
|
-
rt, &T::nativeStoreSet, jsInvoker_, instance_, std::move(key), std::move(value));
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
private:
|
|
91
|
-
friend class NativeGtReactNativeCxxSpec;
|
|
92
|
-
T *instance_;
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
Delegate delegate_;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
} // namespace facebook::react
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
// Intl object not natively supported, see: https://formatjs.github.io/docs/polyfills
|
|
4
|
-
// See also: The Ultimate Guide to React Native Optimization - page 124
|
|
5
|
-
|
|
6
|
-
import '@formatjs/intl-getcanonicallocales/polyfill';
|
|
7
|
-
import '@formatjs/intl-locale/polyfill';
|
|
8
|
-
import '@formatjs/intl-displaynames/polyfill';
|
|
9
|
-
import '@formatjs/intl-listformat/polyfill';
|
|
10
|
-
import '@formatjs/intl-pluralrules/polyfill-force'; // https://github.com/formatjs/formatjs/issues/4463
|
|
11
|
-
import '@formatjs/intl-numberformat/polyfill';
|
|
12
|
-
import '@formatjs/intl-relativetimeformat/polyfill';
|
|
13
|
-
import '@formatjs/intl-datetimeformat/polyfill';
|
|
14
|
-
import '@formatjs/intl-datetimeformat/add-all-tz';
|
|
15
|
-
import '@formatjs/intl-displaynames/locale-data/en';
|
|
16
|
-
import '@formatjs/intl-displaynames/locale-data/zh';
|
|
17
|
-
import '@formatjs/intl-displaynames/locale-data/es';
|
|
18
|
-
import '@formatjs/intl-listformat/locale-data/en';
|
|
19
|
-
import '@formatjs/intl-listformat/locale-data/zh';
|
|
20
|
-
import '@formatjs/intl-listformat/locale-data/es';
|
|
21
|
-
import '@formatjs/intl-pluralrules/locale-data/en';
|
|
22
|
-
import '@formatjs/intl-pluralrules/locale-data/zh';
|
|
23
|
-
import '@formatjs/intl-pluralrules/locale-data/es';
|
|
24
|
-
import '@formatjs/intl-numberformat/locale-data/en';
|
|
25
|
-
import '@formatjs/intl-numberformat/locale-data/zh';
|
|
26
|
-
import '@formatjs/intl-numberformat/locale-data/es';
|
|
27
|
-
import '@formatjs/intl-relativetimeformat/locale-data/en';
|
|
28
|
-
import '@formatjs/intl-relativetimeformat/locale-data/zh';
|
|
29
|
-
import '@formatjs/intl-relativetimeformat/locale-data/es';
|
|
30
|
-
import '@formatjs/intl-datetimeformat/locale-data/en';
|
|
31
|
-
import '@formatjs/intl-datetimeformat/locale-data/zh';
|
|
32
|
-
import '@formatjs/intl-datetimeformat/locale-data/es';
|
|
33
|
-
async function polyfillLocale(locale) {
|
|
34
|
-
await Promise.all([import(`@formatjs/intl-displaynames/locale-data/${locale}`), import(`@formatjs/intl-listformat/locale-data/${locale}`), import(`@formatjs/intl-pluralrules/locale-data/${locale}`), import(`@formatjs/intl-numberformat/locale-data/${locale}`), import(`@formatjs/intl-relativetimeformat/locale-data/${locale}`), import(`@formatjs/intl-datetimeformat/locale-data/${locale}`)]);
|
|
35
|
-
}
|
|
36
|
-
export async function polyfillLocales(locales) {
|
|
37
|
-
await Promise.all(locales.map(polyfillLocale));
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=polyfill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["polyfillLocale","locale","Promise","all","polyfillLocales","locales","map"],"sourceRoot":"../../../src","sources":["utils/polyfill.ts"],"mappings":";;AAAA;AACA;;AAEA,OAAO,6CAA6C;AACpD,OAAO,gCAAgC;AACvC,OAAO,sCAAsC;AAC7C,OAAO,oCAAoC;AAC3C,OAAO,2CAA2C,CAAC,CAAC;AACpD,OAAO,sCAAsC;AAC7C,OAAO,4CAA4C;AACnD,OAAO,wCAAwC;AAC/C,OAAO,0CAA0C;AAEjD,OAAO,4CAA4C;AACnD,OAAO,4CAA4C;AACnD,OAAO,4CAA4C;AAEnD,OAAO,0CAA0C;AACjD,OAAO,0CAA0C;AACjD,OAAO,0CAA0C;AAEjD,OAAO,2CAA2C;AAClD,OAAO,2CAA2C;AAClD,OAAO,2CAA2C;AAElD,OAAO,4CAA4C;AACnD,OAAO,4CAA4C;AACnD,OAAO,4CAA4C;AAEnD,OAAO,kDAAkD;AACzD,OAAO,kDAAkD;AACzD,OAAO,kDAAkD;AAEzD,OAAO,8CAA8C;AACrD,OAAO,8CAA8C;AACrD,OAAO,8CAA8C;AAErD,eAAeA,cAAcA,CAACC,MAAc,EAAE;EAC5C,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChB,MAAM,CAAC,2CAA2CF,MAAM,EAAE,CAAC,EAC3D,MAAM,CAAC,yCAAyCA,MAAM,EAAE,CAAC,EACzD,MAAM,CAAC,0CAA0CA,MAAM,EAAE,CAAC,EAC1D,MAAM,CAAC,2CAA2CA,MAAM,EAAE,CAAC,EAC3D,MAAM,CAAC,iDAAiDA,MAAM,EAAE,CAAC,EACjE,MAAM,CAAC,6CAA6CA,MAAM,EAAE,CAAC,CAC9D,CAAC;AACJ;AAEA,OAAO,eAAeG,eAAeA,CAACC,OAAiB,EAAE;EACvD,MAAMH,OAAO,CAACC,GAAG,CAACE,OAAO,CAACC,GAAG,CAACN,cAAc,CAAC,CAAC;AAChD","ignoreList":[]}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import '@formatjs/intl-getcanonicallocales/polyfill';
|
|
2
|
-
import '@formatjs/intl-locale/polyfill';
|
|
3
|
-
import '@formatjs/intl-displaynames/polyfill';
|
|
4
|
-
import '@formatjs/intl-listformat/polyfill';
|
|
5
|
-
import '@formatjs/intl-pluralrules/polyfill-force';
|
|
6
|
-
import '@formatjs/intl-numberformat/polyfill';
|
|
7
|
-
import '@formatjs/intl-relativetimeformat/polyfill';
|
|
8
|
-
import '@formatjs/intl-datetimeformat/polyfill';
|
|
9
|
-
import '@formatjs/intl-datetimeformat/add-all-tz';
|
|
10
|
-
import '@formatjs/intl-displaynames/locale-data/en';
|
|
11
|
-
import '@formatjs/intl-displaynames/locale-data/zh';
|
|
12
|
-
import '@formatjs/intl-displaynames/locale-data/es';
|
|
13
|
-
import '@formatjs/intl-listformat/locale-data/en';
|
|
14
|
-
import '@formatjs/intl-listformat/locale-data/zh';
|
|
15
|
-
import '@formatjs/intl-listformat/locale-data/es';
|
|
16
|
-
import '@formatjs/intl-pluralrules/locale-data/en';
|
|
17
|
-
import '@formatjs/intl-pluralrules/locale-data/zh';
|
|
18
|
-
import '@formatjs/intl-pluralrules/locale-data/es';
|
|
19
|
-
import '@formatjs/intl-numberformat/locale-data/en';
|
|
20
|
-
import '@formatjs/intl-numberformat/locale-data/zh';
|
|
21
|
-
import '@formatjs/intl-numberformat/locale-data/es';
|
|
22
|
-
import '@formatjs/intl-relativetimeformat/locale-data/en';
|
|
23
|
-
import '@formatjs/intl-relativetimeformat/locale-data/zh';
|
|
24
|
-
import '@formatjs/intl-relativetimeformat/locale-data/es';
|
|
25
|
-
import '@formatjs/intl-datetimeformat/locale-data/en';
|
|
26
|
-
import '@formatjs/intl-datetimeformat/locale-data/zh';
|
|
27
|
-
import '@formatjs/intl-datetimeformat/locale-data/es';
|
|
28
|
-
export declare function polyfillLocales(locales: string[]): Promise<void>;
|
|
29
|
-
//# sourceMappingURL=polyfill.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polyfill.d.ts","sourceRoot":"","sources":["../../../../src/utils/polyfill.ts"],"names":[],"mappings":"AAGA,OAAO,6CAA6C,CAAC;AACrD,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,2CAA2C,CAAC;AACnD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,4CAA4C,CAAC;AACpD,OAAO,wCAAwC,CAAC;AAChD,OAAO,0CAA0C,CAAC;AAElD,OAAO,4CAA4C,CAAC;AACpD,OAAO,4CAA4C,CAAC;AACpD,OAAO,4CAA4C,CAAC;AAEpD,OAAO,0CAA0C,CAAC;AAClD,OAAO,0CAA0C,CAAC;AAClD,OAAO,0CAA0C,CAAC;AAElD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AACnD,OAAO,2CAA2C,CAAC;AAEnD,OAAO,4CAA4C,CAAC;AACpD,OAAO,4CAA4C,CAAC;AACpD,OAAO,4CAA4C,CAAC;AAEpD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,kDAAkD,CAAC;AAC1D,OAAO,kDAAkD,CAAC;AAE1D,OAAO,8CAA8C,CAAC;AACtD,OAAO,8CAA8C,CAAC;AACtD,OAAO,8CAA8C,CAAC;AAatD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,iBAEtD"}
|