@party-stack/expo-runtime 0.4.1 → 0.4.2
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 +16 -0
- package/lib/ExpoFileSystemBlobBytesStore.d.ts.map +1 -1
- package/lib/ExpoFileSystemBlobBytesStore.js +9 -10
- package/lib/ExpoFileSystemBlobBytesStore.js.map +1 -1
- package/lib/createExpoRuntime.d.ts.map +1 -1
- package/lib/createExpoRuntime.js +5 -3
- package/lib/createExpoRuntime.js.map +1 -1
- package/lib/hashStorageName.d.ts +4 -0
- package/lib/hashStorageName.d.ts.map +1 -0
- package/lib/hashStorageName.js +9 -0
- package/lib/hashStorageName.js.map +1 -0
- package/lib/index.js +1 -2
- package/lib/polyfill.d.ts +1 -0
- package/lib/polyfill.js +33 -0
- package/lib/polyfill.js.map +1 -0
- package/package.json +22 -11
package/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Expo runtime
|
|
2
|
+
|
|
3
|
+
This runtime targets Expo SDK 57. Install `@party-stack/expo-runtime` and its Expo peer dependencies using SDK 57-compatible versions. Expo installs `expo/fetch` as the default native fetch starting in SDK 56; no separate `expo-fetch` package or fetch installer is needed. The runtime includes `expo-blob`.
|
|
4
|
+
|
|
5
|
+
Import the required polyfill first in your application entry point, before importing application code or creating clients:
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import "@party-stack/expo-runtime/polyfill";
|
|
9
|
+
import "expo-router/entry";
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Then use `createExpoRuntime` from `@party-stack/expo-runtime` as your installation's runtime provider.
|
|
13
|
+
|
|
14
|
+
The polyfill replaces global `Blob` with Expo Blob and global `File` with a compatible class extending Expo Blob. It leaves Expo’s installed fetch unchanged. Import it once at startup; it is a separate entry point so importing the runtime alone does not replace Blob or File. Attachment uploads use Expo’s default fetch; do not opt back into React Native fetch with `EXPO_PUBLIC_USE_RN_FETCH`.
|
|
15
|
+
|
|
16
|
+
Attachment storage requires blobs with `arrayBuffer()`, as provided by Expo Blob and Expo File. Blobs returned by other native libraries may still use React Native's older Blob implementation; convert those to compatible blobs before passing them to the runtime. Cache reads return `expo-file-system` File objects, which Expo fetch accepts as upload bodies.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoFileSystemBlobBytesStore.d.ts","names":[],"sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ExpoFileSystemBlobBytesStore.d.ts","names":[],"sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"mappings":";;iBAIiB;EACb;;qBAGS,wCAAwC;;EAGjD,YAAY,SAAS;EAIf,MAAM,YAAY,MAAM,OAAO;EAOrC,KAAK,aAAa,QAAQ;EAU1B,OAAO,aAAa;EAOpB,SAAS"}
|
|
@@ -1,31 +1,30 @@
|
|
|
1
|
+
import { hashStorageName } from "./hashStorageName.js";
|
|
1
2
|
import { Directory, File, Paths } from "expo-file-system";
|
|
2
3
|
//#region src/ExpoFileSystemBlobBytesStore.ts
|
|
3
|
-
function encodeFileName(id) {
|
|
4
|
-
return encodeURIComponent(id);
|
|
5
|
-
}
|
|
6
4
|
var ExpoFileSystemBlobBytesStore = class {
|
|
7
5
|
#directoryName;
|
|
8
6
|
constructor(options) {
|
|
9
7
|
this.#directoryName = options.directoryName;
|
|
10
8
|
}
|
|
11
9
|
async write(id, blob) {
|
|
12
|
-
const file = this.#file(id);
|
|
10
|
+
const file = await this.#file(id);
|
|
11
|
+
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
13
12
|
file.create({
|
|
14
13
|
intermediates: true,
|
|
15
14
|
overwrite: true
|
|
16
15
|
});
|
|
17
|
-
file.write(
|
|
16
|
+
file.write(bytes);
|
|
18
17
|
}
|
|
19
18
|
read(id) {
|
|
20
|
-
return Promise.resolve().then(() => {
|
|
21
|
-
const file = this.#file(id);
|
|
19
|
+
return Promise.resolve().then(async () => {
|
|
20
|
+
const file = await this.#file(id);
|
|
22
21
|
if (!file.exists) throw new Error(`Blob bytes not found for "${id}".`);
|
|
23
22
|
return file;
|
|
24
23
|
});
|
|
25
24
|
}
|
|
26
25
|
delete(id) {
|
|
27
|
-
return Promise.resolve().then(() => {
|
|
28
|
-
const file = this.#file(id);
|
|
26
|
+
return Promise.resolve().then(async () => {
|
|
27
|
+
const file = await this.#file(id);
|
|
29
28
|
if (file.exists) file.delete();
|
|
30
29
|
});
|
|
31
30
|
}
|
|
@@ -44,7 +43,7 @@ var ExpoFileSystemBlobBytesStore = class {
|
|
|
44
43
|
return directory;
|
|
45
44
|
}
|
|
46
45
|
#file(id) {
|
|
47
|
-
return new File(this.#directory(),
|
|
46
|
+
return hashStorageName(id).then((name) => new File(this.#directory(), name));
|
|
48
47
|
}
|
|
49
48
|
};
|
|
50
49
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoFileSystemBlobBytesStore.js","names":[],"sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"sourcesContent":["import { Directory, File, Paths } from \"expo-file-system\";\nimport type { BlobBytesStore } from \"@party-stack/runtime\";\n\nexport interface ExpoFileSystemBlobBytesStoreOptions {\n directoryName: string;\n}\n\
|
|
1
|
+
{"version":3,"file":"ExpoFileSystemBlobBytesStore.js","names":[],"sources":["../src/ExpoFileSystemBlobBytesStore.ts"],"sourcesContent":["import { Directory, File, Paths } from \"expo-file-system\";\nimport { hashStorageName } from \"./hashStorageName.js\";\nimport type { BlobBytesStore } from \"@party-stack/runtime\";\n\nexport interface ExpoFileSystemBlobBytesStoreOptions {\n directoryName: string;\n}\n\nexport class ExpoFileSystemBlobBytesStore implements BlobBytesStore {\n #directoryName: string;\n\n constructor(options: ExpoFileSystemBlobBytesStoreOptions) {\n this.#directoryName = options.directoryName;\n }\n\n async write(id: string, blob: Blob): Promise<void> {\n const file = await this.#file(id);\n const bytes = new Uint8Array(await blob.arrayBuffer());\n file.create({ intermediates: true, overwrite: true });\n file.write(bytes);\n }\n\n read(id: string): Promise<Blob> {\n return Promise.resolve().then(async () => {\n const file = await this.#file(id);\n if (!file.exists) {\n throw new Error(`Blob bytes not found for \"${id}\".`);\n }\n return file;\n });\n }\n\n delete(id: string): Promise<void> {\n return Promise.resolve().then(async () => {\n const file = await this.#file(id);\n if (file.exists) file.delete();\n });\n }\n\n clear(): Promise<void> {\n return Promise.resolve().then(() => {\n const directory = new Directory(Paths.document, this.#directoryName);\n if (directory.exists) directory.delete();\n });\n }\n\n #directory(): Directory {\n const directory = new Directory(Paths.document, this.#directoryName);\n directory.create({ idempotent: true, intermediates: true });\n return directory;\n }\n\n #file(id: string): Promise<File> {\n return hashStorageName(id).then((name) => new File(this.#directory(), name));\n }\n}\n"],"mappings":";;;AAQA,IAAa,+BAAb,MAAoE;CAChE;CAEA,YAAY,SAA8C;EACtD,KAAK,iBAAiB,QAAQ;CAClC;CAEA,MAAM,MAAM,IAAY,MAA2B;EAC/C,MAAM,OAAO,MAAM,KAAK,MAAM,EAAE;EAChC,MAAM,QAAQ,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;EACrD,KAAK,OAAO;GAAE,eAAe;GAAM,WAAW;EAAK,CAAC;EACpD,KAAK,MAAM,KAAK;CACpB;CAEA,KAAK,IAA2B;EAC5B,OAAO,QAAQ,QAAQ,CAAC,CAAC,KAAK,YAAY;GACtC,MAAM,OAAO,MAAM,KAAK,MAAM,EAAE;GAChC,IAAI,CAAC,KAAK,QACN,MAAM,IAAI,MAAM,6BAA6B,GAAG,GAAG;GAEvD,OAAO;EACX,CAAC;CACL;CAEA,OAAO,IAA2B;EAC9B,OAAO,QAAQ,QAAQ,CAAC,CAAC,KAAK,YAAY;GACtC,MAAM,OAAO,MAAM,KAAK,MAAM,EAAE;GAChC,IAAI,KAAK,QAAQ,KAAK,OAAO;EACjC,CAAC;CACL;CAEA,QAAuB;EACnB,OAAO,QAAQ,QAAQ,CAAC,CAAC,WAAW;GAChC,MAAM,YAAY,IAAI,UAAU,MAAM,UAAU,KAAK,cAAc;GACnE,IAAI,UAAU,QAAQ,UAAU,OAAO;EAC3C,CAAC;CACL;CAEA,aAAwB;EACpB,MAAM,YAAY,IAAI,UAAU,MAAM,UAAU,KAAK,cAAc;EACnE,UAAU,OAAO;GAAE,YAAY;GAAM,eAAe;EAAK,CAAC;EAC1D,OAAO;CACX;CAEA,MAAM,IAA2B;EAC7B,OAAO,gBAAgB,EAAE,CAAC,CAAC,MAAM,SAAS,IAAI,KAAK,KAAK,WAAW,GAAG,IAAI,CAAC;CAC/E;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExpoRuntime.d.ts","names":[],"sources":["../src/createExpoRuntime.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"createExpoRuntime.d.ts","names":[],"sources":["../src/createExpoRuntime.ts"],"mappings":";;;qBAaa,oBAAoB,eAAe,sBAAsB,QAAQ"}
|
package/lib/createExpoRuntime.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hashStorageName } from "./hashStorageName.js";
|
|
1
2
|
import { ExpoFileSystemBlobBytesStore } from "./ExpoFileSystemBlobBytesStore.js";
|
|
2
3
|
import { ExpoNetworkConnectivity } from "./ExpoNetworkConnectivity.js";
|
|
3
4
|
import { ExpoSecretStore } from "./ExpoSecretStore.js";
|
|
@@ -10,10 +11,11 @@ import { deleteDatabaseAsync, openDatabaseAsync } from "expo-sqlite";
|
|
|
10
11
|
//#region src/createExpoRuntime.ts
|
|
11
12
|
const createExpoRuntime = defineRuntime(async (owner, namespace) => {
|
|
12
13
|
const name = `party-stack:${owner}:${namespace}`;
|
|
13
|
-
const
|
|
14
|
+
const storageName = `party-stack-${await hashStorageName(JSON.stringify([owner, namespace]))}`;
|
|
15
|
+
const [database, connectivity] = await Promise.all([openDatabaseAsync(`${storageName}.db`), ExpoNetworkConnectivity.create()]);
|
|
14
16
|
const persistence = createExpoSQLitePersistence({ database });
|
|
15
17
|
const coordination = new SingleProcessCoordination({ scope: name });
|
|
16
|
-
const blobBytes = new ExpoFileSystemBlobBytesStore({ directoryName: `${
|
|
18
|
+
const blobBytes = new ExpoFileSystemBlobBytesStore({ directoryName: `${storageName}-blobs` });
|
|
17
19
|
return {
|
|
18
20
|
owner,
|
|
19
21
|
namespace,
|
|
@@ -24,7 +26,7 @@ const createExpoRuntime = defineRuntime(async (owner, namespace) => {
|
|
|
24
26
|
coordination,
|
|
25
27
|
persistence,
|
|
26
28
|
destroy: async () => {
|
|
27
|
-
await Promise.all([deleteDatabaseAsync(`${
|
|
29
|
+
await Promise.all([deleteDatabaseAsync(`${storageName}.db`), blobBytes.clear()]);
|
|
28
30
|
},
|
|
29
31
|
cleanup: async () => {
|
|
30
32
|
await coordination.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createExpoRuntime.js","names":[],"sources":["../src/createExpoRuntime.ts"],"sourcesContent":["// SQLite persistence revives Temporal values through the registered global constructors.\nimport \"temporal-polyfill/global\";\nimport { SingleProcessCoordination } from \"@party-stack/coordination\";\nimport { defineRuntime } from \"@party-stack/runtime\";\nimport { createExpoSQLitePersistence } from \"@tanstack/expo-db-sqlite-persistence\";\nimport { deleteDatabaseAsync, openDatabaseAsync } from \"expo-sqlite\";\nimport { createExpoBrowserAuthentication } from \"./createExpoBrowserAuthentication.js\";\nimport { ExpoFileSystemBlobBytesStore } from \"./ExpoFileSystemBlobBytesStore.js\";\nimport { ExpoNetworkConnectivity } from \"./ExpoNetworkConnectivity.js\";\nimport { ExpoSecretStore } from \"./ExpoSecretStore.js\";\nimport type { RuntimeAdapter } from \"@party-stack/runtime\";\n\nexport const createExpoRuntime: (owner: string, namespace: string) => Promise<RuntimeAdapter> = defineRuntime(\n async (owner, namespace) => {\n const name = `party-stack:${owner}:${namespace}`;\n const [database, connectivity] = await Promise.all([\n openDatabaseAsync(`${
|
|
1
|
+
{"version":3,"file":"createExpoRuntime.js","names":[],"sources":["../src/createExpoRuntime.ts"],"sourcesContent":["// SQLite persistence revives Temporal values through the registered global constructors.\nimport \"temporal-polyfill/global\";\nimport { SingleProcessCoordination } from \"@party-stack/coordination\";\nimport { defineRuntime } from \"@party-stack/runtime\";\nimport { createExpoSQLitePersistence } from \"@tanstack/expo-db-sqlite-persistence\";\nimport { deleteDatabaseAsync, openDatabaseAsync } from \"expo-sqlite\";\nimport { createExpoBrowserAuthentication } from \"./createExpoBrowserAuthentication.js\";\nimport { ExpoFileSystemBlobBytesStore } from \"./ExpoFileSystemBlobBytesStore.js\";\nimport { ExpoNetworkConnectivity } from \"./ExpoNetworkConnectivity.js\";\nimport { ExpoSecretStore } from \"./ExpoSecretStore.js\";\nimport { hashStorageName } from \"./hashStorageName.js\";\nimport type { RuntimeAdapter } from \"@party-stack/runtime\";\n\nexport const createExpoRuntime: (owner: string, namespace: string) => Promise<RuntimeAdapter> = defineRuntime(\n async (owner, namespace) => {\n const name = `party-stack:${owner}:${namespace}`;\n const storageName = `party-stack-${await hashStorageName(JSON.stringify([owner, namespace]))}`;\n const [database, connectivity] = await Promise.all([\n openDatabaseAsync(`${storageName}.db`),\n ExpoNetworkConnectivity.create(),\n ]);\n const persistence = createExpoSQLitePersistence({\n database: database,\n });\n const coordination = new SingleProcessCoordination({\n scope: name,\n });\n const blobBytes = new ExpoFileSystemBlobBytesStore({\n directoryName: `${storageName}-blobs`,\n });\n return {\n owner,\n namespace,\n blobBytes,\n browserAuthentication: createExpoBrowserAuthentication(),\n secrets: new ExpoSecretStore(`${name}:secrets`),\n connectivity,\n coordination,\n persistence,\n destroy: async () => {\n await Promise.all([deleteDatabaseAsync(`${storageName}.db`), blobBytes.clear()]);\n },\n cleanup: async () => {\n await coordination.close();\n connectivity.close();\n await database.closeAsync();\n },\n };\n }\n);\n"],"mappings":";;;;;;;;;;;AAaA,MAAa,oBAAmF,cAC5F,OAAO,OAAO,cAAc;CACxB,MAAM,OAAO,eAAe,MAAM,GAAG;CACrC,MAAM,cAAc,eAAe,MAAM,gBAAgB,KAAK,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;CAC3F,MAAM,CAAC,UAAU,gBAAgB,MAAM,QAAQ,IAAI,CAC/C,kBAAkB,GAAG,YAAY,IAAI,GACrC,wBAAwB,OAAO,CACnC,CAAC;CACD,MAAM,cAAc,4BAA4B,EAClC,SACd,CAAC;CACD,MAAM,eAAe,IAAI,0BAA0B,EAC/C,OAAO,KACX,CAAC;CACD,MAAM,YAAY,IAAI,6BAA6B,EAC/C,eAAe,GAAG,YAAY,QAClC,CAAC;CACD,OAAO;EACH;EACA;EACA;EACA,uBAAuB,gCAAgC;EACvD,SAAS,IAAI,gBAAgB,GAAG,KAAK,SAAS;EAC9C;EACA;EACA;EACA,SAAS,YAAY;GACjB,MAAM,QAAQ,IAAI,CAAC,oBAAoB,GAAG,YAAY,IAAI,GAAG,UAAU,MAAM,CAAC,CAAC;EACnF;EACA,SAAS,YAAY;GACjB,MAAM,aAAa,MAAM;GACzB,aAAa,MAAM;GACnB,MAAM,SAAS,WAAW;EAC9B;CACJ;AACJ,CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashStorageName.d.ts","names":[],"sources":["../src/hashStorageName.ts"],"mappings":";wBAEgB,gBAAgB,gBAAgB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CryptoDigestAlgorithm, digestStringAsync } from "expo-crypto";
|
|
2
|
+
//#region src/hashStorageName.ts
|
|
3
|
+
function hashStorageName(value) {
|
|
4
|
+
return digestStringAsync(CryptoDigestAlgorithm.SHA256, value);
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { hashStorageName };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=hashStorageName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashStorageName.js","names":[],"sources":["../src/hashStorageName.ts"],"sourcesContent":["import { CryptoDigestAlgorithm, digestStringAsync } from \"expo-crypto\";\n\nexport function hashStorageName(value: string): Promise<string> {\n return digestStringAsync(CryptoDigestAlgorithm.SHA256, value);\n}\n"],"mappings":";;AAEA,SAAgB,gBAAgB,OAAgC;CAC5D,OAAO,kBAAkB,sBAAsB,QAAQ,KAAK;AAChE"}
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { createExpoRuntime };
|
|
1
|
+
export { createExpoRuntime } from "./createExpoRuntime.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|
package/lib/polyfill.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Blob } from "expo-blob";
|
|
2
|
+
//#region src/polyfill.ts
|
|
3
|
+
globalThis.Blob = Blob;
|
|
4
|
+
var ExpoFile = class extends globalThis.Blob {
|
|
5
|
+
#name;
|
|
6
|
+
#lastModified;
|
|
7
|
+
constructor(parts, name, options = {}) {
|
|
8
|
+
super(parts, options);
|
|
9
|
+
this.#name = String(name);
|
|
10
|
+
this.#lastModified = options.lastModified ?? Date.now();
|
|
11
|
+
Object.defineProperty(this, "name", {
|
|
12
|
+
value: this.#name,
|
|
13
|
+
enumerable: true
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
get name() {
|
|
17
|
+
return this.#name;
|
|
18
|
+
}
|
|
19
|
+
get lastModified() {
|
|
20
|
+
return this.#lastModified;
|
|
21
|
+
}
|
|
22
|
+
get webkitRelativePath() {
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
get [Symbol.toStringTag]() {
|
|
26
|
+
return "File";
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
globalThis.File = ExpoFile;
|
|
30
|
+
//#endregion
|
|
31
|
+
export {};
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=polyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill.js","names":[],"sources":["../src/polyfill.ts"],"sourcesContent":["import { Blob } from \"expo-blob\";\n\n// Expo declarations predate the current DOM Blob byte-array generics.\nglobalThis.Blob = Blob as unknown as typeof globalThis.Blob;\n\n// React Native File extends its own Blob class, so replace it alongside Blob.\nclass ExpoFile extends globalThis.Blob implements File {\n readonly #name: string;\n readonly #lastModified: number;\n\n constructor(parts: BlobPart[], name: string, options: FilePropertyBag = {}) {\n super(parts, options);\n this.#name = String(name);\n this.#lastModified = options.lastModified ?? Date.now();\n // Expo FormData checks own descriptors before assigning a blob filename.\n // An inherited getter alone would make that assignment throw.\n Object.defineProperty(this, \"name\", { value: this.#name, enumerable: true });\n }\n\n get name(): string {\n return this.#name;\n }\n\n get lastModified(): number {\n return this.#lastModified;\n }\n\n get webkitRelativePath(): string {\n return \"\";\n }\n\n get [Symbol.toStringTag](): string {\n return \"File\";\n }\n}\n\nglobalThis.File = ExpoFile;\n"],"mappings":";;AAGA,WAAW,OAAO;AAGlB,IAAM,WAAN,cAAuB,WAAW,KAAqB;CACnD;CACA;CAEA,YAAY,OAAmB,MAAc,UAA2B,CAAC,GAAG;EACxE,MAAM,OAAO,OAAO;EACpB,KAAK,QAAQ,OAAO,IAAI;EACxB,KAAK,gBAAgB,QAAQ,gBAAgB,KAAK,IAAI;EAGtD,OAAO,eAAe,MAAM,QAAQ;GAAE,OAAO,KAAK;GAAO,YAAY;EAAK,CAAC;CAC/E;CAEA,IAAI,OAAe;EACf,OAAO,KAAK;CAChB;CAEA,IAAI,eAAuB;EACvB,OAAO,KAAK;CAChB;CAEA,IAAI,qBAA6B;EAC7B,OAAO;CACX;CAEA,KAAK,OAAO,eAAuB;EAC/B,OAAO;CACX;AACJ;AAEA,WAAW,OAAO"}
|
package/package.json
CHANGED
|
@@ -1,35 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@party-stack/expo-runtime",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"files": [
|
|
5
5
|
"lib"
|
|
6
6
|
],
|
|
7
7
|
"type": "module",
|
|
8
|
+
"sideEffects": [
|
|
9
|
+
"./lib/polyfill.js"
|
|
10
|
+
],
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
13
|
"types": "./lib/index.d.ts",
|
|
11
14
|
"default": "./lib/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./polyfill": {
|
|
17
|
+
"types": "./lib/polyfill.d.ts",
|
|
18
|
+
"default": "./lib/polyfill.js"
|
|
12
19
|
}
|
|
13
20
|
},
|
|
14
21
|
"dependencies": {
|
|
15
|
-
"@tanstack/expo-db-sqlite-persistence": "0.2.
|
|
16
|
-
"expo-
|
|
17
|
-
"expo-
|
|
22
|
+
"@tanstack/expo-db-sqlite-persistence": "0.2.34",
|
|
23
|
+
"expo-blob": "^57.0.2",
|
|
24
|
+
"expo-crypto": "^57.0.4",
|
|
25
|
+
"expo-secure-store": "^57.0.4",
|
|
26
|
+
"expo-web-browser": "^57.0.3",
|
|
18
27
|
"temporal-polyfill": "^0.3.0",
|
|
19
28
|
"@party-stack/coordination": "0.3.1",
|
|
20
|
-
"@party-stack/runtime": "0.4.
|
|
29
|
+
"@party-stack/runtime": "0.4.2"
|
|
21
30
|
},
|
|
22
31
|
"devDependencies": {
|
|
23
32
|
"@react-native-community/netinfo": "^12.0.1",
|
|
24
|
-
"expo
|
|
25
|
-
"expo-
|
|
33
|
+
"expo": "^57.0.29",
|
|
34
|
+
"expo-file-system": "^57.0.7",
|
|
35
|
+
"expo-sqlite": "^57.0.4",
|
|
26
36
|
"typescript": "~7.0.2",
|
|
27
|
-
"vite-plus": "1.
|
|
28
|
-
"@party-stack/build-config": "0.1.
|
|
37
|
+
"vite-plus": "1.2.0",
|
|
38
|
+
"@party-stack/build-config": "0.1.3"
|
|
29
39
|
},
|
|
30
40
|
"peerDependencies": {
|
|
31
41
|
"@react-native-community/netinfo": "^12.0.1",
|
|
32
|
-
"expo
|
|
33
|
-
"expo-
|
|
42
|
+
"expo": "^57.0.29",
|
|
43
|
+
"expo-file-system": "^57.0.7",
|
|
44
|
+
"expo-sqlite": "^57.0.4"
|
|
34
45
|
}
|
|
35
46
|
}
|