gatsby 5.3.0 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"lmdb-datastore.js","names":["lmdbDatastore","getNode","getTypes","countNodes","iterateNodes","iterateNodesByType","updateDataStore","ready","runQuery","getNodes","getNodesByType","preSyncDeletedNodeIdsCache","Set","getDefaultDbPath","dbFileName","process","env","NODE_ENV","FORCE_TEST_DATABASE_ID","JEST_WORKER_ID","cwd","fullDbPath","rootDb","databases","getRootDb","Error","globalThis","__GATSBY_OPEN_ROOT_LMDBS","Map","get","open","name","path","compression","set","getDatabases","__GATSBY_OPEN_LMDBS","nodes","openDB","cache","expirer","nodesByType","dupSort","metadata","useVersions","indexes","result","Array","from","type","nodesDb","GatsbyIterable","getKeys","snapshot","map","nodeId","undefined","filter","Boolean","getValues","id","has","asArray","typeName","stats","getStats","Math","max","Number","entryCount","size","getValuesCount","args","GATSBY_EXPERIMENTAL_LMDB_INDEXES","doRunQuery","datastore","Promise","resolve","runFastFiltersAndSort","lastOperationPromise","action","dbs","transactionSync","clearSync","clearIndexes","operationPromise","all","updateNodes","updateNodesByType","delete","payload","add","then","clear","setupLmdbStore","dbPath","replaceReducer","state","emitter","on"],"sources":["../../../src/datastore/lmdb/lmdb-datastore.ts"],"sourcesContent":["import { RootDatabase, open, RangeIterable } from \"lmdb\"\n// import { performance } from \"perf_hooks\"\nimport { ActionsUnion, IGatsbyNode } from \"../../redux/types\"\nimport { updateNodes } from \"./updates/nodes\"\nimport { updateNodesByType } from \"./updates/nodes-by-type\"\nimport { IDataStore, ILmdbDatabases, IQueryResult } from \"../types\"\nimport { emitter, replaceReducer } from \"../../redux\"\nimport { GatsbyIterable } from \"../common/iterable\"\nimport { doRunQuery } from \"./query/run-query\"\nimport {\n IRunFilterArg,\n runFastFiltersAndSort,\n} from \"../in-memory/run-fast-filters\"\n\nconst lmdbDatastore = {\n getNode,\n getTypes,\n countNodes,\n iterateNodes,\n iterateNodesByType,\n updateDataStore,\n ready,\n runQuery,\n\n // deprecated:\n getNodes,\n getNodesByType,\n}\n\nconst preSyncDeletedNodeIdsCache = new Set()\n\nfunction getDefaultDbPath(): string {\n const dbFileName =\n process.env.NODE_ENV === `test`\n ? `test-datastore-${\n // FORCE_TEST_DATABASE_ID will be set if this gets executed in worker context\n // when running jest tests. JEST_WORKER_ID will be set when this gets executed directly\n // in test context (jest will use jest-worker internally).\n process.env.FORCE_TEST_DATABASE_ID ?? process.env.JEST_WORKER_ID\n }`\n : `datastore`\n\n return process.cwd() + `/.cache/data/` + dbFileName\n}\n\nlet fullDbPath\nlet rootDb\nlet databases\n\n/* eslint-disable @typescript-eslint/no-namespace */\ndeclare global {\n namespace NodeJS {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n interface Global {\n __GATSBY_OPEN_LMDBS?: Map<string, ILmdbDatabases>\n __GATSBY_OPEN_ROOT_LMDBS?: Map<string, RootDatabase>\n }\n }\n}\n\nfunction getRootDb(): RootDatabase {\n if (!rootDb) {\n if (!fullDbPath) {\n throw new Error(`LMDB path is not set!`)\n }\n\n if (!globalThis.__GATSBY_OPEN_ROOT_LMDBS) {\n globalThis.__GATSBY_OPEN_ROOT_LMDBS = new Map()\n }\n rootDb = globalThis.__GATSBY_OPEN_ROOT_LMDBS.get(fullDbPath)\n if (rootDb) {\n return rootDb\n }\n\n rootDb = open({\n name: `root`,\n path: fullDbPath,\n compression: true,\n })\n\n globalThis.__GATSBY_OPEN_ROOT_LMDBS.set(fullDbPath, rootDb)\n }\n return rootDb\n}\n\nfunction getDatabases(): ILmdbDatabases {\n if (!databases) {\n // __GATSBY_OPEN_LMDBS tracks if we already opened given db in this process\n // In `gatsby serve` case we might try to open it twice - once for engines\n // and second to get access to `SitePage` nodes (to power trailing slashes\n // redirect middleware). This ensure there is single instance within a process.\n // Using more instances seems to cause weird random errors.\n if (!globalThis.__GATSBY_OPEN_LMDBS) {\n globalThis.__GATSBY_OPEN_LMDBS = new Map()\n }\n databases = globalThis.__GATSBY_OPEN_LMDBS.get(fullDbPath)\n if (databases) {\n return databases\n }\n\n const rootDb = getRootDb()\n databases = {\n nodes: rootDb.openDB({\n name: `nodes`,\n // FIXME: sharedStructuresKey breaks tests - probably need some cleanup for it on DELETE_CACHE\n // sharedStructuresKey: Symbol.for(`structures`),\n // @ts-ignore\n cache: {\n // expirer: false disables LRU part and only take care of WeakRefs\n // this way we don't retain nodes strongly, but will continue to\n // reuse them if they are loaded already\n expirer: false,\n },\n }),\n nodesByType: rootDb.openDB({\n name: `nodesByType`,\n dupSort: true,\n }),\n metadata: rootDb.openDB({\n name: `metadata`,\n useVersions: true,\n }),\n indexes: rootDb.openDB({\n name: `indexes`,\n // TODO: use dupSort when this is ready: https://github.com/DoctorEvidence/lmdb-store/issues/66\n // dupSort: true\n }),\n }\n globalThis.__GATSBY_OPEN_LMDBS.set(fullDbPath, databases)\n }\n return databases\n}\n\n/**\n * @deprecated\n */\nfunction getNodes(): Array<IGatsbyNode> {\n // const start = performance.now()\n const result = Array.from<IGatsbyNode>(iterateNodes())\n // const timeTotal = performance.now() - start\n // console.warn(\n // `getNodes() is deprecated, use iterateNodes() instead; ` +\n // `array length: ${result.length}; time(ms): ${timeTotal}`\n // )\n return result ?? []\n}\n\n/**\n * @deprecated\n */\nfunction getNodesByType(type: string): Array<IGatsbyNode> {\n // const start = performance.now()\n const result = Array.from<IGatsbyNode>(iterateNodesByType(type))\n // const timeTotal = performance.now() - start\n // console.warn(\n // `getNodesByType() is deprecated, use iterateNodesByType() instead; ` +\n // `array length: ${result.length}; time(ms): ${timeTotal}`\n // )\n return result ?? []\n}\n\nfunction iterateNodes(): GatsbyIterable<IGatsbyNode> {\n // Additionally fetching items by id to leverage lmdb-store cache\n const nodesDb = getDatabases().nodes\n return new GatsbyIterable(\n nodesDb\n .getKeys({ snapshot: false })\n .map(nodeId => (typeof nodeId === `string` ? getNode(nodeId) : undefined))\n .filter(Boolean) as RangeIterable<IGatsbyNode>\n )\n}\n\nfunction iterateNodesByType(type: string): GatsbyIterable<IGatsbyNode> {\n const nodesByType = getDatabases().nodesByType\n return new GatsbyIterable(\n nodesByType\n .getValues(type)\n .map(nodeId => getNode(nodeId))\n .filter(Boolean) as RangeIterable<IGatsbyNode>\n )\n}\n\nfunction getNode(id: string): IGatsbyNode | undefined {\n if (!id || preSyncDeletedNodeIdsCache.has(id)) {\n return undefined\n }\n\n const { nodes } = getDatabases()\n return nodes.get(id)\n}\n\nfunction getTypes(): Array<string> {\n return getDatabases().nodesByType.getKeys({}).asArray\n}\n\nfunction countNodes(typeName?: string): number {\n if (!typeName) {\n const stats = getDatabases().nodes.getStats() as { entryCount: number }\n return Math.max(\n Number(stats.entryCount) - preSyncDeletedNodeIdsCache.size,\n 0\n ) // FIXME: add -1 when restoring shared structures key\n }\n\n const { nodesByType } = getDatabases()\n return nodesByType.getValuesCount(typeName)\n}\n\nasync function runQuery(args: IRunFilterArg): Promise<IQueryResult> {\n if (process.env.GATSBY_EXPERIMENTAL_LMDB_INDEXES) {\n return await doRunQuery({\n datastore: lmdbDatastore,\n databases: getDatabases(),\n ...args,\n })\n }\n return Promise.resolve(runFastFiltersAndSort(args))\n}\n\nlet lastOperationPromise: Promise<any> = Promise.resolve()\n\nfunction updateDataStore(action: ActionsUnion): void {\n switch (action.type) {\n case `DELETE_CACHE`: {\n const dbs = getDatabases()\n // Force sync commit\n dbs.nodes.transactionSync(() => {\n dbs.nodes.clearSync()\n dbs.nodesByType.clearSync()\n dbs.metadata.clearSync()\n dbs.indexes.clearSync()\n })\n break\n }\n case `SET_PROGRAM`: {\n // TODO: remove this when we have support for incremental indexes in lmdb\n clearIndexes()\n break\n }\n case `CREATE_NODE`:\n case `DELETE_NODE`:\n case `ADD_FIELD_TO_NODE`:\n case `ADD_CHILD_NODE_TO_PARENT_NODE`:\n case `MATERIALIZE_PAGE_MODE`: {\n const dbs = getDatabases()\n const operationPromise = Promise.all([\n updateNodes(dbs.nodes, action),\n updateNodesByType(dbs.nodesByType, action),\n ])\n lastOperationPromise = operationPromise\n\n // if create is used in the same transaction as delete we should remove it from cache\n if (action.type === `CREATE_NODE`) {\n preSyncDeletedNodeIdsCache.delete(action.payload.id)\n }\n\n if (action.type === `DELETE_NODE` && action.payload?.id) {\n preSyncDeletedNodeIdsCache.add(action.payload.id)\n operationPromise.then(() => {\n // only clear if no other operations have been done in the meantime\n if (lastOperationPromise === operationPromise) {\n preSyncDeletedNodeIdsCache.clear()\n }\n })\n }\n }\n }\n}\n\nfunction clearIndexes(): void {\n const dbs = getDatabases()\n dbs.nodes.transactionSync(() => {\n dbs.metadata.clearSync()\n dbs.indexes.clearSync()\n })\n}\n\n/**\n * Resolves when all the data is synced\n */\nasync function ready(): Promise<void> {\n await lastOperationPromise\n}\n\nexport function setupLmdbStore({\n dbPath = getDefaultDbPath(),\n}: { dbPath?: string } = {}): IDataStore {\n fullDbPath = dbPath\n\n replaceReducer({\n nodes: (state = new Map(), action) =>\n action.type === `DELETE_CACHE` ? new Map() : state,\n nodesByType: (state = new Map(), action) =>\n action.type === `DELETE_CACHE` ? new Map() : state,\n })\n emitter.on(`*`, action => {\n if (action) {\n updateDataStore(action)\n }\n })\n // TODO: remove this when we have support for incremental indexes in lmdb\n clearIndexes()\n return lmdbDatastore\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"lmdb-datastore.js","names":["lmdbDatastore","getNode","getTypes","countNodes","iterateNodes","iterateNodesByType","updateDataStore","ready","runQuery","getNodes","getNodesByType","preSyncDeletedNodeIdsCache","Set","getDefaultDbPath","dbFileName","process","env","NODE_ENV","FORCE_TEST_DATABASE_ID","JEST_WORKER_ID","cwd","fullDbPath","rootDb","databases","getRootDb","Error","globalThis","__GATSBY_OPEN_ROOT_LMDBS","Map","get","open","name","path","compression","set","getDatabases","__GATSBY_OPEN_LMDBS","nodes","openDB","cache","expirer","nodesByType","dupSort","metadata","useVersions","indexes","result","Array","from","type","nodesDb","GatsbyIterable","getKeys","snapshot","map","nodeId","undefined","filter","Boolean","getValues","id","has","asArray","typeName","stats","getStats","Math","max","Number","entryCount","size","getValuesCount","args","GATSBY_EXPERIMENTAL_LMDB_INDEXES","doRunQuery","datastore","Promise","resolve","runFastFiltersAndSort","lastOperationPromise","action","dbs","transactionSync","clearSync","clearIndexes","operationPromise","all","updateNodes","updateNodesByType","delete","payload","add","then","clear","setupLmdbStore","dbPath","replaceReducer","state","emitter","on"],"sources":["../../../src/datastore/lmdb/lmdb-datastore.ts"],"sourcesContent":["import { RootDatabase, open, ArrayLikeIterable } from \"lmdb\"\n// import { performance } from \"perf_hooks\"\nimport { ActionsUnion, IGatsbyNode } from \"../../redux/types\"\nimport { updateNodes } from \"./updates/nodes\"\nimport { updateNodesByType } from \"./updates/nodes-by-type\"\nimport { IDataStore, ILmdbDatabases, IQueryResult } from \"../types\"\nimport { emitter, replaceReducer } from \"../../redux\"\nimport { GatsbyIterable } from \"../common/iterable\"\nimport { doRunQuery } from \"./query/run-query\"\nimport {\n IRunFilterArg,\n runFastFiltersAndSort,\n} from \"../in-memory/run-fast-filters\"\n\nconst lmdbDatastore = {\n getNode,\n getTypes,\n countNodes,\n iterateNodes,\n iterateNodesByType,\n updateDataStore,\n ready,\n runQuery,\n\n // deprecated:\n getNodes,\n getNodesByType,\n}\n\nconst preSyncDeletedNodeIdsCache = new Set()\n\nfunction getDefaultDbPath(): string {\n const dbFileName =\n process.env.NODE_ENV === `test`\n ? `test-datastore-${\n // FORCE_TEST_DATABASE_ID will be set if this gets executed in worker context\n // when running jest tests. JEST_WORKER_ID will be set when this gets executed directly\n // in test context (jest will use jest-worker internally).\n process.env.FORCE_TEST_DATABASE_ID ?? process.env.JEST_WORKER_ID\n }`\n : `datastore`\n\n return process.cwd() + `/.cache/data/` + dbFileName\n}\n\nlet fullDbPath\nlet rootDb\nlet databases\n\n/* eslint-disable @typescript-eslint/no-namespace */\ndeclare global {\n namespace NodeJS {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n interface Global {\n __GATSBY_OPEN_LMDBS?: Map<string, ILmdbDatabases>\n __GATSBY_OPEN_ROOT_LMDBS?: Map<string, RootDatabase>\n }\n }\n}\n\nfunction getRootDb(): RootDatabase {\n if (!rootDb) {\n if (!fullDbPath) {\n throw new Error(`LMDB path is not set!`)\n }\n\n if (!globalThis.__GATSBY_OPEN_ROOT_LMDBS) {\n globalThis.__GATSBY_OPEN_ROOT_LMDBS = new Map()\n }\n rootDb = globalThis.__GATSBY_OPEN_ROOT_LMDBS.get(fullDbPath)\n if (rootDb) {\n return rootDb\n }\n\n rootDb = open({\n name: `root`,\n path: fullDbPath,\n compression: true,\n })\n\n globalThis.__GATSBY_OPEN_ROOT_LMDBS.set(fullDbPath, rootDb)\n }\n return rootDb\n}\n\nfunction getDatabases(): ILmdbDatabases {\n if (!databases) {\n // __GATSBY_OPEN_LMDBS tracks if we already opened given db in this process\n // In `gatsby serve` case we might try to open it twice - once for engines\n // and second to get access to `SitePage` nodes (to power trailing slashes\n // redirect middleware). This ensure there is single instance within a process.\n // Using more instances seems to cause weird random errors.\n if (!globalThis.__GATSBY_OPEN_LMDBS) {\n globalThis.__GATSBY_OPEN_LMDBS = new Map()\n }\n databases = globalThis.__GATSBY_OPEN_LMDBS.get(fullDbPath)\n if (databases) {\n return databases\n }\n\n const rootDb = getRootDb()\n databases = {\n nodes: rootDb.openDB({\n name: `nodes`,\n // FIXME: sharedStructuresKey breaks tests - probably need some cleanup for it on DELETE_CACHE\n // sharedStructuresKey: Symbol.for(`structures`),\n // @ts-ignore\n cache: {\n // expirer: false disables LRU part and only take care of WeakRefs\n // this way we don't retain nodes strongly, but will continue to\n // reuse them if they are loaded already\n expirer: false,\n },\n }),\n nodesByType: rootDb.openDB({\n name: `nodesByType`,\n dupSort: true,\n }),\n metadata: rootDb.openDB({\n name: `metadata`,\n useVersions: true,\n }),\n indexes: rootDb.openDB({\n name: `indexes`,\n // TODO: use dupSort when this is ready: https://github.com/DoctorEvidence/lmdb-store/issues/66\n // dupSort: true\n }),\n }\n globalThis.__GATSBY_OPEN_LMDBS.set(fullDbPath, databases)\n }\n return databases\n}\n\n/**\n * @deprecated\n */\nfunction getNodes(): Array<IGatsbyNode> {\n // const start = performance.now()\n const result = Array.from<IGatsbyNode>(iterateNodes())\n // const timeTotal = performance.now() - start\n // console.warn(\n // `getNodes() is deprecated, use iterateNodes() instead; ` +\n // `array length: ${result.length}; time(ms): ${timeTotal}`\n // )\n return result ?? []\n}\n\n/**\n * @deprecated\n */\nfunction getNodesByType(type: string): Array<IGatsbyNode> {\n // const start = performance.now()\n const result = Array.from<IGatsbyNode>(iterateNodesByType(type))\n // const timeTotal = performance.now() - start\n // console.warn(\n // `getNodesByType() is deprecated, use iterateNodesByType() instead; ` +\n // `array length: ${result.length}; time(ms): ${timeTotal}`\n // )\n return result ?? []\n}\n\nfunction iterateNodes(): GatsbyIterable<IGatsbyNode> {\n // Additionally fetching items by id to leverage lmdb-store cache\n const nodesDb = getDatabases().nodes\n return new GatsbyIterable(\n nodesDb\n .getKeys({ snapshot: false })\n .map(nodeId => (typeof nodeId === `string` ? getNode(nodeId) : undefined))\n .filter(Boolean) as ArrayLikeIterable<IGatsbyNode>\n )\n}\n\nfunction iterateNodesByType(type: string): GatsbyIterable<IGatsbyNode> {\n const nodesByType = getDatabases().nodesByType\n return new GatsbyIterable(\n nodesByType\n .getValues(type)\n .map(nodeId => getNode(nodeId))\n .filter(Boolean) as ArrayLikeIterable<IGatsbyNode>\n )\n}\n\nfunction getNode(id: string): IGatsbyNode | undefined {\n if (!id || preSyncDeletedNodeIdsCache.has(id)) {\n return undefined\n }\n\n const { nodes } = getDatabases()\n return nodes.get(id)\n}\n\nfunction getTypes(): Array<string> {\n return getDatabases().nodesByType.getKeys({}).asArray\n}\n\nfunction countNodes(typeName?: string): number {\n if (!typeName) {\n const stats = getDatabases().nodes.getStats() as { entryCount: number }\n return Math.max(\n Number(stats.entryCount) - preSyncDeletedNodeIdsCache.size,\n 0\n ) // FIXME: add -1 when restoring shared structures key\n }\n\n const { nodesByType } = getDatabases()\n return nodesByType.getValuesCount(typeName)\n}\n\nasync function runQuery(args: IRunFilterArg): Promise<IQueryResult> {\n if (process.env.GATSBY_EXPERIMENTAL_LMDB_INDEXES) {\n return await doRunQuery({\n datastore: lmdbDatastore,\n databases: getDatabases(),\n ...args,\n })\n }\n return Promise.resolve(runFastFiltersAndSort(args))\n}\n\nlet lastOperationPromise: Promise<any> = Promise.resolve()\n\nfunction updateDataStore(action: ActionsUnion): void {\n switch (action.type) {\n case `DELETE_CACHE`: {\n const dbs = getDatabases()\n // Force sync commit\n dbs.nodes.transactionSync(() => {\n dbs.nodes.clearSync()\n dbs.nodesByType.clearSync()\n dbs.metadata.clearSync()\n dbs.indexes.clearSync()\n })\n break\n }\n case `SET_PROGRAM`: {\n // TODO: remove this when we have support for incremental indexes in lmdb\n clearIndexes()\n break\n }\n case `CREATE_NODE`:\n case `DELETE_NODE`:\n case `ADD_FIELD_TO_NODE`:\n case `ADD_CHILD_NODE_TO_PARENT_NODE`:\n case `MATERIALIZE_PAGE_MODE`: {\n const dbs = getDatabases()\n const operationPromise = Promise.all([\n updateNodes(dbs.nodes, action),\n updateNodesByType(dbs.nodesByType, action),\n ])\n lastOperationPromise = operationPromise\n\n // if create is used in the same transaction as delete we should remove it from cache\n if (action.type === `CREATE_NODE`) {\n preSyncDeletedNodeIdsCache.delete(action.payload.id)\n }\n\n if (action.type === `DELETE_NODE` && action.payload?.id) {\n preSyncDeletedNodeIdsCache.add(action.payload.id)\n operationPromise.then(() => {\n // only clear if no other operations have been done in the meantime\n if (lastOperationPromise === operationPromise) {\n preSyncDeletedNodeIdsCache.clear()\n }\n })\n }\n }\n }\n}\n\nfunction clearIndexes(): void {\n const dbs = getDatabases()\n dbs.nodes.transactionSync(() => {\n dbs.metadata.clearSync()\n dbs.indexes.clearSync()\n })\n}\n\n/**\n * Resolves when all the data is synced\n */\nasync function ready(): Promise<void> {\n await lastOperationPromise\n}\n\nexport function setupLmdbStore({\n dbPath = getDefaultDbPath(),\n}: { dbPath?: string } = {}): IDataStore {\n fullDbPath = dbPath\n\n replaceReducer({\n nodes: (state = new Map(), action) =>\n action.type === `DELETE_CACHE` ? new Map() : state,\n nodesByType: (state = new Map(), action) =>\n action.type === `DELETE_CACHE` ? new Map() : state,\n })\n emitter.on(`*`, action => {\n if (action) {\n updateDataStore(action)\n }\n })\n // TODO: remove this when we have support for incremental indexes in lmdb\n clearIndexes()\n return lmdbDatastore\n}\n"],"mappings":"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"}
@@ -74,10 +74,7 @@ class GatsbyCacheLmdb {
74
74
  if (!this.db) {
75
75
  this.db = GatsbyCacheLmdb.getStore().openDB({
76
76
  name: this.name,
77
- encoding: this.encoding,
78
- cache: {
79
- expirer: false
80
- }
77
+ encoding: this.encoding
81
78
  });
82
79
  }
83
80
 
@@ -1 +1 @@
1
- {"version":3,"file":"cache-lmdb.js","names":["cacheDbFile","process","env","NODE_ENV","FORCE_TEST_DATABASE_ID","JEST_WORKER_ID","dbPath","path","join","cwd","getAlreadyOpenedStore","globalThis","__GATSBY_OPEN_ROOT_LMDBS","Map","get","GatsbyCacheLmdb","constructor","name","encoding","directory","cache","init","fs","ensureDirSync","getStore","rootDb","open","compression","maxDbs","set","getDb","db","openDB","expirer","key","value","put","del","remove","resetCache","store","close","delete","emptyDir"],"sources":["../../src/utils/cache-lmdb.ts"],"sourcesContent":["import { open, RootDatabase, Database, DatabaseOptions } from \"lmdb\"\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\n\n// Since the regular GatsbyCache saves to \"caches\" this should be \"caches-lmdb\"\nconst cacheDbFile =\n process.env.NODE_ENV === `test`\n ? `caches-lmdb-${\n // FORCE_TEST_DATABASE_ID will be set if this gets executed in worker context\n // when running jest tests. JEST_WORKER_ID will be set when this gets executed directly\n // in test context (jest will use jest-worker internally).\n process.env.FORCE_TEST_DATABASE_ID ?? process.env.JEST_WORKER_ID\n }`\n : `caches-lmdb`\n\nconst dbPath = path.join(process.cwd(), `.cache/${cacheDbFile}`)\n\nfunction getAlreadyOpenedStore(): RootDatabase | undefined {\n if (!globalThis.__GATSBY_OPEN_ROOT_LMDBS) {\n globalThis.__GATSBY_OPEN_ROOT_LMDBS = new Map()\n }\n return globalThis.__GATSBY_OPEN_ROOT_LMDBS.get(dbPath)\n}\n\nexport default class GatsbyCacheLmdb {\n private db: Database | undefined\n private encoding: DatabaseOptions[\"encoding\"]\n public readonly name: string\n // Needed for plugins that want to write data to the cache directory\n public readonly directory: string\n // TODO: remove `.cache` in v4. This is compat mode - cache-manager cache implementation\n // expose internal cache that gives access to `.del` function that wasn't available in public\n // cache interface (gatsby-plugin-sharp use it to clear no longer needed data)\n public readonly cache: GatsbyCacheLmdb\n\n constructor({\n name = `db`,\n encoding = `json`,\n }: {\n name: string\n encoding?: DatabaseOptions[\"encoding\"]\n }) {\n this.name = name\n this.encoding = encoding\n this.directory = path.join(process.cwd(), `.cache/caches/${name}`)\n this.cache = this\n }\n\n init(): GatsbyCacheLmdb {\n fs.ensureDirSync(this.directory)\n return this\n }\n\n private static getStore(): RootDatabase {\n let rootDb = getAlreadyOpenedStore()\n if (rootDb) {\n return rootDb\n }\n\n rootDb = open({\n name: `root`,\n path: dbPath,\n compression: true,\n maxDbs: 200,\n })\n\n globalThis.__GATSBY_OPEN_ROOT_LMDBS.set(dbPath, rootDb)\n\n return rootDb\n }\n\n private getDb(): Database {\n if (!this.db) {\n this.db = GatsbyCacheLmdb.getStore().openDB({\n name: this.name,\n encoding: this.encoding,\n cache: {\n expirer: false,\n },\n })\n }\n return this.db\n }\n\n async get<T = unknown>(key): Promise<T | undefined> {\n return this.getDb().get(key)\n }\n\n async set<T>(key: string, value: T): Promise<T | undefined> {\n await this.getDb().put(key, value)\n return value\n }\n\n async del(key: string): Promise<void> {\n return this.getDb().remove(key) as unknown as Promise<void>\n }\n}\n\nexport async function resetCache(): Promise<void> {\n const store = getAlreadyOpenedStore()\n if (store) {\n await store.close()\n globalThis.__GATSBY_OPEN_ROOT_LMDBS.delete(dbPath)\n }\n\n await fs.emptyDir(dbPath)\n}\n"],"mappings":";;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA;AACA,MAAMA,WAAW,GACfC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAA0B,MAA1B,GACK,eACC;AACA;AACA;AAHF,yBAIEF,OAAO,CAACC,GAAR,CAAYE,sBAJd,yEAIwCH,OAAO,CAACC,GAAR,CAAYG,cACnD,EANL,GAOK,aARP;AAUA,MAAMC,MAAM,GAAGC,IAAI,CAACC,IAAL,CAAUP,OAAO,CAACQ,GAAR,EAAV,EAA0B,UAAST,WAAY,EAA/C,CAAf;;AAEA,SAASU,qBAAT,GAA2D;EACzD,IAAI,CAACC,UAAU,CAACC,wBAAhB,EAA0C;IACxCD,UAAU,CAACC,wBAAX,GAAsC,IAAIC,GAAJ,EAAtC;EACD;;EACD,OAAOF,UAAU,CAACC,wBAAX,CAAoCE,GAApC,CAAwCR,MAAxC,CAAP;AACD;;AAEc,MAAMS,eAAN,CAAsB;EAInC;EAEA;EACA;EACA;EAGAC,WAAW,CAAC;IACVC,IAAI,GAAI,IADE;IAEVC,QAAQ,GAAI;EAFF,CAAD,EAMR;IACD,KAAKD,IAAL,GAAYA,IAAZ;IACA,KAAKC,QAAL,GAAgBA,QAAhB;IACA,KAAKC,SAAL,GAAiBZ,IAAI,CAACC,IAAL,CAAUP,OAAO,CAACQ,GAAR,EAAV,EAA0B,iBAAgBQ,IAAK,EAA/C,CAAjB;IACA,KAAKG,KAAL,GAAa,IAAb;EACD;;EAEDC,IAAI,GAAoB;IACtBC,EAAE,CAACC,aAAH,CAAiB,KAAKJ,SAAtB;IACA,OAAO,IAAP;EACD;;EAEsB,OAARK,QAAQ,GAAiB;IACtC,IAAIC,MAAM,GAAGf,qBAAqB,EAAlC;;IACA,IAAIe,MAAJ,EAAY;MACV,OAAOA,MAAP;IACD;;IAEDA,MAAM,GAAG,IAAAC,UAAA,EAAK;MACZT,IAAI,EAAG,MADK;MAEZV,IAAI,EAAED,MAFM;MAGZqB,WAAW,EAAE,IAHD;MAIZC,MAAM,EAAE;IAJI,CAAL,CAAT;;IAOAjB,UAAU,CAACC,wBAAX,CAAoCiB,GAApC,CAAwCvB,MAAxC,EAAgDmB,MAAhD;;IAEA,OAAOA,MAAP;EACD;;EAEOK,KAAK,GAAa;IACxB,IAAI,CAAC,KAAKC,EAAV,EAAc;MACZ,KAAKA,EAAL,GAAUhB,eAAe,CAACS,QAAhB,GAA2BQ,MAA3B,CAAkC;QAC1Cf,IAAI,EAAE,KAAKA,IAD+B;QAE1CC,QAAQ,EAAE,KAAKA,QAF2B;QAG1CE,KAAK,EAAE;UACLa,OAAO,EAAE;QADJ;MAHmC,CAAlC,CAAV;IAOD;;IACD,OAAO,KAAKF,EAAZ;EACD;;EAEQ,MAAHjB,GAAG,CAAcoB,GAAd,EAA2C;IAClD,OAAO,KAAKJ,KAAL,GAAahB,GAAb,CAAiBoB,GAAjB,CAAP;EACD;;EAEQ,MAAHL,GAAG,CAAIK,GAAJ,EAAiBC,KAAjB,EAAmD;IAC1D,MAAM,KAAKL,KAAL,GAAaM,GAAb,CAAiBF,GAAjB,EAAsBC,KAAtB,CAAN;IACA,OAAOA,KAAP;EACD;;EAEQ,MAAHE,GAAG,CAACH,GAAD,EAA6B;IACpC,OAAO,KAAKJ,KAAL,GAAaQ,MAAb,CAAoBJ,GAApB,CAAP;EACD;;AAvEkC;;;;AA0E9B,eAAeK,UAAf,GAA2C;EAChD,MAAMC,KAAK,GAAG9B,qBAAqB,EAAnC;;EACA,IAAI8B,KAAJ,EAAW;IACT,MAAMA,KAAK,CAACC,KAAN,EAAN;;IACA9B,UAAU,CAACC,wBAAX,CAAoC8B,MAApC,CAA2CpC,MAA3C;EACD;;EAED,MAAMgB,EAAE,CAACqB,QAAH,CAAYrC,MAAZ,CAAN;AACD"}
1
+ {"version":3,"file":"cache-lmdb.js","names":["cacheDbFile","process","env","NODE_ENV","FORCE_TEST_DATABASE_ID","JEST_WORKER_ID","dbPath","path","join","cwd","getAlreadyOpenedStore","globalThis","__GATSBY_OPEN_ROOT_LMDBS","Map","get","GatsbyCacheLmdb","constructor","name","encoding","directory","cache","init","fs","ensureDirSync","getStore","rootDb","open","compression","maxDbs","set","getDb","db","openDB","key","value","put","del","remove","resetCache","store","close","delete","emptyDir"],"sources":["../../src/utils/cache-lmdb.ts"],"sourcesContent":["import { open, RootDatabase, Database, DatabaseOptions } from \"lmdb\"\nimport * as fs from \"fs-extra\"\nimport * as path from \"path\"\n\n// Since the regular GatsbyCache saves to \"caches\" this should be \"caches-lmdb\"\nconst cacheDbFile =\n process.env.NODE_ENV === `test`\n ? `caches-lmdb-${\n // FORCE_TEST_DATABASE_ID will be set if this gets executed in worker context\n // when running jest tests. JEST_WORKER_ID will be set when this gets executed directly\n // in test context (jest will use jest-worker internally).\n process.env.FORCE_TEST_DATABASE_ID ?? process.env.JEST_WORKER_ID\n }`\n : `caches-lmdb`\n\nconst dbPath = path.join(process.cwd(), `.cache/${cacheDbFile}`)\n\nfunction getAlreadyOpenedStore(): RootDatabase | undefined {\n if (!globalThis.__GATSBY_OPEN_ROOT_LMDBS) {\n globalThis.__GATSBY_OPEN_ROOT_LMDBS = new Map()\n }\n return globalThis.__GATSBY_OPEN_ROOT_LMDBS.get(dbPath)\n}\n\nexport default class GatsbyCacheLmdb {\n private db: Database | undefined\n private encoding: DatabaseOptions[\"encoding\"]\n public readonly name: string\n // Needed for plugins that want to write data to the cache directory\n public readonly directory: string\n // TODO: remove `.cache` in v4. This is compat mode - cache-manager cache implementation\n // expose internal cache that gives access to `.del` function that wasn't available in public\n // cache interface (gatsby-plugin-sharp use it to clear no longer needed data)\n public readonly cache: GatsbyCacheLmdb\n\n constructor({\n name = `db`,\n encoding = `json`,\n }: {\n name: string\n encoding?: DatabaseOptions[\"encoding\"]\n }) {\n this.name = name\n this.encoding = encoding\n this.directory = path.join(process.cwd(), `.cache/caches/${name}`)\n this.cache = this\n }\n\n init(): GatsbyCacheLmdb {\n fs.ensureDirSync(this.directory)\n return this\n }\n\n private static getStore(): RootDatabase {\n let rootDb = getAlreadyOpenedStore()\n if (rootDb) {\n return rootDb\n }\n\n rootDb = open({\n name: `root`,\n path: dbPath,\n compression: true,\n maxDbs: 200,\n })\n\n globalThis.__GATSBY_OPEN_ROOT_LMDBS.set(dbPath, rootDb)\n\n return rootDb\n }\n\n private getDb(): Database {\n if (!this.db) {\n this.db = GatsbyCacheLmdb.getStore().openDB({\n name: this.name,\n encoding: this.encoding,\n })\n }\n return this.db\n }\n\n async get<T = unknown>(key): Promise<T | undefined> {\n return this.getDb().get(key)\n }\n\n async set<T>(key: string, value: T): Promise<T | undefined> {\n await this.getDb().put(key, value)\n return value\n }\n\n async del(key: string): Promise<void> {\n return this.getDb().remove(key) as unknown as Promise<void>\n }\n}\n\nexport async function resetCache(): Promise<void> {\n const store = getAlreadyOpenedStore()\n if (store) {\n await store.close()\n globalThis.__GATSBY_OPEN_ROOT_LMDBS.delete(dbPath)\n }\n\n await fs.emptyDir(dbPath)\n}\n"],"mappings":";;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA;AACA,MAAMA,WAAW,GACfC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAA0B,MAA1B,GACK,eACC;AACA;AACA;AAHF,yBAIEF,OAAO,CAACC,GAAR,CAAYE,sBAJd,yEAIwCH,OAAO,CAACC,GAAR,CAAYG,cACnD,EANL,GAOK,aARP;AAUA,MAAMC,MAAM,GAAGC,IAAI,CAACC,IAAL,CAAUP,OAAO,CAACQ,GAAR,EAAV,EAA0B,UAAST,WAAY,EAA/C,CAAf;;AAEA,SAASU,qBAAT,GAA2D;EACzD,IAAI,CAACC,UAAU,CAACC,wBAAhB,EAA0C;IACxCD,UAAU,CAACC,wBAAX,GAAsC,IAAIC,GAAJ,EAAtC;EACD;;EACD,OAAOF,UAAU,CAACC,wBAAX,CAAoCE,GAApC,CAAwCR,MAAxC,CAAP;AACD;;AAEc,MAAMS,eAAN,CAAsB;EAInC;EAEA;EACA;EACA;EAGAC,WAAW,CAAC;IACVC,IAAI,GAAI,IADE;IAEVC,QAAQ,GAAI;EAFF,CAAD,EAMR;IACD,KAAKD,IAAL,GAAYA,IAAZ;IACA,KAAKC,QAAL,GAAgBA,QAAhB;IACA,KAAKC,SAAL,GAAiBZ,IAAI,CAACC,IAAL,CAAUP,OAAO,CAACQ,GAAR,EAAV,EAA0B,iBAAgBQ,IAAK,EAA/C,CAAjB;IACA,KAAKG,KAAL,GAAa,IAAb;EACD;;EAEDC,IAAI,GAAoB;IACtBC,EAAE,CAACC,aAAH,CAAiB,KAAKJ,SAAtB;IACA,OAAO,IAAP;EACD;;EAEsB,OAARK,QAAQ,GAAiB;IACtC,IAAIC,MAAM,GAAGf,qBAAqB,EAAlC;;IACA,IAAIe,MAAJ,EAAY;MACV,OAAOA,MAAP;IACD;;IAEDA,MAAM,GAAG,IAAAC,UAAA,EAAK;MACZT,IAAI,EAAG,MADK;MAEZV,IAAI,EAAED,MAFM;MAGZqB,WAAW,EAAE,IAHD;MAIZC,MAAM,EAAE;IAJI,CAAL,CAAT;;IAOAjB,UAAU,CAACC,wBAAX,CAAoCiB,GAApC,CAAwCvB,MAAxC,EAAgDmB,MAAhD;;IAEA,OAAOA,MAAP;EACD;;EAEOK,KAAK,GAAa;IACxB,IAAI,CAAC,KAAKC,EAAV,EAAc;MACZ,KAAKA,EAAL,GAAUhB,eAAe,CAACS,QAAhB,GAA2BQ,MAA3B,CAAkC;QAC1Cf,IAAI,EAAE,KAAKA,IAD+B;QAE1CC,QAAQ,EAAE,KAAKA;MAF2B,CAAlC,CAAV;IAID;;IACD,OAAO,KAAKa,EAAZ;EACD;;EAEQ,MAAHjB,GAAG,CAAcmB,GAAd,EAA2C;IAClD,OAAO,KAAKH,KAAL,GAAahB,GAAb,CAAiBmB,GAAjB,CAAP;EACD;;EAEQ,MAAHJ,GAAG,CAAII,GAAJ,EAAiBC,KAAjB,EAAmD;IAC1D,MAAM,KAAKJ,KAAL,GAAaK,GAAb,CAAiBF,GAAjB,EAAsBC,KAAtB,CAAN;IACA,OAAOA,KAAP;EACD;;EAEQ,MAAHE,GAAG,CAACH,GAAD,EAA6B;IACpC,OAAO,KAAKH,KAAL,GAAaO,MAAb,CAAoBJ,GAApB,CAAP;EACD;;AApEkC;;;;AAuE9B,eAAeK,UAAf,GAA2C;EAChD,MAAMC,KAAK,GAAG7B,qBAAqB,EAAnC;;EACA,IAAI6B,KAAJ,EAAW;IACT,MAAMA,KAAK,CAACC,KAAN,EAAN;;IACA7B,UAAU,CAACC,wBAAX,CAAoC6B,MAApC,CAA2CnC,MAA3C;EACD;;EAED,MAAMgB,EAAE,CAACoB,QAAH,CAAYpC,MAAZ,CAAN;AACD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gatsby",
3
3
  "description": "Blazing fast modern site generator for React",
4
- "version": "5.3.0",
4
+ "version": "5.3.1",
5
5
  "author": "Kyle Mathews <mathews.kyle@gmail.com>",
6
6
  "bin": {
7
7
  "gatsby": "./cli.js"
@@ -48,8 +48,8 @@
48
48
  "babel-plugin-add-module-exports": "^1.0.4",
49
49
  "babel-plugin-dynamic-import-node": "^2.3.3",
50
50
  "babel-plugin-lodash": "^3.3.4",
51
- "babel-plugin-remove-graphql-queries": "^5.3.0",
52
- "babel-preset-gatsby": "^3.3.0",
51
+ "babel-plugin-remove-graphql-queries": "^5.3.1",
52
+ "babel-preset-gatsby": "^3.3.1",
53
53
  "better-opn": "^2.1.1",
54
54
  "bluebird": "^3.7.2",
55
55
  "browserslist": "^4.17.5",
@@ -90,19 +90,19 @@
90
90
  "find-cache-dir": "^3.3.2",
91
91
  "fs-exists-cached": "1.0.0",
92
92
  "fs-extra": "^10.1.0",
93
- "gatsby-cli": "^5.3.0",
94
- "gatsby-core-utils": "^4.3.0",
93
+ "gatsby-cli": "^5.3.1",
94
+ "gatsby-core-utils": "^4.3.1",
95
95
  "gatsby-graphiql-explorer": "^3.3.0",
96
96
  "gatsby-legacy-polyfills": "^3.3.0",
97
- "gatsby-link": "^5.3.0",
98
- "gatsby-page-utils": "^3.3.0",
99
- "gatsby-parcel-config": "^1.3.0",
100
- "gatsby-plugin-page-creator": "^5.3.0",
101
- "gatsby-plugin-typescript": "^5.3.0",
102
- "gatsby-plugin-utils": "^4.3.0",
97
+ "gatsby-link": "^5.3.1",
98
+ "gatsby-page-utils": "^3.3.1",
99
+ "gatsby-parcel-config": "1.3.1",
100
+ "gatsby-plugin-page-creator": "^5.3.1",
101
+ "gatsby-plugin-typescript": "^5.3.1",
102
+ "gatsby-plugin-utils": "^4.3.1",
103
103
  "gatsby-react-router-scroll": "^6.3.0",
104
104
  "gatsby-script": "^2.3.0",
105
- "gatsby-telemetry": "^4.3.0",
105
+ "gatsby-telemetry": "^4.3.1",
106
106
  "gatsby-worker": "^2.3.0",
107
107
  "glob": "^7.2.3",
108
108
  "globby": "^11.1.0",
@@ -118,7 +118,7 @@
118
118
  "joi": "^17.4.2",
119
119
  "json-loader": "^0.5.7",
120
120
  "latest-version": "^7.0.0",
121
- "lmdb": "2.7.1",
121
+ "lmdb": "2.5.3",
122
122
  "lodash": "^4.17.21",
123
123
  "md5-file": "^5.0.0",
124
124
  "meant": "^1.0.3",
@@ -277,5 +277,5 @@
277
277
  "yargs": {
278
278
  "boolean-negation": false
279
279
  },
280
- "gitHead": "b995fc2374435dd1e282a167975733a1ff3d6ad0"
280
+ "gitHead": "287cabd221034391fb0874c39677a0263d791e9c"
281
281
  }