@prisma-idb/idb-client-generator 0.6.0 → 0.7.0
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 +150 -4
- package/dist/fileCreators/prisma-idb-client/classes/models/IDBModelClass.js +2 -0
- package/dist/fileCreators/prisma-idb-client/classes/models/IDBModelClass.js.map +1 -1
- package/dist/fileCreators/prisma-idb-client/classes/models/api/update.js +14 -5
- package/dist/fileCreators/prisma-idb-client/classes/models/api/update.js.map +1 -1
- package/dist/fileCreators/prisma-idb-client/classes/models/api/upsert.js +39 -0
- package/dist/fileCreators/prisma-idb-client/classes/models/api/upsert.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,154 @@
|
|
|
1
|
-
# Prisma
|
|
1
|
+
# Prisma IndexedDB Client Generator
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
This library is a **Prisma generator** that creates a client with a similar syntax and behavior to the Prisma Client but is designed to operate with **IndexedDB** for local storage. It allows developers to interact with IndexedDB using a familiar Prisma-like API.
|
|
4
|
+
|
|
5
|
+
## ⚠️ Warning
|
|
6
|
+
|
|
7
|
+
This library is not fully ready yet. Check [issue #52](https://github.com/prisma-idb/idb-client-generator/issues/52) for the current list of implemented features.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- Prisma-like syntax and API for IndexedDB.
|
|
12
|
+
- Supports CRUD operations with structured data.
|
|
13
|
+
- Integrates seamlessly with Prisma workflows.
|
|
14
|
+
- Generates a client tailored to your Prisma schema.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @prisma-idb/idb-client-generator
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
### 1. Add to Prisma Schema
|
|
25
|
+
|
|
26
|
+
Update your `prisma.schema` file to include the generator:
|
|
27
|
+
|
|
28
|
+
```prisma
|
|
29
|
+
datasource db {
|
|
30
|
+
provider = "postgresql"
|
|
31
|
+
url = env("DATABASE_URL")
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
generator client {
|
|
35
|
+
provider = "prisma-client-js"
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
generator prismaIDB {
|
|
39
|
+
provider = "idb-client-generator"
|
|
40
|
+
output = "./prisma-idb"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
model User {
|
|
44
|
+
id Int @id @default(autoincrement())
|
|
45
|
+
name String
|
|
46
|
+
email String @unique
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. Generate the Client
|
|
51
|
+
|
|
52
|
+
Run the Prisma client generation command:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx prisma generate
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
This will generate a client in your project.
|
|
59
|
+
|
|
60
|
+
### 3. Use the Client
|
|
61
|
+
|
|
62
|
+
Import the generated client and use it in your code:
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { PrismaIDBClient } from "./outputPath/prisma-idb-client";
|
|
66
|
+
|
|
67
|
+
async function main() {
|
|
68
|
+
const idbClient = await PrismaIDBClient.createClient();
|
|
69
|
+
|
|
70
|
+
await idbClient.user.create({
|
|
71
|
+
data: { name: "Alice", email: "alice@example.com" },
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const users = await idbClient.user.findMany();
|
|
75
|
+
console.log(users);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## API
|
|
80
|
+
|
|
81
|
+
The API mimics Prisma Client's API for ease of use:
|
|
82
|
+
|
|
83
|
+
### `create`
|
|
84
|
+
|
|
85
|
+
Insert a new record:
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
idbClient.modelName.create({
|
|
89
|
+
data: {
|
|
90
|
+
field: value,
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `findMany`
|
|
96
|
+
|
|
97
|
+
Retrieve all records:
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
idbClient.modelName.findMany();
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### `findUnique`
|
|
104
|
+
|
|
105
|
+
Retrieve a single record by unique key:
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
idbClient.modelName.findUnique({
|
|
109
|
+
where: { key: value },
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### `update`
|
|
114
|
+
|
|
115
|
+
Update a record:
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
idbClient.modelName.update({
|
|
119
|
+
where: { key: value },
|
|
120
|
+
data: { key: newValue },
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### `delete`
|
|
125
|
+
|
|
126
|
+
Delete a record:
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
idbClient.modelName.delete({
|
|
130
|
+
where: { key: value },
|
|
131
|
+
});
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Development Notes
|
|
135
|
+
|
|
136
|
+
- **IndexedDB Dependency**: The client internally uses the `idb` library for IndexedDB operations.
|
|
137
|
+
- **Compatibility**: Ensure your environment supports IndexedDB (modern browsers).
|
|
138
|
+
- **Local-Only**: This is designed for local storage scenarios and does not support server-side databases.
|
|
139
|
+
|
|
140
|
+
## Contributing
|
|
141
|
+
|
|
142
|
+
We welcome contributions! Please see our CONTRIBUTING.md for guidelines on how to contribute to this project.
|
|
143
|
+
|
|
144
|
+
## Security
|
|
145
|
+
|
|
146
|
+
If you discover a security vulnerability, please follow our SECURITY.md guidelines on reporting issues responsibly.
|
|
5
147
|
|
|
6
148
|
## License
|
|
7
149
|
|
|
8
|
-
GNU
|
|
150
|
+
This project is licensed under the GNU Affero General Public License v3.0. See the LICENSE file for more details.
|
|
151
|
+
|
|
152
|
+
## Acknowledgements
|
|
153
|
+
|
|
154
|
+
Special thanks to the open-source community for their contributions to the tools and libraries used in this project.
|
|
@@ -25,6 +25,7 @@ const _applyOrderByClause_1 = require("./utils/_applyOrderByClause");
|
|
|
25
25
|
const _resolveOrderByKey_1 = require("./utils/_resolveOrderByKey");
|
|
26
26
|
const _resolveSortOrder_1 = require("./utils/_resolveSortOrder");
|
|
27
27
|
const _preprocessListFields_1 = require("./utils/_preprocessListFields");
|
|
28
|
+
const upsert_1 = require("./api/upsert");
|
|
28
29
|
function addIDBModelClass(file, model, models) {
|
|
29
30
|
const modelClass = file.addClass({
|
|
30
31
|
name: `${model.name}IDBClass`,
|
|
@@ -54,5 +55,6 @@ function addIDBModelClass(file, model, models) {
|
|
|
54
55
|
(0, delete_1.addDeleteMethod)(modelClass, model, models);
|
|
55
56
|
(0, deleteMany_1.addDeleteManyMethod)(modelClass, model, models);
|
|
56
57
|
(0, update_1.addUpdateMethod)(modelClass, model);
|
|
58
|
+
(0, upsert_1.addUpsertMethod)(modelClass, model);
|
|
57
59
|
}
|
|
58
60
|
//# sourceMappingURL=IDBModelClass.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IDBModelClass.js","sourceRoot":"","sources":["../../../../../src/fileCreators/prisma-idb-client/classes/models/IDBModelClass.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"IDBModelClass.js","sourceRoot":"","sources":["../../../../../src/fileCreators/prisma-idb-client/classes/models/IDBModelClass.ts"],"names":[],"mappings":";;AA4BA,4CAmCC;AA7DD,uCAA6C;AAC7C,yCAA+C;AAC/C,iDAAuD;AACvD,mEAAmE;AACnE,+CAAqD;AACrD,6DAA6D;AAC7D,6CAAmD;AACnD,iDAAuD;AACvD,+DAA+D;AAC/D,yCAA+C;AAC/C,6DAA4D;AAC5D,mEAAkE;AAClE,iEAAgE;AAChE,yDAAgE;AAChE,iFAAgF;AAChF,6EAA4E;AAC5E,6EAAkF;AAClF,+EAA8E;AAC9E,yCAA+C;AAC/C,iDAAuD;AACvD,qEAAoE;AACpE,mEAAkE;AAClE,iEAAgE;AAChE,yEAAwE;AACxE,yCAA+C;AAE/C,SAAgB,gBAAgB,CAAC,IAAgB,EAAE,KAAY,EAAE,MAAwB;IACvF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,UAAU;QAC7B,OAAO,EAAE,mBAAmB;KAC7B,CAAC,CAAC;IAEH,IAAA,uCAAmB,EAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAA,yCAAoB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,IAAA,mCAAiB,EAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAA,2CAAqB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACzC,IAAA,yCAAoB,EAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,IAAA,uCAAmB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,IAAA,uCAAuB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAA,qDAA0B,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAA,mDAAyB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAA,uDAA2B,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAA,yDAA+B,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnD,IAAA,+CAAuB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAE3C,IAAA,4BAAiB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrC,IAAA,8BAAkB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACtC,IAAA,sCAAmB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,IAAA,gCAAmB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,IAAA,wCAAoB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,IAAA,sBAAc,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAElC,IAAA,wBAAe,EAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAA,gCAAmB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,IAAA,4CAAsB,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAE1C,IAAA,wBAAe,EAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAA,gCAAmB,EAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAA,wBAAe,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnC,IAAA,wBAAe,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -13,7 +13,7 @@ function addUpdateMethod(modelClass, model) {
|
|
|
13
13
|
],
|
|
14
14
|
returnType: `Promise<Prisma.Result<Prisma.${model.name}Delegate, Q, 'update'>>`,
|
|
15
15
|
statements: (writer) => {
|
|
16
|
-
addGetRecord(writer);
|
|
16
|
+
addGetRecord(writer, model);
|
|
17
17
|
addStringUpdateHandling(writer, model);
|
|
18
18
|
addDateTimeUpdateHandling(writer, model);
|
|
19
19
|
addBooleanUpdateHandling(writer, model);
|
|
@@ -24,22 +24,31 @@ function addUpdateMethod(modelClass, model) {
|
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
function addGetRecord(writer) {
|
|
27
|
+
function addGetRecord(writer, model) {
|
|
28
|
+
const pk = JSON.parse((0, utils_1.getUniqueIdentifiers)(model)[0].keyPath);
|
|
28
29
|
writer
|
|
29
30
|
.writeLine(`tx = tx ?? this.client._db.transaction(Array.from(this._getNeededStoresForFind(query)), "readwrite");`)
|
|
30
31
|
.writeLine(`const record = await this.findUnique({ where: query.where }, tx);`)
|
|
31
32
|
.writeLine(`if (record === null)`)
|
|
32
33
|
.block(() => {
|
|
33
34
|
writer.writeLine(`tx.abort();`).writeLine(`throw new Error("Record not found");`);
|
|
34
|
-
})
|
|
35
|
+
})
|
|
36
|
+
.writeLine(`const startKeyPath: PrismaIDBSchema["${model.name}"]["key"] = [${pk.map((field) => `record.${field}, `)}];`);
|
|
35
37
|
}
|
|
36
38
|
function addPutAndReturn(writer, model) {
|
|
37
|
-
const pk = (0, utils_1.getUniqueIdentifiers)(model)[0];
|
|
39
|
+
const pk = JSON.parse((0, utils_1.getUniqueIdentifiers)(model)[0].keyPath);
|
|
38
40
|
writer
|
|
41
|
+
.writeLine(`const endKeyPath: PrismaIDBSchema["${model.name}"]["key"] = [${pk.map((field) => `record.${field}, `)}];`)
|
|
42
|
+
.writeLine(`for (let i = 0; i < startKeyPath.length; i++)`)
|
|
43
|
+
.block(() => {
|
|
44
|
+
writer.writeLine(`if (startKeyPath[i] !== endKeyPath[i])`).block(() => {
|
|
45
|
+
writer.writeLine(`await tx.objectStore("${model.name}").delete(startKeyPath);`).writeLine(`break;`);
|
|
46
|
+
});
|
|
47
|
+
})
|
|
39
48
|
.writeLine(`const keyPath = await tx.objectStore("${model.name}").put(record);`)
|
|
40
49
|
.writeLine(`const recordWithRelations = (await this.findUnique(`)
|
|
41
50
|
.block(() => {
|
|
42
|
-
writer.writeLine(`...query, where: { ${
|
|
51
|
+
writer.writeLine(`...query, where: { ${pk[0]}: keyPath[0] },`);
|
|
43
52
|
})
|
|
44
53
|
.writeLine(`, tx))!;`)
|
|
45
54
|
.writeLine(`return recordWithRelations as Prisma.Result<Prisma.${model.name}Delegate, Q, "update">;`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../../../src/fileCreators/prisma-idb-client/classes/models/api/update.ts"],"names":[],"mappings":";;AAIA,0CAsBC;AA1BD,wDAAoE;AAIpE,SAAgB,eAAe,CAAC,UAA4B,EAAE,KAAY;IACxE,UAAU,CAAC,SAAS,CAAC;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,sBAAsB,KAAK,CAAC,IAAI,qBAAqB,EAAE,CAAC;QAClG,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;YAC5B,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,mCAAmC,EAAE;SAClF;QACD,UAAU,EAAE,gCAAgC,KAAK,CAAC,IAAI,yBAAyB;QAC/E,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,YAAY,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../../../src/fileCreators/prisma-idb-client/classes/models/api/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addUpsertMethod = addUpsertMethod;
|
|
4
|
+
const utils_1 = require("../../../../../helpers/utils");
|
|
5
|
+
function addUpsertMethod(modelClass, model) {
|
|
6
|
+
modelClass.addMethod({
|
|
7
|
+
name: "upsert",
|
|
8
|
+
typeParameters: [{ name: "Q", constraint: `Prisma.Args<Prisma.${model.name}Delegate, "upsert">` }],
|
|
9
|
+
isAsync: true,
|
|
10
|
+
parameters: [
|
|
11
|
+
{ name: "query", type: "Q" },
|
|
12
|
+
{ name: "tx", hasQuestionToken: true, type: "IDBUtils.ReadwriteTransactionType" },
|
|
13
|
+
],
|
|
14
|
+
returnType: `Promise<Prisma.Result<Prisma.${model.name}Delegate, Q, "upsert">>`,
|
|
15
|
+
statements: (writer) => {
|
|
16
|
+
addGetAndUpsertRecord(writer);
|
|
17
|
+
addRefetchAndReturnRecord(writer, model);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function addGetAndUpsertRecord(writer) {
|
|
22
|
+
writer
|
|
23
|
+
.writeLine(`tx = tx ?? this.client._db.transaction(Array.from(this._getNeededStoresForFind(query)), "readwrite");`)
|
|
24
|
+
.writeLine(`let record = await this.findUnique({ where: query.where }, tx);`)
|
|
25
|
+
.writeLine(`if (!record) record = await this.create({ data: query.create }, tx);`)
|
|
26
|
+
.writeLine(`else record = await this.update({ where: query.where, data: query.update }, tx);`);
|
|
27
|
+
}
|
|
28
|
+
function addRefetchAndReturnRecord(writer, model) {
|
|
29
|
+
const pk = JSON.parse((0, utils_1.getUniqueIdentifiers)(model)[0].keyPath)[0];
|
|
30
|
+
const hasRelations = model.fields.some(({ kind }) => kind === "object");
|
|
31
|
+
let recordFindQuery = `record = await this.findUniqueOrThrow({ where: { ${pk}: record.${pk} }, select: query.select`;
|
|
32
|
+
if (hasRelations)
|
|
33
|
+
recordFindQuery += ", include: query.include";
|
|
34
|
+
recordFindQuery += "});";
|
|
35
|
+
writer
|
|
36
|
+
.writeLine(recordFindQuery)
|
|
37
|
+
.writeLine(`return record as Prisma.Result<Prisma.${model.name}Delegate, Q, "upsert">;`);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=upsert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsert.js","sourceRoot":"","sources":["../../../../../../src/fileCreators/prisma-idb-client/classes/models/api/upsert.ts"],"names":[],"mappings":";;AAIA,0CAeC;AAnBD,wDAAoE;AAIpE,SAAgB,eAAe,CAAC,UAA4B,EAAE,KAAY;IACxE,UAAU,CAAC,SAAS,CAAC;QACnB,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,sBAAsB,KAAK,CAAC,IAAI,qBAAqB,EAAE,CAAC;QAClG,OAAO,EAAE,IAAI;QACb,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;YAC5B,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,mCAAmC,EAAE;SAClF;QACD,UAAU,EAAE,gCAAgC,KAAK,CAAC,IAAI,yBAAyB;QAC/E,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC9B,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAuB;IAEpD,MAAM;SACH,SAAS,CAAC,uGAAuG,CAAC;SAClH,SAAS,CAAC,iEAAiE,CAAC;SAC5E,SAAS,CAAC,sEAAsE,CAAC;SACjF,SAAS,CAAC,kFAAkF,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAuB,EAAE,KAAY;IAEtE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,4BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAExE,IAAI,eAAe,GAAG,oDAAoD,EAAE,YAAY,EAAE,0BAA0B,CAAC;IACrH,IAAI,YAAY;QAAE,eAAe,IAAI,0BAA0B,CAAC;IAChE,eAAe,IAAI,KAAK,CAAC;IAEzB,MAAM;SACH,SAAS,CAAC,eAAe,CAAC;SAC1B,SAAS,CAAC,yCAAyC,KAAK,CAAC,IAAI,yBAAyB,CAAC,CAAC;AAC7F,CAAC"}
|