@seedprotocol/sdk 0.3.7 → 0.3.9
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/dist/addModel.js +4 -0
- package/dist/addModel.js.map +1 -1
- package/dist/main.js +11 -0
- package/dist/main.js.map +1 -1
- package/dist/src/ItemProperty/BaseItemProperty.d.ts +6 -6
- package/dist/src/ItemProperty/index.js +4 -0
- package/dist/src/ItemProperty/index.js.map +1 -0
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.js +2 -2
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.js.map +1 -1
- package/dist/src/ItemProperty/service/actors/resolveRelatedValue.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/resolveRelatedValue.js +4 -4
- package/dist/src/ItemProperty/service/actors/resolveRelatedValue.js.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.js +4 -4
- package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.js.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/index.d.ts +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/index.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts +5 -0
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -0
- package/dist/src/ItemProperty/service/actors/saveValueToDb/{saveImageSrc.js → saveImage.js} +6 -6
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.js.map +1 -0
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.js +2 -2
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.js.map +1 -1
- package/dist/src/ItemProperty/service/propertyMachine.d.ts +7 -7
- package/dist/src/ItemProperty/service/propertyMachine.js +6 -6
- package/dist/src/ItemProperty/service/propertyMachine.js.map +1 -1
- package/dist/src/browser/db/Db.d.ts.map +1 -1
- package/dist/src/browser/db/Db.js +35 -8
- package/dist/src/browser/db/Db.js.map +1 -1
- package/dist/src/browser/helpers/FileManager.d.ts +2 -0
- package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/browser/helpers/FileManager.js +20 -8
- package/dist/src/browser/helpers/FileManager.js.map +1 -1
- package/dist/src/browser/index.d.ts +0 -1
- package/dist/src/browser/index.d.ts.map +1 -1
- package/dist/src/browser/react/index.d.ts +2 -1
- package/dist/src/browser/react/index.d.ts.map +1 -1
- package/dist/src/browser/react/model.d.ts +7 -0
- package/dist/src/browser/react/model.d.ts.map +1 -0
- package/dist/src/browser/react/model.js +20 -0
- package/dist/src/browser/react/model.js.map +1 -0
- package/dist/src/browser/react/services.js +1 -1
- package/dist/src/browser/react/services.js.map +1 -1
- package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
- package/dist/src/browser/workers/FileDownloader.js +3 -1
- package/dist/src/browser/workers/FileDownloader.js.map +1 -1
- package/dist/src/client/ClientManager.d.ts +21 -12
- package/dist/src/client/ClientManager.d.ts.map +1 -1
- package/dist/src/client/ClientManager.js +21 -0
- package/dist/src/client/ClientManager.js.map +1 -1
- package/dist/src/client/actors/saveAppState.d.ts.map +1 -1
- package/dist/src/client/actors/saveAppState.js +0 -1
- package/dist/src/client/actors/saveAppState.js.map +1 -1
- package/dist/src/db/read/getModels.d.ts +2 -0
- package/dist/src/db/read/getModels.d.ts.map +1 -0
- package/dist/src/events/files/download.d.ts.map +1 -1
- package/dist/src/events/files/download.js +0 -1
- package/dist/src/events/files/download.js.map +1 -1
- package/dist/src/events/files/index.d.ts.map +1 -1
- package/dist/src/events/files/index.js +0 -1
- package/dist/src/events/files/index.js.map +1 -1
- package/dist/src/events/services/allItems.d.ts.map +1 -1
- package/dist/src/events/services/allItems.js +0 -1
- package/dist/src/events/services/allItems.js.map +1 -1
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts +2 -0
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/BaseFileManager.js +6 -0
- package/dist/src/helpers/FileManager/BaseFileManager.js.map +1 -1
- package/dist/src/helpers/constants.d.ts +1 -1
- package/dist/src/helpers/constants.js +1 -1
- package/dist/src/helpers/constants.js.map +1 -1
- package/dist/src/helpers/environment.js +1 -1
- package/dist/src/helpers/environment.js.map +1 -1
- package/dist/src/helpers/getSegmentedItemProperties.js +1 -1
- package/dist/src/helpers/getSegmentedItemProperties.js.map +1 -1
- package/dist/src/helpers/index.d.ts +1 -1
- package/dist/src/helpers/index.d.ts.map +1 -1
- package/dist/src/helpers/index.js +3 -3
- package/dist/src/helpers/index.js.map +1 -1
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/node/helpers/FileManager.d.ts +2 -0
- package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/node/helpers/index.d.ts.map +1 -1
- package/dist/src/node/helpers/index.js +0 -1
- package/dist/src/node/helpers/index.js.map +1 -1
- package/dist/src/services/db/actors/migrate.js +1 -1
- package/dist/src/services/db/actors/migrate.js.map +1 -1
- package/dist/src/services/internal/helpers.js +3 -3
- package/dist/src/services/internal/helpers.js.map +1 -1
- package/dist/src/services/publish/actors/upload.js +1 -1
- package/dist/src/services/publish/actors/upload.js.map +1 -1
- package/dist/src/types/model.d.ts +2 -15
- package/dist/src/types/model.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.d.ts +0 -5
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.js.map +0 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
export { Model, Property, Image, List, Text, Json, Relation, Boolean, Number, Date, } from './schema';
|
|
2
2
|
export { Item } from './Item';
|
|
3
|
-
export {
|
|
3
|
+
export { ItemProperty } from './ItemProperty';
|
|
4
|
+
export { useItems, useItem, useItemProperties, useCreateItem, useItemProperty, useDeleteItem, useGlobalServiceStatus, usePublishItem, usePersistedSnapshots, useServices, useService, useModels, } from './browser/react';
|
|
5
|
+
export { FileManager as FileManagerBrowser } from './browser/helpers/FileManager';
|
|
6
|
+
export { Db as DbBrowser } from './browser/db/Db';
|
|
7
|
+
export { models, versions, seeds, metadata, } from './seedSchema';
|
|
8
|
+
export { getModels, getModel, getModelNames, } from './stores/modelClass';
|
|
4
9
|
export { getCorrectId, } from './helpers';
|
|
5
10
|
export { eventEmitter, } from './eventBus';
|
|
6
11
|
export { withSeed } from './node/webpack';
|
|
12
|
+
export type { PublishUpload } from './db/read/getPublishUploads';
|
|
7
13
|
export { client } from './client';
|
|
14
|
+
export * from './types';
|
|
8
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,IAAI,GACL,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,IAAI,GACL,MAAM,UAAU,CAAA;AAEjB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EACL,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,+BAA+B,CAAA;AAC/E,OAAO,EAAC,EAAE,IAAI,SAAS,EAAC,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,cAAc,CAAA;AAEhE,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAE,MAAM,qBAAqB,CAAA;AAEvE,OAAO,EAAE,YAAY,GAAG,MAAM,WAAW,CAAA;AAEzC,OAAO,EACL,YAAY,GACb,MAAM,YAAY,CAAA;AAInB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,cAAc,SAAS,CAAA"}
|
|
@@ -9,6 +9,8 @@ declare class FileManager extends BaseFileManager {
|
|
|
9
9
|
static createDirIfNotExists(filePath: string): Promise<void>;
|
|
10
10
|
static readFileAsBuffer(filePath: string): Promise<Buffer>;
|
|
11
11
|
static readFile(filePath: string): Promise<File>;
|
|
12
|
+
static getParentDirPath(filePath: string): string;
|
|
13
|
+
static getFilenameFromPath(filePath: string): string;
|
|
12
14
|
}
|
|
13
15
|
export { FileManager };
|
|
14
16
|
//# sourceMappingURL=FileManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["../../../../src/node/helpers/FileManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["../../../../src/node/helpers/FileManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAGvE,cAAM,WAAY,SAAQ,eAAe;WAE1B,qBAAqB,CAAE,IAAI,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WAMlE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;WAIrC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;WAMjC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;WAM5B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;WAMhC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAM9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAMrD,gBAAgB,CAAE,QAAQ,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,CAAC;WAIrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIrD;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/node/helpers/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW,GAAU,CAAC,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/node/helpers/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW,GAAU,CAAC,YAAY,MAAM,KAAG,OAAO,CAAC,CAAC,CA6BhE,CAAA;AAED,eAAO,MAAM,wBAAwB,QAC9B,MAAM,aACA,MAAM,kBAoBlB,CAAA"}
|
|
@@ -13,7 +13,6 @@ const getTsImport = async (filePath) => {
|
|
|
13
13
|
logger(`Typescript file not found at ${filePath}`);
|
|
14
14
|
throw new Error(`Typescript file not found at ${filePath}`);
|
|
15
15
|
}
|
|
16
|
-
console.log('filePath', filePath);
|
|
17
16
|
let result;
|
|
18
17
|
try {
|
|
19
18
|
result = await tsImport.load(filePath, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/node/helpers/index.ts"],"sourcesContent":["import fs from 'fs'\nimport * as tsImport from 'ts-import'\nimport { LoadMode } from 'ts-import'\nimport path from 'path'\nimport { glob } from 'glob'\nimport { rimraf } from 'rimraf'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:helpers')\n\nexport const getTsImport = async <T>(filePath: string): Promise<T> => {\n // Check if the config file exists\n if (!fs.existsSync(filePath)) {\n logger(`Typescript file not found at ${filePath}`)\n throw new Error(`Typescript file not found at ${filePath}`)\n }\n\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/node/helpers/index.ts"],"sourcesContent":["import fs from 'fs'\nimport * as tsImport from 'ts-import'\nimport { LoadMode } from 'ts-import'\nimport path from 'path'\nimport { glob } from 'glob'\nimport { rimraf } from 'rimraf'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:helpers')\n\nexport const getTsImport = async <T>(filePath: string): Promise<T> => {\n // Check if the config file exists\n if (!fs.existsSync(filePath)) {\n logger(`Typescript file not found at ${filePath}`)\n throw new Error(`Typescript file not found at ${filePath}`)\n }\n\n let result\n\n try {\n result = await tsImport.load(filePath, {\n mode: LoadMode.Compile,\n compileOptions: {\n compilerOptions: {\n experimentalDecorators: true,\n emitDecoratorMetadata: true,\n },\n },\n }).catch((e) => {\n logger('Error loading ts file:', e)\n throw e\n })\n\n } catch ( e ) {\n console.error(e)\n }\n\n\n return result\n}\n\nexport const deleteFilesWithExtension = async (\n dir: string,\n extension: string,\n) => {\n const pattern = path.join(dir, `**/*${extension}`)\n glob(pattern, (err, files) => {\n if (err) {\n logger('Error finding files:', err)\n return\n }\n\n for (const file of files) {\n // TODO: Change this whole thing to be async?\n rimraf(file, (err) => {\n if (err) {\n logger('Error deleting file:', err)\n } else {\n logger(`Deleted: ${file}`)\n }\n })\n }\n })\n}\n"],"names":[],"mappings":";;;;;;;;AAQA,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC;MAE1B,WAAW,GAAG,OAAU,QAAgB,KAAgB;;IAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC5B,QAAA,MAAM,CAAC,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAC;AAClD,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAA,CAAE,CAAC;;AAG7D,IAAA,IAAI,MAAM;AAEV,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;YACrC,IAAI,EAAE,QAAQ,CAAC,OAAO;AACtB,YAAA,cAAc,EAAE;AACd,gBAAA,eAAe,EAAE;AACf,oBAAA,sBAAsB,EAAE,IAAI;AAC5B,oBAAA,qBAAqB,EAAE,IAAI;AAC5B,iBAAA;AACF,aAAA;AACF,SAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC;AACnC,YAAA,MAAM,CAAC;AACT,SAAC,CAAC;;IAEF,OAAQ,CAAC,EAAG;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;AAIlB,IAAA,OAAO,MAAM;AACf;;;;"}
|
|
@@ -30,7 +30,7 @@ const migrate = fromCallback(({ sendBack, input: { context } }) => {
|
|
|
30
30
|
}
|
|
31
31
|
})
|
|
32
32
|
.then(() => {
|
|
33
|
-
|
|
33
|
+
logger('sending db migrating success');
|
|
34
34
|
sendBack({ type: DB_MIGRATING_SUCCESS, dbName });
|
|
35
35
|
});
|
|
36
36
|
return () => { };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sources":["../../../../../../src/services/db/actors/migrate.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { DbServiceContext, FromCallbackInput, SqliteWasmResult } from '@/types'\nimport {\n BROWSER_FS_TOP_DIR,\n DB_MIGRATING_SUCCESS,\n} from '@/services/internal/constants'\nimport debug from 'debug'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { isBrowser } from '@/helpers/environment'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\n\nconst logger = debug('seedSdk:services:db:actors:migrate')\n\n\n\nexport const migrate = fromCallback<\n EventObject,\n FromCallbackInput<DbServiceContext>\n>(({ sendBack, input: { context } }) => {\n const { pathToDbDir, dbId, dbName } = context\n\n logger('[db/actors] migrate context', context)\n\n let journalExists = false\n\n\n const _checkForFiles = async (): Promise<void> => {\n const journalPath = `/${pathToDbDir}/meta/_journal.json`\n\n journalExists = await BaseFileManager.pathExists(journalPath)\n\n if (!journalExists && isBrowser()) {\n await BaseFileManager.waitForFile(journalPath, 500, 60000)\n }\n }\n\n const _migrate = async (): Promise<void> => {\n await BaseDb.migrate(pathToDbDir, dbName, dbId)\n }\n\n _checkForFiles()\n .then(() => {\n if (!isBrowser()) {\n return _migrate()\n }\n if (journalExists) {\n return _migrate()\n }\n })\n .then(() => {\n
|
|
1
|
+
{"version":3,"file":"migrate.js","sources":["../../../../../../src/services/db/actors/migrate.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { DbServiceContext, FromCallbackInput, SqliteWasmResult } from '@/types'\nimport {\n BROWSER_FS_TOP_DIR,\n DB_MIGRATING_SUCCESS,\n} from '@/services/internal/constants'\nimport debug from 'debug'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { isBrowser } from '@/helpers/environment'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\n\nconst logger = debug('seedSdk:services:db:actors:migrate')\n\n\n\nexport const migrate = fromCallback<\n EventObject,\n FromCallbackInput<DbServiceContext>\n>(({ sendBack, input: { context } }) => {\n const { pathToDbDir, dbId, dbName } = context\n\n logger('[db/actors] migrate context', context)\n\n let journalExists = false\n\n\n const _checkForFiles = async (): Promise<void> => {\n const journalPath = `/${pathToDbDir}/meta/_journal.json`\n\n journalExists = await BaseFileManager.pathExists(journalPath)\n\n if (!journalExists && isBrowser()) {\n await BaseFileManager.waitForFile(journalPath, 500, 60000)\n }\n }\n\n const _migrate = async (): Promise<void> => {\n await BaseDb.migrate(pathToDbDir, dbName, dbId)\n }\n\n _checkForFiles()\n .then(() => {\n if (!isBrowser()) {\n return _migrate()\n }\n if (journalExists) {\n return _migrate()\n }\n })\n .then(() => {\n logger('sending db migrating success')\n sendBack({ type: DB_MIGRATING_SUCCESS, dbName })\n })\n\n return () => { }\n})\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,MAAM,GAAG,KAAK,CAAC,oCAAoC,CAAC;AAI7C,MAAA,OAAO,GAAG,YAAY,CAGjC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAI;IACrC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO;AAE7C,IAAA,MAAM,CAAC,6BAA6B,EAAE,OAAO,CAAC;IAE9C,IAAI,aAAa,GAAG,KAAK;AAGzB,IAAA,MAAM,cAAc,GAAG,YAA0B;AAC/C,QAAA,MAAM,WAAW,GAAG,CAAI,CAAA,EAAA,WAAW,qBAAqB;QAExD,aAAa,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC;AAE7D,QAAA,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE,EAAE;YACjC,MAAM,eAAe,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC;;AAE9D,KAAC;AAED,IAAA,MAAM,QAAQ,GAAG,YAA0B;QACzC,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC;AACjD,KAAC;AAED,IAAA,cAAc;SACX,IAAI,CAAC,MAAK;AACT,QAAA,IAAI,CAAC,SAAS,EAAE,EAAE;YAChB,OAAO,QAAQ,EAAE;;QAEnB,IAAI,aAAa,EAAE;YACjB,OAAO,QAAQ,EAAE;;AAErB,KAAC;SACA,IAAI,CAAC,MAAK;QACT,MAAM,CAAC,8BAA8B,CAAC;QACtC,QAAQ,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC;AAClD,KAAC,CAAC;AAEJ,IAAA,OAAO,MAAQ,GAAC;AAClB,CAAC;;;;"}
|
|
@@ -12,7 +12,7 @@ const createDirectories = async (dirPath) => {
|
|
|
12
12
|
if (dirPathExists) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
const parentDir =
|
|
15
|
+
const parentDir = BaseFileManager.getParentDirPath(dirPath);
|
|
16
16
|
let parentDirExists = await BaseFileManager.pathExists(parentDir);
|
|
17
17
|
if (!parentDirExists) {
|
|
18
18
|
await createDirectories(parentDir);
|
|
@@ -37,9 +37,9 @@ class FileDownloadManager {
|
|
|
37
37
|
console.error(`No file data from ${url}`);
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
const localDirPath =
|
|
40
|
+
const localDirPath = BaseFileManager.getParentDirPath(localFilePath);
|
|
41
41
|
await createDirectories(localDirPath);
|
|
42
|
-
const filename =
|
|
42
|
+
const filename = BaseFileManager.getFilenameFromPath(localFilePath);
|
|
43
43
|
const regex = /(\d+)[\w_]+\.(sql|json)$/;
|
|
44
44
|
const match = filename.match(regex);
|
|
45
45
|
let migrationNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../../src/services/internal/helpers.ts"],"sourcesContent":["import path from 'path'\nimport { Endpoints } from '@/types'\nimport debug from 'debug'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\n\nconst logger = debug('seedSdk:services:internal:helpers')\n\n/**\n * Recursively create directories if they don't exist.\n * @param {string} dirPath - The directory path to create.\n */\nexport const createDirectories = async (dirPath: string) => {\n const dirPathExists = await BaseFileManager.pathExists(dirPath)\n if (dirPathExists) {\n return\n }\n\n const parentDir = path.dirname(dirPath)\n let parentDirExists = await BaseFileManager.pathExists(parentDir)\n if (!parentDirExists) {\n await createDirectories(parentDir)\n }\n\n parentDirExists = await BaseFileManager.pathExists(parentDir)\n if (parentDirExists) {\n await BaseFileManager.createDirIfNotExists(dirPath)\n }\n}\n\n// export const downloadFile = async (url: string, localFilePath: string) => {\n// try {\n// const response = await fetch(url)\n// const fileData = await response.text().catch((error) => {\n// console.error(`Failed to parse text from ${url}:`, error)\n// })\n// if (!fileData) {\n// console.error(`No file data from ${url}`)\n// return\n// }\n// const localDirPath = path.dirname(localFilePath)\n\n// if (busy) {\n// return\n// }\n\n// busy = true\n\n// await createDirectories(localDirPath)\n\n// const filename = path.basename(localFilePath)\n\n// const regex = /(\\d+)[\\w_]+\\.(sql|json)$/\n\n// const match = filename.match(regex)\n\n// let migrationNumber\n\n// if (match && match.length > 1) {\n// migrationNumber = match[1]\n// }\n\n// if (migrationNumber) {\n// const filesInDir = await fs.promises.readdir(localDirPath)\n// for (const file of filesInDir) {\n// if (file === filename) {\n// continue\n// }\n// const innerMatch = file.match(regex)\n// let existingFileMigrationNumber\n// if (innerMatch && innerMatch.length > 1) {\n// existingFileMigrationNumber = innerMatch[1]\n// }\n// if (\n// migrationNumber &&\n// existingFileMigrationNumber &&\n// existingFileMigrationNumber === migrationNumber\n// ) {\n// await fs.promises.unlink(path.join(localDirPath, file))\n// }\n// }\n// }\n\n// try {\n\n// await fs.promises.writeFile(localFilePath, fileData)\n// logger(`[downloadFile] Wrote file async to ${localFilePath}`)\n// } catch (error) {\n// fs.writeFileSync(localFilePath, fileData)\n// logger(`[downloadFile] Wrote file sync to ${localFilePath}`)\n// }\n// } catch (error) {\n// logger(`[Error] Failed to download file from ${url}:`, error)\n// }\n\n// busy = false\n// }\n\ntype DownloadFunction = (fileUrl: string) => Promise<void>;\n\nclass FileDownloadManager {\n private filesToDownload: Map<string, number>;\n private maxRetries: number;\n private isDownloading: boolean = false;\n\n constructor(fileUrls: string[], maxRetries: number) {\n this.filesToDownload = new Map(fileUrls.map(url => [url, 0]));\n this.maxRetries = maxRetries;\n }\n\n async downloadFile(url: string, localFilePath: string): Promise<void> {\n const response = await fetch(url)\n const fileData = await response.text().catch((error) => {\n console.error(`Failed to parse text from ${url}:`, error)\n })\n if (!fileData) {\n console.error(`No file data from ${url}`)\n return\n }\n const localDirPath = path.dirname(localFilePath)\n \n await createDirectories(localDirPath)\n \n const filename = path.basename(localFilePath)\n \n const regex = /(\\d+)[\\w_]+\\.(sql|json)$/\n \n const match = filename.match(regex)\n \n let migrationNumber\n \n if (match && match.length > 1) {\n migrationNumber = match[1]\n }\n \n if (migrationNumber) {\n const fs = await BaseFileManager.getFs()\n const filesInDir = await fs.promises.readdir(localDirPath)\n for (const file of filesInDir) {\n if (file === filename) {\n continue\n }\n const innerMatch = file.match(regex)\n let existingFileMigrationNumber\n if (innerMatch && innerMatch.length > 1) {\n existingFileMigrationNumber = innerMatch[1]\n }\n if (\n migrationNumber &&\n existingFileMigrationNumber &&\n existingFileMigrationNumber === migrationNumber\n ) {\n await fs.promises.unlink(path.join(localDirPath, file))\n }\n }\n }\n \n try {\n const fs = await BaseFileManager.getFs()\n await fs.promises.writeFile(localFilePath, fileData)\n logger(`[downloadFile] Wrote file async to ${localFilePath}`)\n } catch (error) {\n const fs = await BaseFileManager.getFs()\n fs.writeFileSync(localFilePath, fileData)\n logger(`[downloadFile] Wrote file sync to ${localFilePath}`)\n }\n \n }\n\n async start(): Promise<void> {\n if (this.isDownloading) {\n console.warn(\"Download process is already running.\");\n return;\n }\n\n this.isDownloading = true;\n\n for (const [fileUrl, attempts] of this.filesToDownload.entries()) {\n let success = false;\n\n while (attempts < this.maxRetries) {\n try {\n console.log(`Starting download: ${fileUrl}`);\n await this.downloadFile(fileUrl, fileUrl);\n console.log(`Download successful: ${fileUrl}`);\n this.filesToDownload.delete(fileUrl);\n success = true;\n break; // Move to next file\n } catch (error) {\n logger(`Error downloading ${fileUrl}:`, error);\n this.filesToDownload.set(fileUrl, attempts + 1);\n }\n }\n\n if (!success) {\n console.error(`Failed to download after ${this.maxRetries} attempts: ${fileUrl}`);\n }\n }\n\n this.isDownloading = false;\n console.log(\"All downloads completed.\");\n }\n\n addFile(fileUrl: string): void {\n if (!this.filesToDownload.has(fileUrl)) {\n this.filesToDownload.set(fileUrl, 0);\n console.log(`Added file to download queue: ${fileUrl}`);\n } else {\n console.warn(`File already in queue: ${fileUrl}`);\n }\n }\n\n getPendingFiles(): string[] {\n return Array.from(this.filesToDownload.keys());\n }\n\n clear(): void {\n this.filesToDownload.clear();\n console.log(\"Cleared all files from the download queue.\");\n }\n}\n\n\nexport const fetchDirectory = async (url: string) => {\n const response = await fetch(url)\n return response.json()\n}\n\n// export const fetchFilesRecursively = async (\n// url: string,\n// localPath: string,\n// fileList: string[],\n// ) => {\n// for (const file of fileList) {\n// try {\n// const fileUrl = `${url}/${file}`\n// const fileLocalPath = path.join(localPath, file)\n\n// // logger(`[fetchFilesRecursively] fileUrl: ${fileUrl}`)\n// // logger(`[fetchFilesRecursively] fileLocalPath: ${fileLocalPath}`)\n\n// await downloadFile(fileUrl, fileLocalPath)\n// } catch (error) {\n// console.error(`Failed to fetch files from ${url}:`, error)\n// }\n// }\n// }\n\nexport const confirmFilesExist = async (filePaths: string[]) => {\n let everythingDownloaded = false\n\n for (const filePath of filePaths) {\n const fs = await BaseFileManager.getFs()\n everythingDownloaded = await fs.promises.exists(filePath)\n }\n\n if (!everythingDownloaded) {\n setTimeout(async () => {\n await confirmFilesExist(filePaths)\n }, 500)\n }\n}\n\nconst filesToExclude = ['.DS_Store']\n\nexport const syncDbFiles = async ({ filePaths, files }: Endpoints) => {\n let fileList = await fetchDirectory(filePaths)\n fileList = fileList.filter((file: string) => !filesToExclude.includes(file))\n fileList = fileList.map((file: string) => `${files}/${file}`)\n const downloadManager = new FileDownloadManager(fileList, 5)\n await downloadManager.start()\n // await fetchFilesRecursively(files, BROWSER_FS_TOP_DIR, fileList)\n await confirmFilesExist(fileList)\n logger('[syncDbFiles] Files synced!')\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/services/internal/helpers.ts"],"sourcesContent":["import path from 'path'\nimport { Endpoints } from '@/types'\nimport debug from 'debug'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\n\nconst logger = debug('seedSdk:services:internal:helpers')\n\n/**\n * Recursively create directories if they don't exist.\n * @param {string} dirPath - The directory path to create.\n */\nexport const createDirectories = async (dirPath: string) => {\n const dirPathExists = await BaseFileManager.pathExists(dirPath)\n if (dirPathExists) {\n return\n }\n\n const parentDir = BaseFileManager.getParentDirPath(dirPath)\n let parentDirExists = await BaseFileManager.pathExists(parentDir)\n if (!parentDirExists) {\n await createDirectories(parentDir)\n }\n\n parentDirExists = await BaseFileManager.pathExists(parentDir)\n if (parentDirExists) {\n await BaseFileManager.createDirIfNotExists(dirPath)\n }\n}\n\n// export const downloadFile = async (url: string, localFilePath: string) => {\n// try {\n// const response = await fetch(url)\n// const fileData = await response.text().catch((error) => {\n// console.error(`Failed to parse text from ${url}:`, error)\n// })\n// if (!fileData) {\n// console.error(`No file data from ${url}`)\n// return\n// }\n// const localDirPath = path.dirname(localFilePath)\n\n// if (busy) {\n// return\n// }\n\n// busy = true\n\n// await createDirectories(localDirPath)\n\n// const filename = path.basename(localFilePath)\n\n// const regex = /(\\d+)[\\w_]+\\.(sql|json)$/\n\n// const match = filename.match(regex)\n\n// let migrationNumber\n\n// if (match && match.length > 1) {\n// migrationNumber = match[1]\n// }\n\n// if (migrationNumber) {\n// const filesInDir = await fs.promises.readdir(localDirPath)\n// for (const file of filesInDir) {\n// if (file === filename) {\n// continue\n// }\n// const innerMatch = file.match(regex)\n// let existingFileMigrationNumber\n// if (innerMatch && innerMatch.length > 1) {\n// existingFileMigrationNumber = innerMatch[1]\n// }\n// if (\n// migrationNumber &&\n// existingFileMigrationNumber &&\n// existingFileMigrationNumber === migrationNumber\n// ) {\n// await fs.promises.unlink(path.join(localDirPath, file))\n// }\n// }\n// }\n\n// try {\n\n// await fs.promises.writeFile(localFilePath, fileData)\n// logger(`[downloadFile] Wrote file async to ${localFilePath}`)\n// } catch (error) {\n// fs.writeFileSync(localFilePath, fileData)\n// logger(`[downloadFile] Wrote file sync to ${localFilePath}`)\n// }\n// } catch (error) {\n// logger(`[Error] Failed to download file from ${url}:`, error)\n// }\n\n// busy = false\n// }\n\ntype DownloadFunction = (fileUrl: string) => Promise<void>;\n\nclass FileDownloadManager {\n private filesToDownload: Map<string, number>;\n private maxRetries: number;\n private isDownloading: boolean = false;\n\n constructor(fileUrls: string[], maxRetries: number) {\n this.filesToDownload = new Map(fileUrls.map(url => [url, 0]));\n this.maxRetries = maxRetries;\n }\n\n async downloadFile(url: string, localFilePath: string): Promise<void> {\n const response = await fetch(url)\n const fileData = await response.text().catch((error) => {\n console.error(`Failed to parse text from ${url}:`, error)\n })\n if (!fileData) {\n console.error(`No file data from ${url}`)\n return\n }\n const localDirPath = BaseFileManager.getParentDirPath(localFilePath)\n \n await createDirectories(localDirPath)\n \n const filename = BaseFileManager.getFilenameFromPath(localFilePath)\n \n const regex = /(\\d+)[\\w_]+\\.(sql|json)$/\n \n const match = filename.match(regex)\n \n let migrationNumber\n \n if (match && match.length > 1) {\n migrationNumber = match[1]\n }\n \n if (migrationNumber) {\n const fs = await BaseFileManager.getFs()\n const filesInDir = await fs.promises.readdir(localDirPath)\n for (const file of filesInDir) {\n if (file === filename) {\n continue\n }\n const innerMatch = file.match(regex)\n let existingFileMigrationNumber\n if (innerMatch && innerMatch.length > 1) {\n existingFileMigrationNumber = innerMatch[1]\n }\n if (\n migrationNumber &&\n existingFileMigrationNumber &&\n existingFileMigrationNumber === migrationNumber\n ) {\n await fs.promises.unlink(path.join(localDirPath, file))\n }\n }\n }\n \n try {\n const fs = await BaseFileManager.getFs()\n await fs.promises.writeFile(localFilePath, fileData)\n logger(`[downloadFile] Wrote file async to ${localFilePath}`)\n } catch (error) {\n const fs = await BaseFileManager.getFs()\n fs.writeFileSync(localFilePath, fileData)\n logger(`[downloadFile] Wrote file sync to ${localFilePath}`)\n }\n \n }\n\n async start(): Promise<void> {\n if (this.isDownloading) {\n console.warn(\"Download process is already running.\");\n return;\n }\n\n this.isDownloading = true;\n\n for (const [fileUrl, attempts] of this.filesToDownload.entries()) {\n let success = false;\n\n while (attempts < this.maxRetries) {\n try {\n console.log(`Starting download: ${fileUrl}`);\n await this.downloadFile(fileUrl, fileUrl);\n console.log(`Download successful: ${fileUrl}`);\n this.filesToDownload.delete(fileUrl);\n success = true;\n break; // Move to next file\n } catch (error) {\n logger(`Error downloading ${fileUrl}:`, error);\n this.filesToDownload.set(fileUrl, attempts + 1);\n }\n }\n\n if (!success) {\n console.error(`Failed to download after ${this.maxRetries} attempts: ${fileUrl}`);\n }\n }\n\n this.isDownloading = false;\n console.log(\"All downloads completed.\");\n }\n\n addFile(fileUrl: string): void {\n if (!this.filesToDownload.has(fileUrl)) {\n this.filesToDownload.set(fileUrl, 0);\n console.log(`Added file to download queue: ${fileUrl}`);\n } else {\n console.warn(`File already in queue: ${fileUrl}`);\n }\n }\n\n getPendingFiles(): string[] {\n return Array.from(this.filesToDownload.keys());\n }\n\n clear(): void {\n this.filesToDownload.clear();\n console.log(\"Cleared all files from the download queue.\");\n }\n}\n\n\nexport const fetchDirectory = async (url: string) => {\n const response = await fetch(url)\n return response.json()\n}\n\n// export const fetchFilesRecursively = async (\n// url: string,\n// localPath: string,\n// fileList: string[],\n// ) => {\n// for (const file of fileList) {\n// try {\n// const fileUrl = `${url}/${file}`\n// const fileLocalPath = path.join(localPath, file)\n\n// // logger(`[fetchFilesRecursively] fileUrl: ${fileUrl}`)\n// // logger(`[fetchFilesRecursively] fileLocalPath: ${fileLocalPath}`)\n\n// await downloadFile(fileUrl, fileLocalPath)\n// } catch (error) {\n// console.error(`Failed to fetch files from ${url}:`, error)\n// }\n// }\n// }\n\nexport const confirmFilesExist = async (filePaths: string[]) => {\n let everythingDownloaded = false\n\n for (const filePath of filePaths) {\n const fs = await BaseFileManager.getFs()\n everythingDownloaded = await fs.promises.exists(filePath)\n }\n\n if (!everythingDownloaded) {\n setTimeout(async () => {\n await confirmFilesExist(filePaths)\n }, 500)\n }\n}\n\nconst filesToExclude = ['.DS_Store']\n\nexport const syncDbFiles = async ({ filePaths, files }: Endpoints) => {\n let fileList = await fetchDirectory(filePaths)\n fileList = fileList.filter((file: string) => !filesToExclude.includes(file))\n fileList = fileList.map((file: string) => `${files}/${file}`)\n const downloadManager = new FileDownloadManager(fileList, 5)\n await downloadManager.start()\n // await fetchFilesRecursively(files, BROWSER_FS_TOP_DIR, fileList)\n await confirmFilesExist(fileList)\n logger('[syncDbFiles] Files synced!')\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ const upload = fromCallback(({ sendBack, input: { context } }) => {
|
|
|
24
24
|
continue;
|
|
25
25
|
}
|
|
26
26
|
if (editedProperty.propertyDef.refValueType &&
|
|
27
|
-
editedProperty.propertyDef.refValueType === '
|
|
27
|
+
editedProperty.propertyDef.refValueType === 'Image') {
|
|
28
28
|
const context = editedProperty.getService().getSnapshot().context;
|
|
29
29
|
const imageSeedId = context.propertyValue;
|
|
30
30
|
const { localId, uid } = getCorrectId(imageSeedId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sources":["../../../../../../src/services/publish/actors/upload.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { FromCallbackInput, PublishMachineContext } from '@/types'\nimport { BaseItem } from '@/Item/BaseItem'\nimport debug from 'debug'\nimport { getCorrectId } from '@/helpers'\n\nconst logger = debug('seedSdk:services:publish:actors:upload')\n\ntype UploadItem = {\n sourceFilePath: string\n fileSize: number\n filename: string\n seedLocalId?: string\n metadataLocalId?: string\n}\n\nexport const upload = fromCallback<\n EventObject,\n FromCallbackInput<PublishMachineContext>\n>(({ sendBack, input: { context } }) => {\n const { localId } = context\n\n const _upload = async () => {\n const item = await BaseItem.find({ seedLocalId: localId })\n\n if (!item) {\n logger('no item with localId', localId)\n return false\n }\n\n const editedProperties = await item.getEditedProperties()\n\n for (const propertyData of editedProperties) {\n if (propertyData.refSeedType === 'image') {\n // Check sha256 of local file against sha256 of remote files\n // If different, add this file to uploadItems\n }\n }\n\n const uploadItems = []\n\n for (const editedPropertyData of editedProperties) {\n const propertyName = editedPropertyData.propertyName\n const editedProperty = item.properties[propertyName]\n\n if (!editedProperty || !editedProperty.propertyDef) {\n continue\n }\n\n if (\n editedProperty.propertyDef.refValueType &&\n editedProperty.propertyDef.refValueType === '
|
|
1
|
+
{"version":3,"file":"upload.js","sources":["../../../../../../src/services/publish/actors/upload.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { FromCallbackInput, PublishMachineContext } from '@/types'\nimport { BaseItem } from '@/Item/BaseItem'\nimport debug from 'debug'\nimport { getCorrectId } from '@/helpers'\n\nconst logger = debug('seedSdk:services:publish:actors:upload')\n\ntype UploadItem = {\n sourceFilePath: string\n fileSize: number\n filename: string\n seedLocalId?: string\n metadataLocalId?: string\n}\n\nexport const upload = fromCallback<\n EventObject,\n FromCallbackInput<PublishMachineContext>\n>(({ sendBack, input: { context } }) => {\n const { localId } = context\n\n const _upload = async () => {\n const item = await BaseItem.find({ seedLocalId: localId })\n\n if (!item) {\n logger('no item with localId', localId)\n return false\n }\n\n const editedProperties = await item.getEditedProperties()\n\n for (const propertyData of editedProperties) {\n if (propertyData.refSeedType === 'image') {\n // Check sha256 of local file against sha256 of remote files\n // If different, add this file to uploadItems\n }\n }\n\n const uploadItems = []\n\n for (const editedPropertyData of editedProperties) {\n const propertyName = editedPropertyData.propertyName\n const editedProperty = item.properties[propertyName]\n\n if (!editedProperty || !editedProperty.propertyDef) {\n continue\n }\n\n if (\n editedProperty.propertyDef.refValueType &&\n editedProperty.propertyDef.refValueType === 'Image'\n ) {\n const context = editedProperty.getService().getSnapshot().context\n const imageSeedId = context.propertyValue\n const { localId, uid } = getCorrectId(imageSeedId)\n }\n\n if (\n editedProperty.propertyDef.storageType === 'ItemStorage' &&\n editedProperty.propertyDef.localStorageDir\n ) {\n }\n }\n\n if (uploadItems.length === 0) {\n return true\n }\n\n // const turbo = TurboFactory.unauthenticated()\n\n // turbo.uploadSignedDataItem()\n //\n // const { id, owner, dataCaches, fastFinalityIndexes } = await turbo.uploadFile(() => {\n // fileStreamFactory => () => fs.createReadStream(filePath),\n // fileSizeFactory => () => fileSize,\n // });\n return false\n }\n\n _upload().then((isValid) => {\n if (isValid) {\n sendBack({ type: 'uploadSuccess' })\n }\n })\n})\n"],"names":[],"mappings":";;;;;AAMA,MAAM,MAAM,GAAG,KAAK,CAAC,wCAAwC,CAAC;AAUjD,MAAA,MAAM,GAAG,YAAY,CAGhC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAI;AACrC,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO;AAE3B,IAAA,MAAM,OAAO,GAAG,YAAW;AACzB,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAE1D,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC;AACvC,YAAA,OAAO,KAAK;;AAGd,QAAA,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAEzD,QAAA,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE;AAC3C,YAAA,IAAI,YAAY,CAAC,WAAW,KAAK,OAAO,EAAE;;QAM5C,MAAM,WAAW,GAAG,EAAE;AAEtB,QAAA,KAAK,MAAM,kBAAkB,IAAI,gBAAgB,EAAE;AACjD,YAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY;YACpD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAEpD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;gBAClD;;AAGF,YAAA,IACE,cAAc,CAAC,WAAW,CAAC,YAAY;AACvC,gBAAA,cAAc,CAAC,WAAW,CAAC,YAAY,KAAK,OAAO,EACnD;gBACA,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO;AACjE,gBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa;gBACzC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC;;AAGpD,YAAA,IACE,cAAc,CAAC,WAAW,CAAC,WAAW,KAAK,aAAa;AACxD,gBAAA,cAAc,CAAC,WAAW,CAAC,eAAe,EAC1C;;AAIJ,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,YAAA,OAAO,IAAI;;;;;;;;;AAWb,QAAA,OAAO,KAAK;AACd,KAAC;AAED,IAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;QACzB,IAAI,OAAO,EAAE;AACX,YAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;;AAEvC,KAAC,CAAC;AACJ,CAAC;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PropertyStates, PropertyValue } from './property';
|
|
2
2
|
import { Actor, AnyActorLogic } from 'xstate';
|
|
3
3
|
import { Static } from '@sinclair/typebox';
|
|
4
|
-
import { IModelClass, TModelSchema } from '@/schema';
|
|
4
|
+
import { IModelClass, TModelSchema, TProperty } from '@/schema';
|
|
5
5
|
import { BaseItem } from '@/Item/BaseItem';
|
|
6
6
|
export type ModelDefinitions = {
|
|
7
7
|
[modelName: string]: ModelClassType;
|
|
@@ -24,18 +24,5 @@ export type ModelSchema = Partial<Static<typeof TModelSchema>>;
|
|
|
24
24
|
export type ModelConstructor = <T extends {
|
|
25
25
|
new (...args: any[]): IModelClass;
|
|
26
26
|
}>(constructor: T) => T & IModelClass;
|
|
27
|
-
export
|
|
28
|
-
propertyLocalId?: string;
|
|
29
|
-
name: string;
|
|
30
|
-
dataType: 'string' | 'bytes32' | 'uint8' | 'uint256' | 'bool' | 'address' | 'bytes' | 'int8' | 'int256' | 'int' | 'bytes32[]';
|
|
31
|
-
modelSchemaUids: string[];
|
|
32
|
-
modelLocalId?: string;
|
|
33
|
-
schemaName?: string;
|
|
34
|
-
schemaUid: string;
|
|
35
|
-
schemaDefinition: string;
|
|
36
|
-
relatedModelSchemaUid?: string;
|
|
37
|
-
relatedModelLocalId?: string;
|
|
38
|
-
createdAt?: number;
|
|
39
|
-
updatedAt?: number;
|
|
40
|
-
}
|
|
27
|
+
export type ModelProperty = typeof TProperty;
|
|
41
28
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/types/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/types/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAoC,mBAAmB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAkC,iBAAiB,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,cAAc,CAAA;AAEpE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAM9C,MAAM,MAAM,cAAc,GAAG;IAC3B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;CAC7D,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG;IACvE,MAAM,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;AAMlF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC,CAAA;AAE9D,MAAM,MAAM,gBAAgB,GAAG,CAC7B,CAAC,SAAS;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAA;CAAE,EAE9C,WAAW,EAAE,CAAC,KACX,CAAC,GAAG,WAAW,CAAA;AAIpB,MAAM,MAAM,aAAa,GAAG,OAAO,SAAS,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seedprotocol/sdk",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
4
4
|
"description": "The SDK for Seed Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"optionalDependencies": {
|
|
34
34
|
"@tanstack/react-query": "^5.62.11",
|
|
35
|
-
"@zenfs/core": "^
|
|
36
|
-
"@zenfs/dom": "^1.1.
|
|
35
|
+
"@zenfs/core": "^2.0.0",
|
|
36
|
+
"@zenfs/dom": "^1.1.6",
|
|
37
37
|
"better-sqlite3": "^11.7.0",
|
|
38
38
|
"fsevents": "^2.3.3",
|
|
39
39
|
"react": "^19.0.0",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@misskey-dev/browser-image-resizer": "^2024.1.0",
|
|
47
47
|
"@pianity/arsnap-adapter": "^0.2.0",
|
|
48
48
|
"@sinclair/typebox": "^0.34.13",
|
|
49
|
-
"@sqlite.org/sqlite-wasm": "^3.49.1-
|
|
49
|
+
"@sqlite.org/sqlite-wasm": "^3.49.1-build2",
|
|
50
50
|
"@statelyai/inspect": "^0.4.0",
|
|
51
51
|
"@tanstack/query-sync-storage-persister": "^5.62.8",
|
|
52
52
|
"@tanstack/react-query-devtools": "^5.62.8",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"graphql-request": "^7.1.2",
|
|
68
68
|
"immer": "^10.1.1",
|
|
69
69
|
"lodash-es": "^4.17.21",
|
|
70
|
-
"nanoid": "^5.
|
|
70
|
+
"nanoid": "^5.1.5",
|
|
71
71
|
"nanoid-dictionary": "^4.3.0",
|
|
72
72
|
"nunjucks": "^3.2.4",
|
|
73
73
|
"path-browserify": "^1.0.1",
|
|
@@ -162,11 +162,11 @@
|
|
|
162
162
|
"exports": {
|
|
163
163
|
".": {
|
|
164
164
|
"import": {
|
|
165
|
-
"types": "./dist/
|
|
165
|
+
"types": "./dist/src/index.d.ts",
|
|
166
166
|
"default": "./dist/main.js"
|
|
167
167
|
},
|
|
168
168
|
"require": {
|
|
169
|
-
"types": "./dist/
|
|
169
|
+
"types": "./dist/src/index.d.ts",
|
|
170
170
|
"default": "./dist/main.js"
|
|
171
171
|
}
|
|
172
172
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { EventObject } from 'xstate';
|
|
2
|
-
import { FromCallbackInput } from '@/types/machines';
|
|
3
|
-
import { SaveValueToDbEvent } from '@/types/property';
|
|
4
|
-
export declare const saveImageSrc: import("xstate").CallbackActorLogic<EventObject, FromCallbackInput<any, SaveValueToDbEvent>, EventObject>;
|
|
5
|
-
//# sourceMappingURL=saveImageSrc.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"saveImageSrc.d.ts","sourceRoot":"","sources":["../../../../../../src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAGL,kBAAkB,EACnB,MAAM,kBAAkB,CAAA;AA+CzB,eAAO,MAAM,YAAY,2GA2LvB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"saveImageSrc.js","sources":["../../../../../../../src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { FromCallbackInput } from '@/types/machines'\nimport {\n ItemPropertyValueType,\n PropertyMachineContext,\n SaveValueToDbEvent,\n} from '@/types/property'\nimport { createSeed } from '@/db/write/createSeed'\nimport { getDataTypeFromString, getMimeType } from '@/helpers'\nimport { createVersion } from '@/db/write/createVersion'\nimport { createMetadata } from '@/db/write/createMetadata'\nimport { updateItemPropertyValue } from '@/db/write/updateItemPropertyValue'\nimport { getSchemaUidForModel } from '@/db/read/getSchemaUidForModel'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { eventEmitter } from '@/eventBus'\nimport { ImageSize } from '@/helpers/constants'\n\n\nconst readFileAsArrayBuffer = async (file: File): Promise<ArrayBuffer> => {\n return new Promise((resolve) => {\n const reader = new FileReader()\n reader.onload = async (e) => {\n const arrayBuffer = e.target.result as ArrayBuffer\n\n resolve(arrayBuffer)\n }\n\n reader.readAsArrayBuffer(file)\n })\n}\n\nconst fetchImage = async (url: string) => {\n const response = await fetch(url)\n const mimeType = response.headers.get('Content-Type')\n const imageBuffer = await response.arrayBuffer()\n const bytes = new Uint8Array(imageBuffer)\n\n const binaryString = bytes.reduce(\n (acc, byte) => acc + String.fromCharCode(byte),\n '',\n )\n\n let base64 = btoa(binaryString)\n\n if (mimeType) {\n base64 = `data:${mimeType};base64,${base64}`\n }\n\n return base64\n}\n\nlet imageSchemaUid: string | undefined\n\nexport const saveImageSrc = fromCallback<\n EventObject,\n FromCallbackInput<PropertyMachineContext, SaveValueToDbEvent>\n>(({ sendBack, input: { context, event } }) => {\n const {\n localId,\n propertyName: propertyNameRaw,\n propertyValue: existingValue,\n propertyRecordSchema,\n modelName,\n seedLocalId,\n seedUid,\n versionLocalId,\n versionUid,\n } = context\n\n let { schemaUid } = context\n\n let newValue: ItemPropertyValueType\n\n if (event) {\n newValue = event.newValue\n }\n\n if (existingValue === newValue) {\n sendBack({ type: 'saveValueToDbSuccess' })\n return\n }\n\n const _saveImageSrc = async (): Promise<void> => {\n let propertyName = propertyNameRaw\n\n if (!propertyNameRaw.endsWith('Id')) {\n propertyName = `${propertyName}Id`\n }\n\n let newValueType\n let fileData: string | ArrayBuffer | undefined\n let mimeType\n let fileName\n\n if (!imageSchemaUid) {\n imageSchemaUid = await getSchemaUidForModel('Image')\n }\n\n if (typeof newValue === 'string') {\n newValueType = getDataTypeFromString(newValue)\n }\n\n if (newValueType === 'imageBase64') {\n mimeType = getMimeType(newValue as string)\n const base64Data = (newValue as string).split(',')[1] // Strip the Base64 prefix\n const binaryString = atob(base64Data)\n\n const binaryLength = binaryString.length\n const binaryArray = new Uint8Array(binaryLength)\n for (let i = 0; i < binaryLength; i++) {\n binaryArray[i] = binaryString.charCodeAt(i)\n }\n fileData = binaryArray.buffer\n }\n\n if (newValueType === 'url') {\n fileData = await fetchImage(newValue as string)\n }\n\n if (newValue instanceof File) {\n fileName = newValue.name\n mimeType = newValue.type\n fileData = await readFileAsArrayBuffer(newValue)\n }\n\n if (!fileData) {\n throw new Error('No file data found')\n }\n\n const newImageSeedLocalId = await createSeed({\n type: 'image',\n })\n\n if (!fileName) {\n fileName = newImageSeedLocalId\n if (mimeType) {\n fileName += `.${mimeType.split('/')[1]}`\n }\n }\n\n const filePath = `/files/images/${fileName}`\n\n const imageVersionLocalId = await createVersion({\n seedLocalId: newImageSeedLocalId,\n seedType: 'image',\n })\n\n if (fileData instanceof ArrayBuffer) {\n try {\n await BaseFileManager.saveFile(filePath, new Uint8Array(fileData))\n } catch (e) {\n const fs = await BaseFileManager.getFs()\n fs.writeFileSync(filePath, new Uint8Array(fileData))\n eventEmitter.emit('file-saved', filePath)\n }\n }\n\n if (typeof fileData === 'string') {\n try {\n await BaseFileManager.saveFile(filePath, fileData)\n } catch (e) {\n const fs = await BaseFileManager.getFs()\n fs.writeFileSync(filePath, fileData)\n eventEmitter.emit('file-saved', filePath)\n }\n }\n\n\n await BaseFileManager.resizeImage({filePath, width: ImageSize.EXTRA_SMALL, height: ImageSize.EXTRA_SMALL})\n await BaseFileManager.resizeImage({filePath, width: ImageSize.SMALL, height: ImageSize.SMALL})\n await BaseFileManager.resizeImage({filePath, width: ImageSize.MEDIUM, height: ImageSize.MEDIUM})\n await BaseFileManager.resizeImage({filePath, width: ImageSize.LARGE, height: ImageSize.LARGE})\n await BaseFileManager.resizeImage({filePath, width: ImageSize.EXTRA_LARGE, height: ImageSize.EXTRA_LARGE})\n\n const refResolvedDisplayValue = await BaseFileManager.getContentUrlFromPath(filePath)\n\n let newLocalId\n\n if (!localId) {\n const result = await createMetadata(\n {\n propertyName,\n propertyValue: newImageSeedLocalId,\n seedLocalId,\n seedUid,\n versionLocalId,\n versionUid,\n modelName,\n schemaUid,\n refSeedType: 'image',\n refModelUid: imageSchemaUid,\n refSchemaUid: imageSchemaUid,\n refResolvedDisplayValue,\n refResolvedValue: fileName,\n localStorageDir: '/images',\n easDataType: 'bytes32',\n },\n propertyRecordSchema,\n )\n\n newLocalId = result[0].localId\n }\n\n if (localId) {\n await updateItemPropertyValue({\n localId: localId,\n propertyName: propertyNameRaw,\n newValue: newImageSeedLocalId,\n seedLocalId,\n versionLocalId,\n modelName,\n schemaUid,\n refSeedType: 'image',\n refResolvedDisplayValue,\n refResolvedValue: fileName,\n refModelUid: imageSchemaUid,\n refSchemaUid: imageSchemaUid,\n localStorageDir: '/images',\n easDataType: 'bytes32',\n })\n }\n\n sendBack({\n type: 'updateContext',\n localId: newLocalId || localId,\n propertyValue: newImageSeedLocalId,\n refSeedType: 'image',\n refSchemaUid: imageSchemaUid,\n renderValue: refResolvedDisplayValue,\n refResolvedDisplayValue,\n refResolvedValue: fileName,\n localStorageDir: '/images',\n easDataType: 'bytes32',\n schemaUid,\n })\n }\n\n _saveImageSrc().then(() => {\n sendBack({ type: 'saveImageSrcSuccess' })\n })\n})\n"],"names":[],"mappings":"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"}
|