@livestore/livestore 0.3.0-dev.14 → 0.3.0-dev.16

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.
@@ -1,63 +0,0 @@
1
- import type { Bindable, QueryBuilder, QueryInfo } from '@livestore/common';
2
- import { Schema } from '@livestore/utils/effect';
3
- import * as otel from '@opentelemetry/api';
4
- import type { Thunk } from '../reactive.js';
5
- import type { RefreshReason } from '../store/store-types.js';
6
- import type { GetAtomResult, LiveQuery, QueryContext, ReactivityGraph } from './base-class.js';
7
- import { LiveStoreQueryBase } from './base-class.js';
8
- export type QueryInputRaw<TDecoded, TEncoded, TQueryInfo extends QueryInfo> = {
9
- query: string;
10
- schema: Schema.Schema<TDecoded, TEncoded>;
11
- bindValues?: Bindable;
12
- /**
13
- * Can be provided explicitly to slightly speed up initial query performance
14
- *
15
- * NOTE In the future we want to do this automatically at build time
16
- */
17
- queriedTables?: Set<string>;
18
- queryInfo?: TQueryInfo;
19
- execBeforeFirstRun?: (ctx: QueryContext) => void;
20
- };
21
- export type QueryInput<TDecoded, TEncoded, TQueryInfo extends QueryInfo> = QueryInputRaw<TDecoded, TEncoded, TQueryInfo> | QueryBuilder<TDecoded, any, any, TQueryInfo>;
22
- /**
23
- * NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
24
- */
25
- export declare const queryDb: {
26
- <TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo> | QueryBuilder<TResultSchema, any, any, TQueryInfo>, options?: {
27
- map?: (rows: TResultSchema) => TResult;
28
- /**
29
- * Used for debugging / devtools
30
- */
31
- label?: string;
32
- }): LiveQuery<TResult, TQueryInfo>;
33
- <TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: ((get: GetAtomResult) => QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo>) | ((get: GetAtomResult) => QueryBuilder<TResultSchema, any, any, TQueryInfo>), options?: {
34
- map?: (rows: TResultSchema) => TResult;
35
- /**
36
- * Used for debugging / devtools
37
- */
38
- label?: string;
39
- queryInfo?: TQueryInfo;
40
- }): LiveQuery<TResult, TQueryInfo>;
41
- };
42
- export declare class LiveStoreDbQuery<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None> extends LiveStoreQueryBase<TResult, TQueryInfo> {
43
- readonly _tag: 'db';
44
- private thunkMap;
45
- label: string;
46
- queryInfo: TQueryInfo;
47
- private readonly inputLabel;
48
- private readonly inputQueryInfo;
49
- private readonly mapResult;
50
- private readonly queryInput;
51
- constructor({ queryInput, label: inputLabel, map, queryInfo: inputQueryInfo, }: {
52
- label?: string;
53
- queryInput: QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo> | ((get: GetAtomResult, ctx: QueryContext) => QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo>);
54
- map?: (rows: TResultSchema) => TResult;
55
- queryInfo?: TQueryInfo;
56
- });
57
- getResults$: ({ reactivityGraph, otelContext, }: {
58
- reactivityGraph: ReactivityGraph;
59
- otelContext?: otel.Context;
60
- }) => Thunk<TResult, QueryContext, RefreshReason>;
61
- destroy: (reactivityGraph: ReactivityGraph) => void;
62
- }
63
- //# sourceMappingURL=db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/live-queries/db.ts"],"names":[],"mappings":"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"}
@@ -1,223 +0,0 @@
1
- import { getResultSchema, isQueryBuilder, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, UnexpectedError, } from '@livestore/common';
2
- import { deepEqual, shouldNeverHappen } from '@livestore/utils';
3
- import { Predicate, Schema, TreeFormatter } from '@livestore/utils/effect';
4
- import * as otel from '@opentelemetry/api';
5
- import { isThunk, NOT_REFRESHED_YET } from '../reactive.js';
6
- import { makeExecBeforeFirstRun, rowQueryLabel } from '../row-query-utils.js';
7
- import { getDurationMsFromSpan } from '../utils/otel.js';
8
- import { LiveStoreQueryBase, makeGetAtomResult } from './base-class.js';
9
- /**
10
- * NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
11
- */
12
- export const queryDb = (queryInput, options) => new LiveStoreDbQuery({
13
- queryInput,
14
- label: options?.label,
15
- map: options?.map,
16
- queryInfo: Predicate.hasProperty(options, 'queryInfo') ? options.queryInfo : undefined,
17
- // otelContext: options?.otelContext,
18
- });
19
- /* An object encapsulating a reactive SQL query */
20
- export class LiveStoreDbQuery extends LiveStoreQueryBase {
21
- _tag = 'db';
22
- thunkMap = new Map();
23
- label;
24
- queryInfo;
25
- inputLabel;
26
- inputQueryInfo;
27
- mapResult;
28
- // private readonly otelContext: otel.Context | undefined
29
- queryInput;
30
- constructor({ queryInput, label: inputLabel, map, queryInfo: inputQueryInfo, }) {
31
- super();
32
- const label = inputLabel ?? 'db(unknown)';
33
- this.inputLabel = label;
34
- // `this.label` will later be modified by the query
35
- this.label = label;
36
- const queryInfo = inputQueryInfo ?? { _tag: 'None' };
37
- this.inputQueryInfo = queryInfo;
38
- // `this.queryInfo` will later be modified by the query
39
- this.queryInfo = queryInfo;
40
- this.mapResult = map === undefined ? (rows) => rows : map;
41
- // this.otelContext = otelContext
42
- this.queryInput = queryInput;
43
- }
44
- getResults$ = ({ reactivityGraph, otelContext, }) => {
45
- if (this.thunkMap.has(reactivityGraph)) {
46
- return this.thunkMap.get(reactivityGraph).results$;
47
- }
48
- const inputLabel = this.inputLabel;
49
- const inputQueryInfo = this.inputQueryInfo;
50
- const queryInput = this.queryInput;
51
- const map = this.mapResult;
52
- let label = inputLabel ?? 'db(unknown)';
53
- // this.reactivityGraph = reactivityGraph ?? globalReactivityGraph
54
- const schemaRef = {
55
- current: typeof queryInput === 'function' ? undefined : isQueryBuilder(queryInput) ? undefined : queryInput.schema,
56
- };
57
- const execBeforeFirstRunRef = {
58
- current: undefined,
59
- };
60
- let queryInputRaw$OrQueryInputRaw;
61
- const fromQueryBuilder = (qb, otelContext) => {
62
- try {
63
- const qbRes = qb.asSql();
64
- const schema = getResultSchema(qb);
65
- const ast = qb[QueryBuilderAstSymbol];
66
- return {
67
- queryInputRaw: {
68
- query: qbRes.query,
69
- schema,
70
- bindValues: qbRes.bindValues,
71
- queriedTables: new Set([ast.tableDef.sqliteDef.name]),
72
- queryInfo: ast._tag === 'RowQuery' ? { _tag: 'Row', table: ast.tableDef, id: ast.id } : { _tag: 'None' },
73
- },
74
- label: ast._tag === 'RowQuery' ? rowQueryLabel(ast.tableDef, ast.id) : qb.toString(),
75
- execBeforeFirstRun: ast._tag === 'RowQuery'
76
- ? makeExecBeforeFirstRun({
77
- table: ast.tableDef,
78
- insertValues: ast.insertValues,
79
- id: ast.id,
80
- otelContext,
81
- })
82
- : undefined,
83
- };
84
- }
85
- catch (cause) {
86
- throw new UnexpectedError({ cause, note: `Error building query for ${qb.toString()}`, payload: { qb } });
87
- }
88
- };
89
- if (typeof queryInput === 'function') {
90
- queryInputRaw$OrQueryInputRaw = reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext) => {
91
- const startMs = performance.now();
92
- const queryInputResult = queryInput(makeGetAtomResult(get, reactivityGraph, otelContext ?? ctx.rootOtelContext), ctx);
93
- const durationMs = performance.now() - startMs;
94
- let queryInputRaw;
95
- if (isQueryBuilder(queryInputResult)) {
96
- const res = fromQueryBuilder(queryInputResult, otelContext);
97
- queryInputRaw = res.queryInputRaw;
98
- // setting label dynamically here
99
- this.label = res.label;
100
- execBeforeFirstRunRef.current = res.execBeforeFirstRun;
101
- }
102
- else {
103
- queryInputRaw = queryInputResult;
104
- }
105
- setDebugInfo({ _tag: 'computed', label: `${this.label}:queryInput`, query: queryInputRaw.query, durationMs });
106
- schemaRef.current = queryInputRaw.schema;
107
- if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
108
- this.queryInfo = queryInputRaw.queryInfo;
109
- }
110
- return queryInputRaw;
111
- }, {
112
- label: `${label}:query`,
113
- meta: { liveStoreThunkType: 'db.query' },
114
- // NOTE we're not checking the schema here as we assume the query string to always change when the schema might change
115
- equal: (a, b) => a.query === b.query && deepEqual(a.bindValues, b.bindValues),
116
- });
117
- }
118
- else {
119
- let queryInputRaw;
120
- if (isQueryBuilder(queryInput)) {
121
- const res = fromQueryBuilder(queryInput, otelContext);
122
- queryInputRaw = res.queryInputRaw;
123
- label = res.label;
124
- execBeforeFirstRunRef.current = res.execBeforeFirstRun;
125
- }
126
- else {
127
- queryInputRaw = queryInput;
128
- }
129
- schemaRef.current = queryInputRaw.schema;
130
- queryInputRaw$OrQueryInputRaw = queryInputRaw;
131
- // this.label = inputLabel ? this.label : `db(${})`
132
- if (inputLabel === undefined && isQueryBuilder(queryInput)) {
133
- const ast = queryInput[QueryBuilderAstSymbol];
134
- if (ast._tag === 'RowQuery') {
135
- label = `db(${rowQueryLabel(ast.tableDef, ast.id)})`;
136
- }
137
- }
138
- if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
139
- this.queryInfo = queryInputRaw.queryInfo;
140
- }
141
- }
142
- const queriedTablesRef = { current: undefined };
143
- const makeResultsEqual = (resultSchema) => (a, b) => a === NOT_REFRESHED_YET || b === NOT_REFRESHED_YET ? false : Schema.equivalence(resultSchema)(a, b);
144
- // NOTE we try to create the equality function eagerly as it might be expensive
145
- // TODO also support derived equality for `map` (probably will depend on having an easy way to transform a schema without an `encode` step)
146
- // This would mean dropping the `map` option
147
- const resultsEqual = map === undefined
148
- ? schemaRef.current === undefined
149
- ? (a, b) => makeResultsEqual(schemaRef.current)(a, b)
150
- : makeResultsEqual(schemaRef.current)
151
- : undefined;
152
- const results$ = reactivityGraph.makeThunk((get, setDebugInfo, queryContext, otelContext) => queryContext.otelTracer.startActiveSpan('db:...', // NOTE span name will be overridden further down
153
- {}, otelContext ?? queryContext.rootOtelContext, (span) => {
154
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
155
- const { store } = queryContext;
156
- if (execBeforeFirstRunRef.current !== undefined) {
157
- execBeforeFirstRunRef.current(queryContext, otelContext);
158
- execBeforeFirstRunRef.current = undefined;
159
- }
160
- const queryInputResult = isThunk(queryInputRaw$OrQueryInputRaw)
161
- ? get(queryInputRaw$OrQueryInputRaw, otelContext)
162
- : queryInputRaw$OrQueryInputRaw;
163
- const sqlString = queryInputResult.query;
164
- const bindValues = queryInputResult.bindValues;
165
- if (queriedTablesRef.current === undefined) {
166
- queriedTablesRef.current = store.syncDbWrapper.getTablesUsed(sqlString);
167
- }
168
- if (bindValues !== undefined) {
169
- replaceSessionIdSymbol(bindValues, store.clientSession.sessionId);
170
- }
171
- // Establish a reactive dependency on the tables used in the query
172
- for (const tableName of queriedTablesRef.current) {
173
- const tableRef = store.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
174
- get(tableRef, otelContext);
175
- }
176
- span.setAttribute('sql.query', sqlString);
177
- span.updateName(`db:${sqlString.slice(0, 50)}`);
178
- const rawDbResults = store.syncDbWrapper.select(sqlString, {
179
- queriedTables: queriedTablesRef.current,
180
- bindValues: bindValues ? prepareBindValues(bindValues, sqlString) : undefined,
181
- otelContext,
182
- });
183
- span.setAttribute('sql.rowsCount', rawDbResults.length);
184
- const parsedResult = Schema.decodeEither(schemaRef.current)(rawDbResults);
185
- if (parsedResult._tag === 'Left') {
186
- const parseErrorStr = TreeFormatter.formatErrorSync(parsedResult.left);
187
- const expectedSchemaStr = String(schemaRef.current.ast);
188
- const bindValuesStr = bindValues === undefined ? '' : `\nBind values: ${JSON.stringify(bindValues)}`;
189
- console.error(`\
190
- Error parsing SQL query result.
191
-
192
- Query: ${sqlString}\
193
- ${bindValuesStr}
194
-
195
- Expected schema: ${expectedSchemaStr}
196
-
197
- Error: ${parseErrorStr}
198
-
199
- Result:`, rawDbResults);
200
- return shouldNeverHappen(`Error parsing SQL query result: ${parsedResult.left}`);
201
- }
202
- const result = this.mapResult(parsedResult.right);
203
- span.end();
204
- const durationMs = getDurationMsFromSpan(span);
205
- this.executionTimes.push(durationMs);
206
- setDebugInfo({ _tag: 'db', label: `${label}:results`, query: sqlString, durationMs });
207
- return result;
208
- }), { label: `${label}:results`, meta: { liveStoreThunkType: 'db.result' }, equal: resultsEqual });
209
- const queryInput$ = isThunk(queryInputRaw$OrQueryInputRaw)
210
- ? queryInputRaw$OrQueryInputRaw
211
- : undefined;
212
- this.thunkMap.set(reactivityGraph, { queryInput$, results$ });
213
- return results$;
214
- };
215
- destroy = (reactivityGraph) => {
216
- const { queryInput$, results$ } = this.thunkMap.get(reactivityGraph);
217
- if (queryInput$ !== undefined) {
218
- reactivityGraph.destroyNode(queryInput$);
219
- }
220
- reactivityGraph.destroyNode(results$);
221
- };
222
- }
223
- //# sourceMappingURL=db.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/live-queries/db.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=db.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.test.d.ts","sourceRoot":"","sources":["../../src/live-queries/db.test.ts"],"names":[],"mappings":""}
@@ -1,120 +0,0 @@
1
- import { Effect, Schema } from '@livestore/utils/effect';
2
- import * as otel from '@opentelemetry/api';
3
- import { BasicTracerProvider, InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
4
- import { describe, expect, it } from 'vitest';
5
- import { computed, makeReactivityGraph, queryDb, rawSqlMutation, sql } from '../index.js';
6
- import { makeTodoMvc, tables } from '../utils/tests/fixture.js';
7
- import { getSimplifiedRootSpan } from '../utils/tests/otel.js';
8
- /*
9
- TODO write tests for:
10
-
11
- - sql queries without and with `map` (incl. callback and schemas)
12
- - optional and explicit `queriedTables` argument
13
- */
14
- describe('otel', () => {
15
- let cachedProvider;
16
- const makeQuery = Effect.gen(function* () {
17
- const exporter = new InMemorySpanExporter();
18
- // const provider = cachedProvider ?? new BasicTracerProvider({ spanProcessors: [new SimpleSpanProcessor(exporter)] })
19
- const provider = cachedProvider ?? new BasicTracerProvider();
20
- cachedProvider = provider;
21
- provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
22
- provider.register();
23
- const otelTracer = otel.trace.getTracer('test');
24
- const span = otelTracer.startSpan('test-root');
25
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
26
- const reactivityGraph = makeReactivityGraph();
27
- const { store } = yield* makeTodoMvc({ otelTracer, otelContext, reactivityGraph });
28
- return {
29
- store,
30
- otelTracer,
31
- exporter,
32
- span,
33
- provider,
34
- reactivityGraph,
35
- };
36
- });
37
- it('otel', async () => {
38
- const { exporter } = await Effect.gen(function* () {
39
- const { store, exporter, span, reactivityGraph } = yield* makeQuery;
40
- const query$ = queryDb({
41
- query: `select * from todos`,
42
- schema: Schema.Array(tables.todos.schema),
43
- queriedTables: new Set(['todos']),
44
- });
45
- expect(store.query(query$)).toMatchInlineSnapshot('[]');
46
- store.mutate(rawSqlMutation({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
47
- expect(store.query(query$)).toMatchInlineSnapshot(`
48
- [
49
- {
50
- "completed": false,
51
- "id": "t1",
52
- "text": "buy milk",
53
- },
54
- ]
55
- `);
56
- query$.destroy(reactivityGraph);
57
- span.end();
58
- return { exporter };
59
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise);
60
- expect(getSimplifiedRootSpan(exporter)).toMatchSnapshot();
61
- });
62
- it('with thunks', async () => {
63
- const { exporter } = await Effect.gen(function* () {
64
- const { store, exporter, span, reactivityGraph } = yield* makeQuery;
65
- const defaultTodo = { id: '', text: '', completed: false };
66
- const filter = computed(() => `where completed = 0`, { label: 'where-filter' });
67
- const query$ = queryDb((get) => ({
68
- query: `select * from todos ${get(filter)}`,
69
- schema: Schema.Array(tables.todos.schema).pipe(Schema.headOrElse(() => defaultTodo)),
70
- }), { label: 'all todos' });
71
- expect(query$.run({ reactivityGraph })).toMatchInlineSnapshot(`
72
- {
73
- "completed": false,
74
- "id": "",
75
- "text": "",
76
- }
77
- `);
78
- store.mutate(rawSqlMutation({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
79
- expect(query$.run({ reactivityGraph })).toMatchInlineSnapshot(`
80
- {
81
- "completed": false,
82
- "id": "t1",
83
- "text": "buy milk",
84
- }
85
- `);
86
- query$.destroy(reactivityGraph);
87
- span.end();
88
- return { exporter };
89
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise);
90
- expect(getSimplifiedRootSpan(exporter)).toMatchSnapshot();
91
- });
92
- it('with thunks with query builder and without labels', async () => {
93
- const { exporter } = await Effect.gen(function* () {
94
- const { store, exporter, span, reactivityGraph } = yield* makeQuery;
95
- const defaultTodo = { id: '', text: '', completed: false };
96
- const filter = computed(() => ({ completed: false }));
97
- const query$ = queryDb((get) => tables.todos.query.where(get(filter)).first({ fallback: () => defaultTodo }));
98
- expect(query$.run({ reactivityGraph })).toMatchInlineSnapshot(`
99
- {
100
- "completed": false,
101
- "id": "",
102
- "text": "",
103
- }
104
- `);
105
- store.mutate(rawSqlMutation({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
106
- expect(query$.run({ reactivityGraph })).toMatchInlineSnapshot(`
107
- {
108
- "completed": false,
109
- "id": "t1",
110
- "text": "buy milk",
111
- }
112
- `);
113
- query$.destroy(reactivityGraph);
114
- span.end();
115
- return { exporter };
116
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise);
117
- expect(getSimplifiedRootSpan(exporter)).toMatchSnapshot();
118
- });
119
- });
120
- //# sourceMappingURL=db.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.test.js","sourceRoot":"","sources":["../../src/live-queries/db.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=store.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.test.d.ts","sourceRoot":"","sources":["../../src/store/store.test.ts"],"names":[],"mappings":""}
@@ -1,27 +0,0 @@
1
- import { Config, Context, Effect, FetchHttpClient, identity, Layer, Logger } from '@livestore/utils/effect';
2
- import { Vitest } from '@livestore/utils/node-vitest';
3
- import { createStore } from './create-store.js';
4
- import { OtelLiveHttp, PlatformNode } from '@livestore/utils/node';
5
- import { schema } from '../__tests__/fixture.js';
6
- Vitest.describe('Store', () => {
7
- Vitest.describe('ClientSessionSyncProcessor', () => {
8
- Vitest.scopedLive('basic', () => Effect.gen(function* () {
9
- const { store } = yield* TestContext;
10
- }));
11
- });
12
- });
13
- class TestContext extends Context.Tag('TestContext')() {
14
- }
15
- const TestContextLive = Effect.gen(function* () {
16
- const adapter = yield* makeInMemoryAdapter();
17
- const store = yield* createStore({
18
- schema,
19
- adapter
20
- });
21
- return { store };
22
- });
23
- const isCi = Config.boolean('CI').pipe(Effect.catchAll(() => Effect.succeed(false)), Effect.runSync);
24
- const otelLayer = isCi ? Layer.empty : OtelLiveHttp({ serviceName: 'sync-test', skipLogUrl: false });
25
- const withCtx = (testContext, { suffix, skipOtel = false } = {}) => (self) => self.pipe(Effect.timeout(isCi ? 60_000 : 10_000), Effect.provide(TestContextLive), Effect.provide(FetchHttpClient.layer), Effect.provide(PlatformNode.NodeFileSystem.layer), Effect.provide(Logger.pretty), Effect.scoped, // We need to scope the effect manually here because otherwise the span is not closed
26
- Effect.withSpan(`${testContext.task.suite?.name}:${testContext.task.name}${suffix ? `:${suffix}` : ''}`), skipOtel ? identity : Effect.provide(otelLayer));
27
- //# sourceMappingURL=store.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../src/store/store.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC3G,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC5B,MAAM,CAAC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEnD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAM,CAAC,CAAC,WAAW,CAAA;QACvC,CAAC,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAKjD;CAAG;AAEN,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QACjC,MAAM;QACN,OAAO;KACP,CAAC,CAAA;IACD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC,CAAC,CAAA;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC5C,MAAM,CAAC,OAAO,CACf,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;AAEpG,MAAM,OAAO,GACX,CAAC,WAA+B,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,KAAK,KAA8C,EAAE,EAAE,EAAE,CAChH,CAAU,IAA4B,EAAE,EAAE,CACxC,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAC/B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,EACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAC7B,MAAM,CAAC,MAAM,EAAE,qFAAqF;AACpG,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACxG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAChD,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const isValidFunctionString: (fnStr: string) => boolean;
2
- //# sourceMappingURL=expo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../src/utils/expo.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,UAAW,MAAM,YAMlD,CAAA"}
@@ -1,8 +0,0 @@
1
- const RN_BAD_FUNCTION_STRING = 'function() { [bytecode] }';
2
- export const isValidFunctionString = (fnStr) => {
3
- if (fnStr === RN_BAD_FUNCTION_STRING) {
4
- return false;
5
- }
6
- return true;
7
- };
8
- //# sourceMappingURL=expo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../src/utils/expo.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,2BAA2B,CAAA;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,IAAI,KAAK,KAAK,sBAAsB,EAAE,CAAC;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}