@seedprotocol/sdk 0.3.15 → 0.3.17

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.
Files changed (46) hide show
  1. package/README.md +7 -3
  2. package/dist/bin.js +19 -12
  3. package/dist/bin.js.map +1 -1
  4. package/dist/scripts/bin.d.ts.map +1 -1
  5. package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
  6. package/dist/src/ItemProperty/service/actors/hydrateFromDb.js +1 -1
  7. package/dist/src/ItemProperty/service/actors/hydrateFromDb.js.map +1 -1
  8. package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts.map +1 -1
  9. package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.js +1 -1
  10. package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.js.map +1 -1
  11. package/dist/src/browser/helpers/FileManager.d.ts +1 -0
  12. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  13. package/dist/src/browser/helpers/FileManager.js +3 -0
  14. package/dist/src/browser/helpers/FileManager.js.map +1 -1
  15. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +1 -0
  16. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  17. package/dist/src/helpers/FileManager/BaseFileManager.js +3 -0
  18. package/dist/src/helpers/FileManager/BaseFileManager.js.map +1 -1
  19. package/dist/src/helpers/constants.d.ts +3 -1
  20. package/dist/src/helpers/constants.d.ts.map +1 -1
  21. package/dist/src/helpers/constants.js +5 -2
  22. package/dist/src/helpers/constants.js.map +1 -1
  23. package/dist/src/helpers/index.d.ts +6 -0
  24. package/dist/src/helpers/index.d.ts.map +1 -1
  25. package/dist/src/helpers/index.js +24 -1
  26. package/dist/src/helpers/index.js.map +1 -1
  27. package/dist/src/node/PathResolver.d.ts +6 -0
  28. package/dist/src/node/PathResolver.d.ts.map +1 -1
  29. package/dist/src/node/PathResolver.js +11 -2
  30. package/dist/src/node/PathResolver.js.map +1 -1
  31. package/dist/src/node/codegen/drizzle.d.ts.map +1 -1
  32. package/dist/src/node/codegen/drizzle.js +2 -1
  33. package/dist/src/node/codegen/drizzle.js.map +1 -1
  34. package/dist/src/node/helpers/FileManager.d.ts +1 -0
  35. package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
  36. package/dist/src/node/helpers/FileManager.js +3 -0
  37. package/dist/src/node/helpers/FileManager.js.map +1 -1
  38. package/dist/src/seedSchema/ConfigSchema.js +3 -1
  39. package/dist/src/seedSchema/ConfigSchema.js.map +1 -1
  40. package/dist/src/services/internal/actors/saveConfig.d.ts.map +1 -1
  41. package/dist/src/services/internal/actors/saveConfig.js +15 -29
  42. package/dist/src/services/internal/actors/saveConfig.js.map +1 -1
  43. package/dist/src/services/internal/helpers.d.ts.map +1 -1
  44. package/dist/src/services/internal/helpers.js +2 -2
  45. package/dist/src/services/internal/helpers.js.map +1 -1
  46. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/helpers/constants.ts"],"sourcesContent":["import {\n AttestationRequestData,\n ZERO_BYTES,\n ZERO_BYTES32,\n ZERO_ADDRESS,\n} from '@ethereum-attestation-service/eas-sdk'\n\n\nexport const SCHEMA_NJK = 'schema.njk'\nexport const SCHEMA_TS = 'schema.ts'\n\nexport const INTERNAL_DATA_TYPES = {\n Text: {\n eas: 'string',\n },\n Number: {\n eas: 'uint8',\n },\n Image: {\n eas: 'string',\n },\n Relation: {\n eas: 'bytes32',\n },\n List: {\n eas: 'bytes32[]',\n },\n File: {\n eas: 'string',\n },\n Json: {\n eas: 'string',\n },\n Blob: {\n eas: 'bytes32',\n },\n}\n\nexport const INTERNAL_PROPERTY_NAMES = [\n 'localId',\n 'uid',\n 'seedLocalId',\n 'seedUid',\n 'schemaUid',\n 'attestationCreatedAt',\n 'attestationRaw',\n 'createdAt',\n 'updatedAt',\n 'lastVersionPublishedAt',\n 'latestVersionLocalId',\n 'latestVersionUid',\n 'lastLocalUpdateAt',\n 'modelName',\n 'storageTransactionId',\n 'refSeedType',\n 'refValueType',\n 'refResolvedValue',\n 'refResolvedDisplayValue',\n 'type',\n // Image\n 'src',\n 'alt',\n //\n 'versionLocalId',\n 'versionsCount',\n 'versionUid',\n '_markedForDeletion',\n]\n\nexport const VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA =\n '0x13c0fd59d69dbce40501a41f8b37768d26dd2e2bb0cad64615334d84f7b9bdf6'\n\nexport const defaultAttestationData: AttestationRequestData = {\n recipient: ZERO_ADDRESS,\n revocable: true,\n value: BigInt(0),\n refUID: ZERO_BYTES32,\n expirationTime: BigInt(0),\n data: ZERO_BYTES,\n}\n\nexport enum ImageSize {\n EXTRA_SMALL = 480,\n SMALL = 760,\n MEDIUM = 1024,\n LARGE = 1440,\n EXTRA_LARGE = 1920,\n}\n\nexport const CLIENT_NOT_INITIALIZED = 'ClientManager is not initialized. Please call init() first.'\n\nexport const INIT_SCRIPT_SUCCESS_MESSAGE = '[Seed Protocol] Finished running init script'\n"],"names":[],"mappings":";;AAQO,MAAM,UAAU,GAAG;AACnB,MAAM,SAAS,GAAG;AAEZ,MAAA,mBAAmB,GAAG;AACjC,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,OAAO;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,WAAW;AACjB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAGU,MAAA,uBAAuB,GAAG;IACrC,SAAS;IACT,KAAK;IACL,aAAa;IACb,SAAS;IACT,WAAW;IACX,sBAAsB;IACtB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,wBAAwB;IACxB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;IACX,sBAAsB;IACtB,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,MAAM;;IAEN,KAAK;IACL,KAAK;;IAEL,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,oBAAoB;;AAGf,MAAM,mCAAmC,GAC9C;AAEW,MAAA,sBAAsB,GAA2B;AAC5D,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,EAAE,UAAU;;IAGN;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,GAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,GAAA,CAAA,GAAA,OAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAa;AACb,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,IAAA,CAAA,GAAA,OAAY;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,IAAA,CAAA,GAAA,aAAkB;AACpB,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA;AAEM,MAAM,sBAAsB,GAAG;AAE/B,MAAM,2BAA2B,GAAG;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/helpers/constants.ts"],"sourcesContent":["import {\n AttestationRequestData,\n ZERO_BYTES,\n ZERO_BYTES32,\n ZERO_ADDRESS,\n} from '@ethereum-attestation-service/eas-sdk'\n\n\nexport const SCHEMA_NJK = 'schema.njk'\n// Primary config file name for Seed Protocol SDK\nexport const SEED_CONFIG_FILE = 'seed.config.ts'\n// Fallback config file names (in order of preference)\nexport const SEED_CONFIG_FALLBACKS = ['seed.schema.ts', 'schema.ts']\n// Legacy constant for backward compatibility\nexport const SCHEMA_TS = SEED_CONFIG_FILE\n\nexport const INTERNAL_DATA_TYPES = {\n Text: {\n eas: 'string',\n },\n Number: {\n eas: 'uint8',\n },\n Image: {\n eas: 'string',\n },\n Relation: {\n eas: 'bytes32',\n },\n List: {\n eas: 'bytes32[]',\n },\n File: {\n eas: 'string',\n },\n Json: {\n eas: 'string',\n },\n Blob: {\n eas: 'bytes32',\n },\n}\n\nexport const INTERNAL_PROPERTY_NAMES = [\n 'localId',\n 'uid',\n 'seedLocalId',\n 'seedUid',\n 'schemaUid',\n 'attestationCreatedAt',\n 'attestationRaw',\n 'createdAt',\n 'updatedAt',\n 'lastVersionPublishedAt',\n 'latestVersionLocalId',\n 'latestVersionUid',\n 'lastLocalUpdateAt',\n 'modelName',\n 'storageTransactionId',\n 'refSeedType',\n 'refValueType',\n 'refResolvedValue',\n 'refResolvedDisplayValue',\n 'type',\n // Image\n 'src',\n 'alt',\n //\n 'versionLocalId',\n 'versionsCount',\n 'versionUid',\n '_markedForDeletion',\n]\n\nexport const VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA =\n '0x13c0fd59d69dbce40501a41f8b37768d26dd2e2bb0cad64615334d84f7b9bdf6'\n\nexport const defaultAttestationData: AttestationRequestData = {\n recipient: ZERO_ADDRESS,\n revocable: true,\n value: BigInt(0),\n refUID: ZERO_BYTES32,\n expirationTime: BigInt(0),\n data: ZERO_BYTES,\n}\n\nexport enum ImageSize {\n EXTRA_SMALL = 480,\n SMALL = 760,\n MEDIUM = 1024,\n LARGE = 1440,\n EXTRA_LARGE = 1920,\n}\n\nexport const CLIENT_NOT_INITIALIZED = 'ClientManager is not initialized. Please call init() first.'\n\nexport const INIT_SCRIPT_SUCCESS_MESSAGE = '[Seed Protocol] Finished running init script'\n"],"names":[],"mappings":";;AAQO,MAAM,UAAU,GAAG;AAC1B;AACO,MAAM,gBAAgB,GAAG;AAChC;MACa,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,WAAW;AAItD,MAAA,mBAAmB,GAAG;AACjC,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,OAAO;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,WAAW;AACjB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAGU,MAAA,uBAAuB,GAAG;IACrC,SAAS;IACT,KAAK;IACL,aAAa;IACb,SAAS;IACT,WAAW;IACX,sBAAsB;IACtB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,wBAAwB;IACxB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;IACX,sBAAsB;IACtB,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,MAAM;;IAEN,KAAK;IACL,KAAK;;IAEL,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,oBAAoB;;AAGf,MAAM,mCAAmC,GAC9C;AAEW,MAAA,sBAAsB,GAA2B;AAC5D,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,EAAE,UAAU;;IAGN;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,GAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,GAAA,CAAA,GAAA,OAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAa;AACb,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,IAAA,CAAA,GAAA,OAAY;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,IAAA,CAAA,GAAA,aAAkB;AACpB,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA;AAEM,MAAM,sBAAsB,GAAG;AAE/B,MAAM,2BAA2B,GAAG;;;;"}
@@ -3,6 +3,12 @@ export * from './ArweaveClient/BaseArweaveClient';
3
3
  export * from './EasClient/BaseEasClient';
4
4
  export * from './QueryClient/BaseQueryClient';
5
5
  export * from './FileManager/BaseFileManager';
6
+ /**
7
+ * Finds the Seed Protocol config file in the given directory
8
+ * @param searchDir - Directory to search for the config file (defaults to process.cwd())
9
+ * @returns The path to the found config file, or null if not found
10
+ */
11
+ export declare const findSeedConfigFile: (searchDir?: string) => string | null;
6
12
  export declare const generateId: () => string;
7
13
  export declare const toSnakeCase: (str: string) => string;
8
14
  export declare const identifyString: (str: string) => "json" | "text" | "base64" | "html" | "markdown" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAK7C,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,MAAM,WAEtC,CAAA;AAED,eAAO,MAAM,cAAc,QAAS,MAAM,iEA2BzC,CAAA;AAED,eAAO,MAAM,WAAW,WAAY,MAAM,kBAWzC,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,YAe1B,CAAA;AAED,eAAO,MAAM,qBAAqB,SAC1B,MAAM,KACX,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,IAwBrC,CAAA;AAED,eAAO,MAAM,kBAAkB,SACvB,MAAM,KACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAc5B,CAAA;AAED,eAAO,MAAM,gBAAgB,2CAI5B,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,MAAM,WACF,CAAA;AAElD,eAAO,MAAM,4BAA4B,oBAAqB,MAAM;;;;CAiBnE,CAAA;AAGD,eAAO,MAAM,QAAQ,gBAAiB,WAAW,KAAG,OAwBnD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAM9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAK7C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,eAAe,MAAM,KAAmB,MAAM,GAAG,IAgB/E,CAAA;AAED,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,MAAM,WAEtC,CAAA;AAED,eAAO,MAAM,cAAc,QAAS,MAAM,iEA2BzC,CAAA;AAED,eAAO,MAAM,WAAW,WAAY,MAAM,kBAWzC,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,YAe1B,CAAA;AAED,eAAO,MAAM,qBAAqB,SAC1B,MAAM,KACX,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,IAwBrC,CAAA;AAED,eAAO,MAAM,kBAAkB,SACvB,MAAM,KACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAc5B,CAAA;AAED,eAAO,MAAM,gBAAgB,2CAI5B,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,MAAM,WACF,CAAA;AAElD,eAAO,MAAM,4BAA4B,oBAAqB,MAAM;;;;CAiBnE,CAAA;AAGD,eAAO,MAAM,QAAQ,gBAAiB,WAAW,KAAG,OAwBnD,CAAA"}
@@ -2,11 +2,34 @@ import { customAlphabet } from 'nanoid';
2
2
  import * as nanoIdDictionary from 'nanoid-dictionary';
3
3
  import debug from 'debug';
4
4
  import { BaseFileManager } from './FileManager/BaseFileManager.js';
5
+ import { SEED_CONFIG_FILE, SEED_CONFIG_FALLBACKS } from './constants.js';
6
+ import fs from 'fs';
7
+ import path from 'path';
5
8
  import 'graphql-request';
6
9
  import '../services/internal/constants.js';
7
10
 
8
11
  const logger = debug('seedSdk:shared:helpers');
9
12
  const { alphanumeric } = nanoIdDictionary;
13
+ /**
14
+ * Finds the Seed Protocol config file in the given directory
15
+ * @param searchDir - Directory to search for the config file (defaults to process.cwd())
16
+ * @returns The path to the found config file, or null if not found
17
+ */
18
+ const findSeedConfigFile = (searchDir = process.cwd()) => {
19
+ // First try the primary config file name
20
+ const primaryPath = path.join(searchDir, SEED_CONFIG_FILE);
21
+ if (fs.existsSync(primaryPath)) {
22
+ return primaryPath;
23
+ }
24
+ // Then try fallback names in order
25
+ for (const fallbackName of SEED_CONFIG_FALLBACKS) {
26
+ const fallbackPath = path.join(searchDir, fallbackName);
27
+ if (fs.existsSync(fallbackPath)) {
28
+ return fallbackPath;
29
+ }
30
+ }
31
+ return null;
32
+ };
10
33
  const generateId = () => {
11
34
  return customAlphabet(alphanumeric, 10)();
12
35
  };
@@ -86,5 +109,5 @@ const parseEasRelationPropertyName = (easPropertyName) => {
86
109
  };
87
110
  };
88
111
 
89
- export { BaseFileManager, convertTxIdToImage, generateId, getCorrectId, getDataTypeFromString, getMimeType, parseEasRelationPropertyName, toSnakeCase };
112
+ export { BaseFileManager, convertTxIdToImage, findSeedConfigFile, generateId, getCorrectId, getDataTypeFromString, getMimeType, parseEasRelationPropertyName, toSnakeCase };
90
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/helpers/index.ts"],"sourcesContent":["import { customAlphabet } from 'nanoid'\nimport * as nanoIdDictionary from 'nanoid-dictionary'\nimport debug from 'debug'\nimport { GetCorrectId } from '@/types/helpers'\nimport { GetCorrectIdReturn } from '@/types/helpers'\nimport { BaseFileManager } from './FileManager/BaseFileManager'\nexport * from './ArweaveClient/BaseArweaveClient'\nexport * from './EasClient/BaseEasClient'\nexport * from './QueryClient/BaseQueryClient'\nexport * from './FileManager/BaseFileManager'\nconst logger = debug('seedSdk:shared:helpers')\n\nconst { alphanumeric } = nanoIdDictionary\n\nexport const generateId = (): string => {\n return customAlphabet(alphanumeric, 10)()\n}\n\nexport const toSnakeCase = (str: string) => {\n return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase()\n}\n\nexport const identifyString = (str: string) => {\n try {\n JSON.parse(str)\n return 'json'\n } catch (e) {\n // Not JSON\n }\n\n if (!str) {\n return\n }\n\n if (str.trim().startsWith('<') && str.trim().endsWith('>')) {\n return 'html'\n }\n\n // Simple markdown checks (very naive)\n if (/^#{1,6}\\s|^-{3,}|\\*{3,}|^-{1,2}\\s|\\*\\s/.test(str)) {\n return 'markdown'\n }\n\n if (/^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(str)) {\n return 'base64'\n }\n\n // Default to plain text if unsure\n return 'text'\n}\n\nexport const getMimeType = (base64: string) => {\n if (!base64) {\n return null\n }\n const result = base64.match(/^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,/)\n\n if (result && result.length > 1) {\n return result[1]\n } else {\n return null // MIME type could not be determined\n }\n}\n\nexport const getCorrectId: GetCorrectId = (localIdOrUid: string) => {\n const id: GetCorrectIdReturn = {\n localId: undefined,\n uid: undefined,\n }\n if (!localIdOrUid) {\n return id\n }\n if (localIdOrUid.length === 10) {\n id.localId = localIdOrUid\n }\n if (localIdOrUid.startsWith('0x') && localIdOrUid.length === 66) {\n id.uid = localIdOrUid\n }\n return id\n}\n\nexport const getDataTypeFromString = (\n data: string,\n): 'imageBase64' | 'base64' | 'url' | null => {\n const nonImageBase64Regex =\n /^(?!data:image\\/(?:jpeg|png|gif|bmp|webp);base64,)[A-Za-z0-9+/=]+$/\n\n if (nonImageBase64Regex.test(data)) {\n return 'base64'\n }\n\n // Regular expression for base64 (simple version, checking for base64 format)\n const imageBase64Regex = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/\n\n if (imageBase64Regex.test(data)) {\n return 'imageBase64'\n }\n\n // Regular expression for URL (simple version, checking for common URL format)\n const urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/\n\n if (urlRegex.test(data)) {\n return 'url'\n }\n\n return null\n}\n\nexport const convertTxIdToImage = async (\n txId: string,\n): Promise<string | undefined> => {\n const imageFilePath = `/files/images/${txId}`\n const fileExists = await BaseFileManager.pathExists(imageFilePath)\n if (!fileExists) {\n logger(`[ItemView] [updateImage] ${imageFilePath} does not exist`)\n return\n }\n const buffer = await BaseFileManager.readFileAsBuffer(imageFilePath)\n\n const uint = new Uint8Array(buffer)\n\n const imageBlob = new Blob([uint])\n\n return URL.createObjectURL(imageBlob)\n}\n\nexport const getExecutionTime = async (task, args) => {\n const start = Date.now()\n await task(...args)\n return Date.now() - start\n}\n\nexport const capitalizeFirstLetter = (string: string) =>\n string.charAt(0).toUpperCase() + string.slice(1)\n\nexport const parseEasRelationPropertyName = (easPropertyName: string) => {\n // Split the input string on the first underscore\n const [singularProperty, modelName, idSegment] = easPropertyName.split('_')\n\n // If there are any other parts, assume it is a list (e.g., has 'ids' or other suffix)\n const isList = idSegment === 'ids'\n\n // Create the final property name by pluralizing the singular part\n const propertyName = singularProperty.endsWith('s')\n ? singularProperty\n : singularProperty + 's'\n\n return {\n propertyName, // Plural form of the property name\n modelName, // Model name extracted from the second part\n isList, // True if the property is a list (e.g., 'ids' is present)\n }\n}\n\n\nexport const isBinary = (arrayBuffer: ArrayBuffer): boolean => {\n const view = new Uint8Array(arrayBuffer);\n\n let nonTextCount = 0;\n const threshold = 0.2; // Adjust as needed (e.g., 20% non-text implies binary)\n\n for (let i = 0; i < view.length; i++) {\n const byte = view[i];\n\n // ASCII printable characters (32-126) and common whitespace (9, 10, 13)\n if (\n (byte >= 32 && byte <= 126) || // Printable ASCII\n byte === 9 || byte === 10 || byte === 13 // Tab, LF, CR\n ) {\n continue;\n }\n\n nonTextCount++;\n if (nonTextCount / view.length > threshold) {\n return true; // More than threshold are non-text bytes\n }\n }\n\n return false; // Fewer than threshold are non-text bytes\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/helpers/index.ts"],"sourcesContent":["import { customAlphabet } from 'nanoid'\nimport * as nanoIdDictionary from 'nanoid-dictionary'\nimport debug from 'debug'\nimport { GetCorrectId } from '@/types/helpers'\nimport { GetCorrectIdReturn } from '@/types/helpers'\nimport { BaseFileManager } from './FileManager/BaseFileManager'\nimport { SEED_CONFIG_FILE, SEED_CONFIG_FALLBACKS } from './constants'\nimport fs from 'fs'\nimport path from 'path'\nexport * from './ArweaveClient/BaseArweaveClient'\nexport * from './EasClient/BaseEasClient'\nexport * from './QueryClient/BaseQueryClient'\nexport * from './FileManager/BaseFileManager'\nconst logger = debug('seedSdk:shared:helpers')\n\nconst { alphanumeric } = nanoIdDictionary\n\n/**\n * Finds the Seed Protocol config file in the given directory\n * @param searchDir - Directory to search for the config file (defaults to process.cwd())\n * @returns The path to the found config file, or null if not found\n */\nexport const findSeedConfigFile = (searchDir: string = process.cwd()): string | null => {\n // First try the primary config file name\n const primaryPath = path.join(searchDir, SEED_CONFIG_FILE)\n if (fs.existsSync(primaryPath)) {\n return primaryPath\n }\n\n // Then try fallback names in order\n for (const fallbackName of SEED_CONFIG_FALLBACKS) {\n const fallbackPath = path.join(searchDir, fallbackName)\n if (fs.existsSync(fallbackPath)) {\n return fallbackPath\n }\n }\n\n return null\n}\n\nexport const generateId = (): string => {\n return customAlphabet(alphanumeric, 10)()\n}\n\nexport const toSnakeCase = (str: string) => {\n return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase()\n}\n\nexport const identifyString = (str: string) => {\n try {\n JSON.parse(str)\n return 'json'\n } catch (e) {\n // Not JSON\n }\n\n if (!str) {\n return\n }\n\n if (str.trim().startsWith('<') && str.trim().endsWith('>')) {\n return 'html'\n }\n\n // Simple markdown checks (very naive)\n if (/^#{1,6}\\s|^-{3,}|\\*{3,}|^-{1,2}\\s|\\*\\s/.test(str)) {\n return 'markdown'\n }\n\n if (/^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(str)) {\n return 'base64'\n }\n\n // Default to plain text if unsure\n return 'text'\n}\n\nexport const getMimeType = (base64: string) => {\n if (!base64) {\n return null\n }\n const result = base64.match(/^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,/)\n\n if (result && result.length > 1) {\n return result[1]\n } else {\n return null // MIME type could not be determined\n }\n}\n\nexport const getCorrectId: GetCorrectId = (localIdOrUid: string) => {\n const id: GetCorrectIdReturn = {\n localId: undefined,\n uid: undefined,\n }\n if (!localIdOrUid) {\n return id\n }\n if (localIdOrUid.length === 10) {\n id.localId = localIdOrUid\n }\n if (localIdOrUid.startsWith('0x') && localIdOrUid.length === 66) {\n id.uid = localIdOrUid\n }\n return id\n}\n\nexport const getDataTypeFromString = (\n data: string,\n): 'imageBase64' | 'base64' | 'url' | null => {\n const nonImageBase64Regex =\n /^(?!data:image\\/(?:jpeg|png|gif|bmp|webp);base64,)[A-Za-z0-9+/=]+$/\n\n if (nonImageBase64Regex.test(data)) {\n return 'base64'\n }\n\n // Regular expression for base64 (simple version, checking for base64 format)\n const imageBase64Regex = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/\n\n if (imageBase64Regex.test(data)) {\n return 'imageBase64'\n }\n\n // Regular expression for URL (simple version, checking for common URL format)\n const urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/\n\n if (urlRegex.test(data)) {\n return 'url'\n }\n\n return null\n}\n\nexport const convertTxIdToImage = async (\n txId: string,\n): Promise<string | undefined> => {\n const imageFilePath = `/files/images/${txId}`\n const fileExists = await BaseFileManager.pathExists(imageFilePath)\n if (!fileExists) {\n logger(`[ItemView] [updateImage] ${imageFilePath} does not exist`)\n return\n }\n const buffer = await BaseFileManager.readFileAsBuffer(imageFilePath)\n\n const uint = new Uint8Array(buffer)\n\n const imageBlob = new Blob([uint])\n\n return URL.createObjectURL(imageBlob)\n}\n\nexport const getExecutionTime = async (task, args) => {\n const start = Date.now()\n await task(...args)\n return Date.now() - start\n}\n\nexport const capitalizeFirstLetter = (string: string) =>\n string.charAt(0).toUpperCase() + string.slice(1)\n\nexport const parseEasRelationPropertyName = (easPropertyName: string) => {\n // Split the input string on the first underscore\n const [singularProperty, modelName, idSegment] = easPropertyName.split('_')\n\n // If there are any other parts, assume it is a list (e.g., has 'ids' or other suffix)\n const isList = idSegment === 'ids'\n\n // Create the final property name by pluralizing the singular part\n const propertyName = singularProperty.endsWith('s')\n ? singularProperty\n : singularProperty + 's'\n\n return {\n propertyName, // Plural form of the property name\n modelName, // Model name extracted from the second part\n isList, // True if the property is a list (e.g., 'ids' is present)\n }\n}\n\n\nexport const isBinary = (arrayBuffer: ArrayBuffer): boolean => {\n const view = new Uint8Array(arrayBuffer);\n\n let nonTextCount = 0;\n const threshold = 0.2; // Adjust as needed (e.g., 20% non-text implies binary)\n\n for (let i = 0; i < view.length; i++) {\n const byte = view[i];\n\n // ASCII printable characters (32-126) and common whitespace (9, 10, 13)\n if (\n (byte >= 32 && byte <= 126) || // Printable ASCII\n byte === 9 || byte === 10 || byte === 13 // Tab, LF, CR\n ) {\n continue;\n }\n\n nonTextCount++;\n if (nonTextCount / view.length > threshold) {\n return true; // More than threshold are non-text bytes\n }\n }\n\n return false; // Fewer than threshold are non-text bytes\n}\n"],"names":[],"mappings":"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"}
@@ -21,6 +21,12 @@ export declare class PathResolver {
21
21
  * Gets the .seed directory path
22
22
  */
23
23
  getDotSeedDir(schemaFileDir?: string): string;
24
+ /**
25
+ * Finds the Seed Protocol config file in the given directory
26
+ * @param searchDir - Directory to search for the config file
27
+ * @returns The path to the found config file, or null if not found
28
+ */
29
+ findConfigFile(searchDir?: string): string | null;
24
30
  /**
25
31
  * Gets paths for app-specific directories
26
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PathResolver.d.ts","sourceRoot":"","sources":["../../../src/node/PathResolver.ts"],"names":[],"mappings":"AAIA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAYhC;;OAEG;IACH,aAAa,IAAI,MAAM;IAmCvB,iBAAiB,IAAI,MAAM;IAa3B;;OAEG;IACH,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAO7C;;OAEG;IACH,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;CA4B/C"}
1
+ {"version":3,"file":"PathResolver.d.ts","sourceRoot":"","sources":["../../../src/node/PathResolver.ts"],"names":[],"mappings":"AAKA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAYhC;;OAEG;IACH,aAAa,IAAI,MAAM;IAmCvB,iBAAiB,IAAI,MAAM;IAa3B;;OAEG;IACH,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAO7C;;;;OAIG;IACH,cAAc,CAAC,SAAS,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI;IAIhE;;OAEG;IACH,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS;;;;;;;;;;;CA4B/C"}
@@ -1,6 +1,7 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { NODE_APP_DB_CONFIG } from './constants.js';
4
+ import { findSeedConfigFile } from '../helpers/index.js';
4
5
 
5
6
  class PathResolver {
6
7
  constructor() { }
@@ -94,8 +95,8 @@ class PathResolver {
94
95
  // This should be {localDir}/seed-protocol-sdk/src
95
96
  return path.join(rootWithNodeModules, 'src');
96
97
  default:
97
- // This should be {projectDir}/node_modules/@seedprotocol/sdk
98
- return path.join(rootWithNodeModules, 'node_modules', '@seedprotocol', 'sdk');
98
+ // This should be {projectDir}/node_modules/@seedprotocol/sdk/dist
99
+ return path.join(rootWithNodeModules, 'node_modules', '@seedprotocol', 'sdk', 'dist');
99
100
  }
100
101
  }
101
102
  getNodeModulesDir() {
@@ -116,6 +117,14 @@ class PathResolver {
116
117
  }
117
118
  return path.join(schemaFileDir || process.cwd(), '.seed');
118
119
  }
120
+ /**
121
+ * Finds the Seed Protocol config file in the given directory
122
+ * @param searchDir - Directory to search for the config file
123
+ * @returns The path to the found config file, or null if not found
124
+ */
125
+ findConfigFile(searchDir = process.cwd()) {
126
+ return findSeedConfigFile(searchDir);
127
+ }
119
128
  /**
120
129
  * Gets paths for app-specific directories
121
130
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PathResolver.js","sources":["../../../../src/node/PathResolver.ts"],"sourcesContent":["import path from 'path'\nimport fs from 'fs'\nimport { NODE_APP_DB_CONFIG } from './constants'\n\nexport class PathResolver {\n private static instance: PathResolver\n private constructor() {}\n\n static getInstance(): PathResolver {\n if (!PathResolver.instance) {\n PathResolver.instance = new PathResolver()\n }\n return PathResolver.instance\n }\n\n /**\n * Detects the current environment based on filesystem structure and package.json\n */\n private detectEnvironment(): 'sdk-dev' | 'linked-sdk' | 'test' | 'production' {\n // Check if we're in the SDK repo itself\n if (process.env.NODE_ENV !== 'test' && this.isInSdkRepo()) {\n return 'sdk-dev'\n }\n\n // Check if we're running tests\n if (process.env.NODE_ENV === 'test') {\n return 'test'\n }\n\n // Check if we're using a linked version of the SDK\n if (this.isUsingLinkedSdk()) {\n return 'linked-sdk'\n }\n\n // Default to production environment\n return 'production'\n }\n\n private isInSdkRepo(): boolean {\n try {\n // Check if we're in the SDK repo by looking for specific SDK files/directories\n const currentDir = process.cwd()\n return fs.existsSync(path.join(currentDir, 'src', 'node')) &&\n fs.existsSync(path.join(currentDir, 'package.json')) &&\n JSON.parse(fs.readFileSync(path.join(currentDir, 'package.json'), 'utf8')).name === '@seedprotocol/sdk'\n } catch {\n return false\n }\n }\n\n private isUsingLinkedSdk(): boolean {\n try {\n const pkgPath = path.join(process.cwd(), 'package.json')\n if (!fs.existsSync(pkgPath)) return false\n \n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))\n const sdkDep = pkg.dependencies?.['@seedprotocol/sdk']\n \n return sdkDep && (sdkDep.startsWith('link:') || sdkDep.startsWith('portal:'))\n } catch {\n return false\n }\n }\n\n /**\n * Gets the root directory containing node_modules\n */\n getRootWithNodeModules(): string {\n const processCwd = process.cwd()\n\n const calledFromMocks = processCwd.includes('__mocks__')\n\n if (calledFromMocks) {\n return path.join(processCwd, '..', '..', '..', '..',)\n }\n\n return processCwd\n }\n\n /**\n * Gets the SDK root directory\n */\n getSdkRootDir(): string {\n const env = this.detectEnvironment()\n const rootWithNodeModules = this.getRootWithNodeModules()\n const processCwd = process.cwd()\n\n if (process.cwd().includes('__mocks__')) {\n return path.join(rootWithNodeModules, 'src')\n }\n\n if (env === 'linked-sdk') {\n // For linked packages, find the package directory\n const pkgJson = JSON.parse(fs.readFileSync(path.join(processCwd, 'package.json'), 'utf8'))\n const sdkPath = pkgJson.dependencies?.['@seedprotocol/sdk'] || pkgJson.devDependencies?.['@seedprotocol/sdk']\n console.log(sdkPath)\n if (sdkPath === 'link:@seedprotocol/sdk') {\n return path.join(processCwd, 'node_modules', '@seedprotocol', 'sdk', 'src')\n }\n return path.resolve(processCwd, sdkPath.replace(/^(link:|portal:)/, ''))\n }\n\n console.log('getSdkRootDir', rootWithNodeModules, env)\n\n switch (env) {\n case 'sdk-dev':\n // This should be {localDir}/seed-protocol-sdk/src\n return path.join(rootWithNodeModules, 'src')\n case 'test':\n // This should be {localDir}/seed-protocol-sdk/src\n return path.join(rootWithNodeModules, 'src')\n default:\n // This should be {projectDir}/node_modules/@seedprotocol/sdk\n return path.join(rootWithNodeModules, 'node_modules', '@seedprotocol', 'sdk',)\n }\n }\n\n getNodeModulesDir(): string {\n const env = this.detectEnvironment()\n const rootWithNodeModules = this.getRootWithNodeModules()\n\n let nodeModulesDir = path.join(rootWithNodeModules, 'node_modules')\n\n if (env !== 'linked-sdk' && env !== 'sdk-dev' && nodeModulesDir.includes('__tests__')) {\n nodeModulesDir = path.join(process.cwd(), '..', '..', '..', '..', 'node_modules',)\n }\n\n return nodeModulesDir\n }\n\n /**\n * Gets the .seed directory path\n */\n getDotSeedDir(schemaFileDir?: string): string {\n if (!schemaFileDir && process.env.SEED_SDK_TEST_PROJECT_TYPE && !process.cwd().includes('__mocks__')) {\n return path.join(process.cwd(), '__tests__', '__mocks__', process.env.SEED_SDK_TEST_PROJECT_TYPE, 'project', '.seed')\n }\n return path.join(schemaFileDir || process.cwd(), '.seed')\n }\n\n /**\n * Gets paths for app-specific directories\n */\n getAppPaths(schemaFileDir?: string | undefined) {\n const env = this.detectEnvironment()\n const dotSeedDir = this.getDotSeedDir(schemaFileDir)\n const nodeModulesDir = this.getNodeModulesDir()\n\n let drizzleKitPath = path.join(nodeModulesDir, 'drizzle-kit', 'bin.cjs')\n\n if (env === 'linked-sdk') {\n const sdkRootDir = this.getSdkRootDir()\n console.log(`sdkRootDir: ${sdkRootDir}`)\n const sdkPackageDir = path.dirname(sdkRootDir)\n console.log(`sdkPackageDir: ${sdkPackageDir}`)\n const sdkNodeModulesDir = path.join(sdkPackageDir, 'node_modules')\n drizzleKitPath = path.join(sdkNodeModulesDir, 'drizzle-kit', 'bin.cjs')\n }\n\n return {\n sdkRootDir: this.getSdkRootDir(),\n dotSeedDir,\n nodeModulesDir,\n appSchemaDir: path.join(dotSeedDir, 'schema'),\n appDbDir: path.join(dotSeedDir, 'db'),\n appMetaDir: path.join(dotSeedDir, 'db', 'meta'),\n drizzleDbConfigPath: path.join(this.getSdkRootDir(), 'node', 'db', NODE_APP_DB_CONFIG),\n drizzleKitPath,\n templatePath: path.join(this.getSdkRootDir(), 'node', 'codegen', 'templates')\n }\n }\n} \n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PathResolver.js","sources":["../../../../src/node/PathResolver.ts"],"sourcesContent":["import path from 'path'\nimport fs from 'fs'\nimport { NODE_APP_DB_CONFIG } from './constants'\nimport { findSeedConfigFile } from '@/helpers'\n\nexport class PathResolver {\n private static instance: PathResolver\n private constructor() {}\n\n static getInstance(): PathResolver {\n if (!PathResolver.instance) {\n PathResolver.instance = new PathResolver()\n }\n return PathResolver.instance\n }\n\n /**\n * Detects the current environment based on filesystem structure and package.json\n */\n private detectEnvironment(): 'sdk-dev' | 'linked-sdk' | 'test' | 'production' {\n // Check if we're in the SDK repo itself\n if (process.env.NODE_ENV !== 'test' && this.isInSdkRepo()) {\n return 'sdk-dev'\n }\n\n // Check if we're running tests\n if (process.env.NODE_ENV === 'test') {\n return 'test'\n }\n\n // Check if we're using a linked version of the SDK\n if (this.isUsingLinkedSdk()) {\n return 'linked-sdk'\n }\n\n // Default to production environment\n return 'production'\n }\n\n private isInSdkRepo(): boolean {\n try {\n // Check if we're in the SDK repo by looking for specific SDK files/directories\n const currentDir = process.cwd()\n return fs.existsSync(path.join(currentDir, 'src', 'node')) &&\n fs.existsSync(path.join(currentDir, 'package.json')) &&\n JSON.parse(fs.readFileSync(path.join(currentDir, 'package.json'), 'utf8')).name === '@seedprotocol/sdk'\n } catch {\n return false\n }\n }\n\n private isUsingLinkedSdk(): boolean {\n try {\n const pkgPath = path.join(process.cwd(), 'package.json')\n if (!fs.existsSync(pkgPath)) return false\n \n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))\n const sdkDep = pkg.dependencies?.['@seedprotocol/sdk']\n \n return sdkDep && (sdkDep.startsWith('link:') || sdkDep.startsWith('portal:'))\n } catch {\n return false\n }\n }\n\n /**\n * Gets the root directory containing node_modules\n */\n getRootWithNodeModules(): string {\n const processCwd = process.cwd()\n\n const calledFromMocks = processCwd.includes('__mocks__')\n\n if (calledFromMocks) {\n return path.join(processCwd, '..', '..', '..', '..',)\n }\n\n return processCwd\n }\n\n /**\n * Gets the SDK root directory\n */\n getSdkRootDir(): string {\n const env = this.detectEnvironment()\n const rootWithNodeModules = this.getRootWithNodeModules()\n const processCwd = process.cwd()\n\n if (process.cwd().includes('__mocks__')) {\n return path.join(rootWithNodeModules, 'src')\n }\n\n if (env === 'linked-sdk') {\n // For linked packages, find the package directory\n const pkgJson = JSON.parse(fs.readFileSync(path.join(processCwd, 'package.json'), 'utf8'))\n const sdkPath = pkgJson.dependencies?.['@seedprotocol/sdk'] || pkgJson.devDependencies?.['@seedprotocol/sdk']\n console.log(sdkPath)\n if (sdkPath === 'link:@seedprotocol/sdk') {\n return path.join(processCwd, 'node_modules', '@seedprotocol', 'sdk', 'src')\n }\n return path.resolve(processCwd, sdkPath.replace(/^(link:|portal:)/, ''))\n }\n\n console.log('getSdkRootDir', rootWithNodeModules, env)\n\n switch (env) {\n case 'sdk-dev':\n // This should be {localDir}/seed-protocol-sdk/src\n return path.join(rootWithNodeModules, 'src')\n case 'test':\n // This should be {localDir}/seed-protocol-sdk/src\n return path.join(rootWithNodeModules, 'src')\n default:\n // This should be {projectDir}/node_modules/@seedprotocol/sdk/dist\n return path.join(rootWithNodeModules, 'node_modules', '@seedprotocol', 'sdk', 'dist')\n }\n }\n\n getNodeModulesDir(): string {\n const env = this.detectEnvironment()\n const rootWithNodeModules = this.getRootWithNodeModules()\n\n let nodeModulesDir = path.join(rootWithNodeModules, 'node_modules')\n\n if (env !== 'linked-sdk' && env !== 'sdk-dev' && nodeModulesDir.includes('__tests__')) {\n nodeModulesDir = path.join(process.cwd(), '..', '..', '..', '..', 'node_modules',)\n }\n\n return nodeModulesDir\n }\n\n /**\n * Gets the .seed directory path\n */\n getDotSeedDir(schemaFileDir?: string): string {\n if (!schemaFileDir && process.env.SEED_SDK_TEST_PROJECT_TYPE && !process.cwd().includes('__mocks__')) {\n return path.join(process.cwd(), '__tests__', '__mocks__', process.env.SEED_SDK_TEST_PROJECT_TYPE, 'project', '.seed')\n }\n return path.join(schemaFileDir || process.cwd(), '.seed')\n }\n\n /**\n * Finds the Seed Protocol config file in the given directory\n * @param searchDir - Directory to search for the config file\n * @returns The path to the found config file, or null if not found\n */\n findConfigFile(searchDir: string = process.cwd()): string | null {\n return findSeedConfigFile(searchDir)\n }\n\n /**\n * Gets paths for app-specific directories\n */\n getAppPaths(schemaFileDir?: string | undefined) {\n const env = this.detectEnvironment()\n const dotSeedDir = this.getDotSeedDir(schemaFileDir)\n const nodeModulesDir = this.getNodeModulesDir()\n\n let drizzleKitPath = path.join(nodeModulesDir, 'drizzle-kit', 'bin.cjs')\n\n if (env === 'linked-sdk') {\n const sdkRootDir = this.getSdkRootDir()\n console.log(`sdkRootDir: ${sdkRootDir}`)\n const sdkPackageDir = path.dirname(sdkRootDir)\n console.log(`sdkPackageDir: ${sdkPackageDir}`)\n const sdkNodeModulesDir = path.join(sdkPackageDir, 'node_modules')\n drizzleKitPath = path.join(sdkNodeModulesDir, 'drizzle-kit', 'bin.cjs')\n }\n\n return {\n sdkRootDir: this.getSdkRootDir(),\n dotSeedDir,\n nodeModulesDir,\n appSchemaDir: path.join(dotSeedDir, 'schema'),\n appDbDir: path.join(dotSeedDir, 'db'),\n appMetaDir: path.join(dotSeedDir, 'db', 'meta'),\n drizzleDbConfigPath: path.join(this.getSdkRootDir(), 'node', 'db', NODE_APP_DB_CONFIG),\n drizzleKitPath,\n templatePath: path.join(this.getSdkRootDir(), 'node', 'codegen', 'templates')\n }\n }\n} \n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../../../src/node/codegen/drizzle.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAY,SAAS,CAAA;AA4C9C,eAAO,MAAM,yBAAyB,cACzB,MAAM,cACL,cAAc,KACzB,MAgBF,CAAA;AAED,eAAO,MAAM,kCAAkC,mBAC7B,MAAM,GAAG,SAAS,iBACnB,MAAM,GAAG,SAAS,kBA0BlC,CAAA;AA2BD,eAAO,MAAM,iBAAiB,WAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAY/D,CAAC"}
1
+ {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../../../src/node/codegen/drizzle.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAY,SAAS,CAAA;AA4C9C,eAAO,MAAM,yBAAyB,cACzB,MAAM,cACL,cAAc,KACzB,MAgBF,CAAA;AAED,eAAO,MAAM,kCAAkC,mBAC7B,MAAM,GAAG,SAAS,iBACnB,MAAM,GAAG,SAAS,kBA2BlC,CAAA;AA2BD,eAAO,MAAM,iBAAiB,WAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAY/D,CAAC"}
@@ -55,7 +55,8 @@ const createDrizzleSchemaFilesFromConfig = async (configFilePath, outputDirPath)
55
55
  const pathResolver = PathResolver.getInstance();
56
56
  const { dotSeedDir, appSchemaDir } = pathResolver.getAppPaths();
57
57
  console.log('createDrizzleSchemaFilesFromConfig', configFilePath, outputDirPath);
58
- const schemaFilePath = configFilePath || path.join(dotSeedDir, 'schema.ts'); // Developer created file with model definitions
58
+ // Use provided config file path or find the config file in the project root
59
+ const schemaFilePath = configFilePath || pathResolver.findConfigFile() || path.join(dotSeedDir, 'seed.config.ts');
59
60
  console.log('schemaFilePath', schemaFilePath);
60
61
  const { models, } = await getTsImport(schemaFilePath);
61
62
  const writeToDir = appSchemaDir;
@@ -1 +1 @@
1
- {"version":3,"file":"drizzle.js","sources":["../../../../../src/node/codegen/drizzle.ts"],"sourcesContent":["import path from 'path'\nimport pluralize from 'pluralize'\nimport { camelCase, snakeCase } from 'lodash-es'\nimport * as nunjucks from 'nunjucks'\nimport { ILoader } from 'nunjucks'\nimport { ModelClassType } from '@/types'\nimport { SCHEMA_NJK } from '@/helpers/constants'\nimport { getTsImport } from '@/node/helpers'\nimport fs from 'fs'\nimport {PathResolver} from '@/node/PathResolver'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:codegen:drizzle')\n\n\nconst TemplateLoader: ILoader = {\n getSource: (name: string) => {\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n let templateFilePath = templatePath\n if (name.includes(templatePath)) {\n templateFilePath = name\n } else {\n templateFilePath = path.join(templatePath, path.basename(name))\n }\n const src = fs.readFileSync(templateFilePath, 'utf-8')\n\n return {\n path: name,\n src,\n noCache: false,\n }\n },\n}\n\n// Configure Nunjucks\nconst env = new nunjucks.Environment(TemplateLoader)\n\nenv.addFilter('camelCase', camelCase)\nenv.addFilter('snakeCase', snakeCase)\nenv.addFilter('pluralize', pluralize)\n\nconst refNamesToExcludeFromRelations = [\n 'Text',\n 'Number',\n 'Boolean',\n 'Date',\n]\n\nexport const generateDrizzleSchemaCode = (\n modelName: string,\n modelClass: ModelClassType,\n): string => {\n const listProperties = Object.entries(modelClass.schema).filter(\n ([key, propertyDef]) => propertyDef?.dataType === 'List' && !refNamesToExcludeFromRelations.includes(propertyDef?.ref!),\n )\n\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n const filePath = path.join(templatePath, SCHEMA_NJK)\n\n const schemaCode = env.render(filePath, {\n modelName,\n modelClass,\n listProperties,\n })\n\n return schemaCode\n}\n\nexport const createDrizzleSchemaFilesFromConfig = async (\n configFilePath: string | undefined,\n outputDirPath: string | undefined,\n) => {\n const pathResolver = PathResolver.getInstance()\n const { dotSeedDir, appSchemaDir } = pathResolver.getAppPaths()\n console.log('createDrizzleSchemaFilesFromConfig', configFilePath, outputDirPath)\n\n const schemaFilePath = configFilePath || path.join(dotSeedDir, 'schema.ts') // Developer created file with model definitions\n console.log('schemaFilePath', schemaFilePath)\n\n const { models, } = await getTsImport<{\n models: Record<string, ModelClassType>\n }>(schemaFilePath)\n\n const writeToDir = outputDirPath || appSchemaDir\n\n for (const [modelName, modelClass] of Object.entries(models)) {\n const code = generateDrizzleSchemaCode(modelName, modelClass)\n\n if (!fs.existsSync(writeToDir)) {\n fs.mkdirSync(writeToDir)\n }\n\n const filePath = path.join(writeToDir, `${modelName}Schema.ts`)\n\n await fs.promises.writeFile(filePath, code).catch((e) => console.error(e))\n }\n}\n\n // Helper to determine TypeScript type based on property type\n const seedTypeToJsType = (propertyType: string): string => {\n switch (propertyType) {\n case 'Text':\n return 'string';\n case 'Number':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Date':\n return 'string';\n case 'List':\n return 'string[]';\n case 'Relation':\n return 'string';\n case 'Image':\n return 'string';\n case 'File':\n return 'string';\n default:\n return 'any';\n }\n};\n\n\nexport const generateModelCode = (values: Record<string, any>): string => {\n const { modelName, properties } = values;\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n\n if (modelName === 'Text' || modelName === 'TestModel') {\n logger(`Model name is ${modelName}.`)\n }\n\n const njkEnv = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath))\n njkEnv.addFilter('seedTypeToJsType', seedTypeToJsType)\n return njkEnv.render('model.njk', { modelName, properties })\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drizzle.js","sources":["../../../../../src/node/codegen/drizzle.ts"],"sourcesContent":["import path from 'path'\nimport pluralize from 'pluralize'\nimport { camelCase, snakeCase } from 'lodash-es'\nimport * as nunjucks from 'nunjucks'\nimport { ILoader } from 'nunjucks'\nimport { ModelClassType } from '@/types'\nimport { SCHEMA_NJK } from '@/helpers/constants'\nimport { getTsImport } from '@/node/helpers'\nimport fs from 'fs'\nimport {PathResolver} from '@/node/PathResolver'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:codegen:drizzle')\n\n\nconst TemplateLoader: ILoader = {\n getSource: (name: string) => {\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n let templateFilePath = templatePath\n if (name.includes(templatePath)) {\n templateFilePath = name\n } else {\n templateFilePath = path.join(templatePath, path.basename(name))\n }\n const src = fs.readFileSync(templateFilePath, 'utf-8')\n\n return {\n path: name,\n src,\n noCache: false,\n }\n },\n}\n\n// Configure Nunjucks\nconst env = new nunjucks.Environment(TemplateLoader)\n\nenv.addFilter('camelCase', camelCase)\nenv.addFilter('snakeCase', snakeCase)\nenv.addFilter('pluralize', pluralize)\n\nconst refNamesToExcludeFromRelations = [\n 'Text',\n 'Number',\n 'Boolean',\n 'Date',\n]\n\nexport const generateDrizzleSchemaCode = (\n modelName: string,\n modelClass: ModelClassType,\n): string => {\n const listProperties = Object.entries(modelClass.schema).filter(\n ([key, propertyDef]) => propertyDef?.dataType === 'List' && !refNamesToExcludeFromRelations.includes(propertyDef?.ref!),\n )\n\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n const filePath = path.join(templatePath, SCHEMA_NJK)\n\n const schemaCode = env.render(filePath, {\n modelName,\n modelClass,\n listProperties,\n })\n\n return schemaCode\n}\n\nexport const createDrizzleSchemaFilesFromConfig = async (\n configFilePath: string | undefined,\n outputDirPath: string | undefined,\n) => {\n const pathResolver = PathResolver.getInstance()\n const { dotSeedDir, appSchemaDir } = pathResolver.getAppPaths()\n console.log('createDrizzleSchemaFilesFromConfig', configFilePath, outputDirPath)\n\n // Use provided config file path or find the config file in the project root\n const schemaFilePath = configFilePath || pathResolver.findConfigFile() || path.join(dotSeedDir, 'seed.config.ts')\n console.log('schemaFilePath', schemaFilePath)\n\n const { models, } = await getTsImport<{\n models: Record<string, ModelClassType>\n }>(schemaFilePath)\n\n const writeToDir = outputDirPath || appSchemaDir\n\n for (const [modelName, modelClass] of Object.entries(models)) {\n const code = generateDrizzleSchemaCode(modelName, modelClass)\n\n if (!fs.existsSync(writeToDir)) {\n fs.mkdirSync(writeToDir)\n }\n\n const filePath = path.join(writeToDir, `${modelName}Schema.ts`)\n\n await fs.promises.writeFile(filePath, code).catch((e) => console.error(e))\n }\n}\n\n // Helper to determine TypeScript type based on property type\n const seedTypeToJsType = (propertyType: string): string => {\n switch (propertyType) {\n case 'Text':\n return 'string';\n case 'Number':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Date':\n return 'string';\n case 'List':\n return 'string[]';\n case 'Relation':\n return 'string';\n case 'Image':\n return 'string';\n case 'File':\n return 'string';\n default:\n return 'any';\n }\n};\n\n\nexport const generateModelCode = (values: Record<string, any>): string => {\n const { modelName, properties } = values;\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n\n if (modelName === 'Text' || modelName === 'TestModel') {\n logger(`Model name is ${modelName}.`)\n }\n\n const njkEnv = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath))\n njkEnv.addFilter('seedTypeToJsType', seedTypeToJsType)\n return njkEnv.render('model.njk', { modelName, properties })\n};\n"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ declare class FileManager extends BaseFileManager {
11
11
  static readFile(filePath: string): Promise<File>;
12
12
  static getParentDirPath(filePath: string): string;
13
13
  static getFilenameFromPath(filePath: string): string;
14
+ static getPathModule(): any;
14
15
  }
15
16
  export { FileManager };
16
17
  //# 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;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;WAI9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIrD,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
+ {"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;WAI9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAIrD,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;IAIpD,MAAM,CAAC,aAAa,IAAI,GAAG;CAG5B;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -44,6 +44,9 @@ class FileManager extends BaseFileManager {
44
44
  static getFilenameFromPath(filePath) {
45
45
  return path.basename(filePath);
46
46
  }
47
+ static getPathModule() {
48
+ return path;
49
+ }
47
50
  }
48
51
 
49
52
  export { FileManager };
@@ -1 +1 @@
1
- {"version":3,"file":"FileManager.js","sources":["../../../../../src/node/helpers/FileManager.ts"],"sourcesContent":["import * as fsAsync from 'fs/promises'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport path from 'path'\n\nclass FileManager extends BaseFileManager {\n\n static async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async initializeFileSystem(): Promise<void> {\n return // No need to initialize file system in node\n }\n\n static async downloadAllFiles(): Promise<void> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async resizeImage(): Promise<void> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async resizeAllImages(): Promise<void> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async pathExists(filePath: string): Promise<boolean> {\n return await fsAsync.access(filePath).then(() => true).catch(() => false)\n }\n\n static async createDirIfNotExists(filePath: string): Promise<void> {\n await fsAsync.mkdir(filePath, { recursive: true })\n }\n\n static async readFileAsBuffer( filePath: string ): Promise<Buffer> {\n return await fsAsync.readFile(filePath)\n }\n\n static async readFile(filePath: string): Promise<File> {\n return new File([await fsAsync.readFile(filePath)], filePath)\n }\n\n static getParentDirPath(filePath: string): string {\n return path.dirname(filePath)\n }\n\n static getFilenameFromPath(filePath: string): string {\n return path.basename(filePath)\n }\n\n}\n\nexport { FileManager }\n\n"],"names":[],"mappings":";;;;AAIA,MAAM,WAAY,SAAQ,eAAe,CAAA;AAEvC,IAAA,aAAa,qBAAqB,CAAE,IAAY,EAAA;QAC9C,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;IAGJ,aAAa,oBAAoB,GAAA;AAC/B,QAAA,OAAM;;IAGR,aAAa,gBAAgB,GAAA;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;IAGJ,aAAa,WAAW,GAAA;QACtB,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;IAGJ,aAAa,eAAe,GAAA;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;AAGJ,IAAA,aAAa,UAAU,CAAC,QAAgB,EAAA;QACtC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;;AAG3E,IAAA,aAAa,oBAAoB,CAAC,QAAgB,EAAA;AAChD,QAAA,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;AAGpD,IAAA,aAAa,gBAAgB,CAAE,QAAgB,EAAA;AAC7C,QAAA,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGzC,IAAA,aAAa,QAAQ,CAAC,QAAgB,EAAA;AACpC,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC;;IAG/D,OAAO,gBAAgB,CAAC,QAAgB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;IAG/B,OAAO,mBAAmB,CAAC,QAAgB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGjC;;;;"}
1
+ {"version":3,"file":"FileManager.js","sources":["../../../../../src/node/helpers/FileManager.ts"],"sourcesContent":["import * as fsAsync from 'fs/promises'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport path from 'path'\n\nclass FileManager extends BaseFileManager {\n\n static async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async initializeFileSystem(): Promise<void> {\n return // No need to initialize file system in node\n }\n\n static async downloadAllFiles(): Promise<void> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async resizeImage(): Promise<void> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async resizeAllImages(): Promise<void> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async pathExists(filePath: string): Promise<boolean> {\n return await fsAsync.access(filePath).then(() => true).catch(() => false)\n }\n\n static async createDirIfNotExists(filePath: string): Promise<void> {\n await fsAsync.mkdir(filePath, { recursive: true })\n }\n\n static async readFileAsBuffer( filePath: string ): Promise<Buffer> {\n return await fsAsync.readFile(filePath)\n }\n\n static async readFile(filePath: string): Promise<File> {\n return new File([await fsAsync.readFile(filePath)], filePath)\n }\n\n static getParentDirPath(filePath: string): string {\n return path.dirname(filePath)\n }\n\n static getFilenameFromPath(filePath: string): string {\n return path.basename(filePath)\n }\n\n static getPathModule(): any {\n return path\n }\n}\n\nexport { FileManager }\n\n"],"names":[],"mappings":";;;;AAIA,MAAM,WAAY,SAAQ,eAAe,CAAA;AAEvC,IAAA,aAAa,qBAAqB,CAAE,IAAY,EAAA;QAC9C,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;IAGJ,aAAa,oBAAoB,GAAA;AAC/B,QAAA,OAAM;;IAGR,aAAa,gBAAgB,GAAA;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;IAGJ,aAAa,WAAW,GAAA;QACtB,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;IAGJ,aAAa,eAAe,GAAA;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAE,OAAO,EAAE,MAAM,KAAK;AACvC,YAAA,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACtC,SAAC,CAAC;;AAGJ,IAAA,aAAa,UAAU,CAAC,QAAgB,EAAA;QACtC,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;;AAG3E,IAAA,aAAa,oBAAoB,CAAC,QAAgB,EAAA;AAChD,QAAA,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;AAGpD,IAAA,aAAa,gBAAgB,CAAE,QAAgB,EAAA;AAC7C,QAAA,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGzC,IAAA,aAAa,QAAQ,CAAC,QAAgB,EAAA;AACpC,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC;;IAG/D,OAAO,gBAAgB,CAAC,QAAgB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;IAG/B,OAAO,mBAAmB,CAAC,QAAgB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGhC,IAAA,OAAO,aAAa,GAAA;AAClB,QAAA,OAAO,IAAI;;AAEd;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { sqliteTable, blob, text, int, check } from 'drizzle-orm/sqlite-core';
2
2
  import { sql } from 'drizzle-orm';
3
3
 
4
- sqliteTable('config', {
4
+ const config = sqliteTable('config', {
5
5
  id: int('id').primaryKey({ autoIncrement: true }),
6
6
  key: text('key').notNull(),
7
7
  text: text('text'),
@@ -12,4 +12,6 @@ sqliteTable('config', {
12
12
  check('hasValue', sql `key IS NOT NULL OR text IS NOT NULL OR json IS NOT NULL OR blob IS NOT NULL`),
13
13
  ],
14
14
  });
15
+
16
+ export { config };
15
17
  //# sourceMappingURL=ConfigSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigSchema.js","sources":["../../../../src/seedSchema/ConfigSchema.ts"],"sourcesContent":["import { int, sqliteTable, text, check, blob, } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel, sql } from 'drizzle-orm'\n\nexport const config = sqliteTable(\n 'config',\n {\n id: int('id').primaryKey({ autoIncrement: true }),\n key: text('key').notNull(),\n text: text('text'),\n json: text('json', {mode: 'json'}),\n blob: blob('blob', {mode: 'buffer'}),\n},\n{\n checks: [\n check('hasValue', sql`key IS NOT NULL OR text IS NOT NULL OR json IS NOT NULL OR blob IS NOT NULL`),\n ],\n})\n\nexport type configType = InferSelectModel<typeof config>"],"names":[],"mappings":";;;AAGsB,WAAW,CAC/B,QAAQ,EACR;AACE,IAAA,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACjD,IAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AAC1B,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;CACvC,EACD;AACE,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,CAAC,UAAU,EAAE,GAAG,CAAA,6EAA6E,CAAC;AACpG,KAAA;AACF,CAAA"}
1
+ {"version":3,"file":"ConfigSchema.js","sources":["../../../../src/seedSchema/ConfigSchema.ts"],"sourcesContent":["import { int, sqliteTable, text, check, blob, } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel, sql } from 'drizzle-orm'\n\nexport const config = sqliteTable(\n 'config',\n {\n id: int('id').primaryKey({ autoIncrement: true }),\n key: text('key').notNull(),\n text: text('text'),\n json: text('json', {mode: 'json'}),\n blob: blob('blob', {mode: 'buffer'}),\n},\n{\n checks: [\n check('hasValue', sql`key IS NOT NULL OR text IS NOT NULL OR json IS NOT NULL OR blob IS NOT NULL`),\n ],\n})\n\nexport type configType = InferSelectModel<typeof config>"],"names":[],"mappings":";;;AAGa,MAAA,MAAM,GAAG,WAAW,CAC/B,QAAQ,EACR;AACE,IAAA,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACjD,IAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AAC1B,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;CACvC,EACD;AACE,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,CAAC,UAAU,EAAE,GAAG,CAAA,6EAA6E,CAAC;AACpG,KAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"saveConfig.d.ts","sourceRoot":"","sources":["../../../../../src/services/internal/actors/saveConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAGlD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAQnE,eAAO,MAAM,UAAU,0GA8FrB,CAAA"}
1
+ {"version":3,"file":"saveConfig.d.ts","sourceRoot":"","sources":["../../../../../src/services/internal/actors/saveConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,QAAQ,CAAA;AAGlD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAMnE,eAAO,MAAM,UAAU,0GAuErB,CAAA"}
@@ -9,35 +9,21 @@ import '../../../seedSchema/ModelSchema.js';
9
9
  import '../../../seedSchema/ModelUidSchema.js';
10
10
  import '../../../seedSchema/ConfigSchema.js';
11
11
  import debug from 'debug';
12
- import { getTableColumns } from 'drizzle-orm';
13
- import { getTableConfig } from 'drizzle-orm/sqlite-core';
14
12
 
15
13
  const logger = debug('seedSdk:services:internal:actors:saveConfig');
16
14
  const saveConfig = fromCallback(({ sendBack, input: { context } }) => {
15
+ logger('saveConfig starting');
17
16
  const { endpoints, addresses, arweaveDomain } = context;
18
17
  if (!endpoints) {
19
18
  throw new Error('saveConfig called with invalid endpoints');
20
19
  }
21
20
  const _saveConfig = async () => {
22
- // logger('[sdk] [internal/actors] starting _saveConfig')
23
21
  const appDb = BaseDb.getAppDb();
24
22
  if (!appDb) {
25
23
  throw new Error('App DB not found');
26
24
  }
27
25
  const endpointsValueString = JSON.stringify(endpoints);
28
26
  const addressesValueString = JSON.stringify(addresses);
29
- const tableColumns = getTableColumns(appState);
30
- logger('tableColumns', tableColumns);
31
- const { columns, indexes, foreignKeys, checks, primaryKeys, name, } = getTableConfig(appState);
32
- logger('columns', columns);
33
- logger('indexes', indexes);
34
- logger('foreignKeys', foreignKeys);
35
- logger('checks', checks);
36
- logger('primaryKeys', primaryKeys);
37
- logger('name', name);
38
- logger('calling select on db');
39
- const queryResult = await appDb.select().from(appState);
40
- logger('queryResult', queryResult);
41
27
  // TODO: Figure out how to define on conflict with multiple rows added
42
28
  await appDb
43
29
  .insert(appState)
@@ -51,19 +37,20 @@ const saveConfig = fromCallback(({ sendBack, input: { context } }) => {
51
37
  value: endpointsValueString,
52
38
  },
53
39
  });
54
- // logger('[sdk] [internal/actors] Saving addresses to db')
55
- await appDb
56
- .insert(appState)
57
- .values({
58
- key: 'addresses',
59
- value: addressesValueString,
60
- })
61
- .onConflictDoUpdate({
62
- target: appState.key,
63
- set: {
40
+ if (addresses) {
41
+ await appDb
42
+ .insert(appState)
43
+ .values({
44
+ key: 'addresses',
64
45
  value: addressesValueString,
65
- },
66
- });
46
+ })
47
+ .onConflictDoUpdate({
48
+ target: appState.key,
49
+ set: {
50
+ value: addressesValueString,
51
+ },
52
+ });
53
+ }
67
54
  await appDb
68
55
  .insert(appState)
69
56
  .values({
@@ -76,10 +63,9 @@ const saveConfig = fromCallback(({ sendBack, input: { context } }) => {
76
63
  value: arweaveDomain || 'arweave.net',
77
64
  },
78
65
  });
79
- logger('[sdk] [internal/actors] Should be done saving');
80
66
  };
81
67
  _saveConfig().then(() => {
82
- logger('[sdk] [internal/actors] Successfully saved config');
68
+ logger('saveConfig success');
83
69
  return sendBack({ type: INTERNAL_SAVING_CONFIG_SUCCESS });
84
70
  });
85
71
  return () => { };
@@ -1 +1 @@
1
- {"version":3,"file":"saveConfig.js","sources":["../../../../../../src/services/internal/actors/saveConfig.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { INTERNAL_SAVING_CONFIG_SUCCESS } from '@/services/internal/constants'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { FromCallbackInput, InternalMachineContext } from '@/types'\nimport { appState } from '@/seedSchema'\nimport debug from 'debug'\nimport { getTableColumns, sql } from 'drizzle-orm'\nimport { getTableConfig } from 'drizzle-orm/sqlite-core'\n\nconst logger = debug('seedSdk:services:internal:actors:saveConfig')\n\nexport const saveConfig = fromCallback<\n EventObject,\n FromCallbackInput<InternalMachineContext>\n>(({ sendBack, input: { context } }) => {\n\n const { endpoints, addresses, arweaveDomain } = context\n\n if (!endpoints) {\n throw new Error('saveConfig called with invalid endpoints')\n }\n\n const _saveConfig = async (): Promise<void> => {\n // logger('[sdk] [internal/actors] starting _saveConfig')\n const appDb = BaseDb.getAppDb()\n\n if (!appDb) {\n throw new Error('App DB not found')\n }\n const endpointsValueString = JSON.stringify(endpoints)\n const addressesValueString = JSON.stringify(addresses)\n\n const tableColumns = getTableColumns(appState)\n\n logger('tableColumns', tableColumns)\n\n const {\n columns,\n indexes,\n foreignKeys,\n checks,\n primaryKeys,\n name,\n } = getTableConfig(appState);\n\n logger('columns', columns)\n logger('indexes', indexes)\n logger('foreignKeys', foreignKeys)\n logger('checks', checks)\n logger('primaryKeys', primaryKeys)\n logger('name', name)\n\n logger('calling select on db')\n\n const queryResult = await appDb.select().from(appState)\n\n logger('queryResult', queryResult)\n\n // TODO: Figure out how to define on conflict with multiple rows added\n await appDb\n .insert(appState)\n .values({\n key: 'endpoints',\n value: endpointsValueString,\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value: endpointsValueString,\n },\n })\n // logger('[sdk] [internal/actors] Saving addresses to db')\n await appDb\n .insert(appState)\n .values({\n key: 'addresses',\n value: addressesValueString,\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value: addressesValueString,\n },\n })\n await appDb\n .insert(appState)\n .values({\n key: 'arweaveDomain',\n value: arweaveDomain || 'arweave.net',\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value: arweaveDomain || 'arweave.net',\n },\n })\n logger('[sdk] [internal/actors] Should be done saving')\n }\n\n _saveConfig().then(() => {\n logger('[sdk] [internal/actors] Successfully saved config')\n return sendBack({ type: INTERNAL_SAVING_CONFIG_SUCCESS })\n })\n\n return () => { }\n})\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"saveConfig.js","sources":["../../../../../../src/services/internal/actors/saveConfig.ts"],"sourcesContent":["import { EventObject, fromCallback } from 'xstate'\nimport { INTERNAL_SAVING_CONFIG_SUCCESS } from '@/services/internal/constants'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { FromCallbackInput, InternalMachineContext } from '@/types'\nimport { appState } from '@/seedSchema'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:services:internal:actors:saveConfig')\n\nexport const saveConfig = fromCallback<\n EventObject,\n FromCallbackInput<InternalMachineContext>\n>(({ sendBack, input: { context } }) => {\n\n logger('saveConfig starting')\n\n const { endpoints, addresses, arweaveDomain } = context\n\n if (!endpoints) {\n throw new Error('saveConfig called with invalid endpoints')\n }\n\n const _saveConfig = async (): Promise<void> => {\n const appDb = BaseDb.getAppDb()\n\n if (!appDb) {\n throw new Error('App DB not found')\n }\n const endpointsValueString = JSON.stringify(endpoints)\n const addressesValueString = JSON.stringify(addresses)\n\n // TODO: Figure out how to define on conflict with multiple rows added\n await appDb\n .insert(appState)\n .values({\n key: 'endpoints',\n value: endpointsValueString,\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value: endpointsValueString,\n },\n })\n\n if (addresses) {\n await appDb\n .insert(appState)\n .values({\n key: 'addresses',\n value: addressesValueString,\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value: addressesValueString,\n },\n })\n }\n\n await appDb\n .insert(appState)\n .values({\n key: 'arweaveDomain',\n value: arweaveDomain || 'arweave.net',\n })\n .onConflictDoUpdate({\n target: appState.key,\n set: {\n value: arweaveDomain || 'arweave.net',\n },\n })\n }\n\n _saveConfig().then(() => {\n logger('saveConfig success')\n return sendBack({ type: INTERNAL_SAVING_CONFIG_SUCCESS })\n })\n\n return () => { }\n})\n"],"names":[],"mappings":";;;;;;;;;;;;AAOA,MAAM,MAAM,GAAG,KAAK,CAAC,6CAA6C,CAAC;AAEtD,MAAA,UAAU,GAAG,YAAY,CAGpC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAI;IAErC,MAAM,CAAC,qBAAqB,CAAC;IAE7B,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO;IAEvD,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;;AAG7D,IAAA,MAAM,WAAW,GAAG,YAA0B;AAC5C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE;QAE/B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC;;QAErC,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACtD,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;;AAGtD,QAAA,MAAM;aACH,MAAM,CAAC,QAAQ;AACf,aAAA,MAAM,CAAC;AACN,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,KAAK,EAAE,oBAAoB;SAC5B;AACA,aAAA,kBAAkB,CAAC;YAClB,MAAM,EAAE,QAAQ,CAAC,GAAG;AACpB,YAAA,GAAG,EAAE;AACL,gBAAA,KAAK,EAAE,oBAAoB;AAC1B,aAAA;AACF,SAAA,CAAC;QAEJ,IAAI,SAAS,EAAE;AACb,YAAA,MAAM;iBACH,MAAM,CAAC,QAAQ;AACjB,iBAAA,MAAM,CAAC;AACN,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,KAAK,EAAE,oBAAoB;aAC5B;AACA,iBAAA,kBAAkB,CAAC;gBAClB,MAAM,EAAE,QAAQ,CAAC,GAAG;AACpB,gBAAA,GAAG,EAAE;AACH,oBAAA,KAAK,EAAE,oBAAoB;AAC5B,iBAAA;AACF,aAAA,CAAC;;AAGJ,QAAA,MAAM;aACH,MAAM,CAAC,QAAQ;AACf,aAAA,MAAM,CAAC;AACN,YAAA,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,aAAa,IAAI,aAAa;SACtC;AACA,aAAA,kBAAkB,CAAC;YAClB,MAAM,EAAE,QAAQ,CAAC,GAAG;AACpB,YAAA,GAAG,EAAE;gBACH,KAAK,EAAE,aAAa,IAAI,aAAa;AACtC,aAAA;AACF,SAAA,CAAC;AACJ,KAAC;AAEH,IAAA,WAAW,EAAE,CAAC,IAAI,CAAC,MAAK;QACtB,MAAM,CAAC,oBAAoB,CAAC;QAC5B,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;AAC3D,KAAC,CAAC;AAEF,IAAA,OAAO,MAAQ,GAAC;AAClB,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/services/internal/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAMnC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,YAAmB,MAAM,kBAgBtD,CAAA;AAmMD,eAAO,MAAM,cAAc,QAAe,MAAM,iBAG/C,CAAA;AAsBD,eAAO,MAAM,iBAAiB,cAAqB,MAAM,EAAE,kBAa1D,CAAA;AAID,eAAO,MAAM,WAAW,yBAAgC,SAAS,kBAShE,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/services/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAMnC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,YAAmB,MAAM,kBAgBtD,CAAA;AAoMD,eAAO,MAAM,cAAc,QAAe,MAAM,iBAG/C,CAAA;AAsBD,eAAO,MAAM,iBAAiB,cAAqB,MAAM,EAAE,kBAa1D,CAAA;AAID,eAAO,MAAM,WAAW,yBAAgC,SAAS,kBAShE,CAAA"}
@@ -1,6 +1,5 @@
1
- import path from 'path';
2
- import debug from 'debug';
3
1
  import { BaseFileManager } from '../../helpers/FileManager/BaseFileManager.js';
2
+ import debug from 'debug';
4
3
 
5
4
  const logger = debug('seedSdk:services:internal:helpers');
6
5
  /**
@@ -61,6 +60,7 @@ class FileDownloadManager {
61
60
  if (migrationNumber &&
62
61
  existingFileMigrationNumber &&
63
62
  existingFileMigrationNumber === migrationNumber) {
63
+ const path = BaseFileManager.getPathModule();
64
64
  await fs.promises.unlink(path.join(localDirPath, file));
65
65
  }
66
66
  }
@@ -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 = 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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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/services/internal/helpers.ts"],"sourcesContent":["import { Endpoints } from '@/types'\nimport { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport debug from 'debug'\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 const path = BaseFileManager.getPathModule()\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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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@seedprotocol/sdk",
3
- "version": "0.3.15",
3
+ "version": "0.3.17",
4
4
  "description": "The SDK for Seed Protocol",
5
5
  "type": "module",
6
6
  "engines": {
7
- "node": ">= 20 < 23"
7
+ "node": ">= 20 < 24"
8
8
  },
9
9
  "files": [
10
10
  "dist"