temba 0.45.1 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,UAAU,CAAA;AAmB5D,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,WAyEjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,UAAU,CAAA;AAqB5D,KAAK,UAAU,GAAG;IAIhB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,WAqGjE"}
@@ -1,5 +1,7 @@
1
1
  import { Low, Memory } from 'lowdb';
2
2
  import { JSONFile } from 'lowdb/node';
3
+ import { promises as fs } from 'node:fs';
4
+ import { join } from 'node:path';
3
5
  const getInMemoryDb = (defaultData) => {
4
6
  return getJsonDb(new Memory(), defaultData);
5
7
  };
@@ -12,54 +14,81 @@ const getJsonDb = async (adapter, defaultData) => {
12
14
  return db;
13
15
  };
14
16
  export default function createJsonQueries({ filename }) {
15
- const defaultData = {};
16
- async function getDb() {
17
- const db = filename ? await getFileDb(filename, defaultData) : await getInMemoryDb(defaultData);
17
+ const mode = filename == null ? 'memory' : filename.toLowerCase().endsWith('.json') ? 'single' : 'dir';
18
+ const defaultAllData = {};
19
+ let sharedDb = null;
20
+ const getSharedDb = () => {
21
+ if (!sharedDb) {
22
+ sharedDb =
23
+ mode === 'memory'
24
+ ? getInMemoryDb(defaultAllData)
25
+ : getFileDb(filename, defaultAllData);
26
+ }
27
+ return sharedDb;
28
+ };
29
+ const resourceDbs = new Map();
30
+ let ensuredDir = false;
31
+ const ensureDir = async () => {
32
+ if (ensuredDir)
33
+ return;
34
+ await fs.mkdir(filename, { recursive: true });
35
+ ensuredDir = true;
36
+ };
37
+ const getResourceDb = (resource) => {
38
+ let db = resourceDbs.get(resource);
39
+ if (!db) {
40
+ const defaultData = { [resource]: [] };
41
+ db = (async () => {
42
+ await ensureDir();
43
+ const file = join(filename, `${resource}.json`);
44
+ return await getFileDb(file, defaultData);
45
+ })();
46
+ resourceDbs.set(resource, db);
47
+ }
18
48
  return db;
19
- }
49
+ };
50
+ const readAll = async (resource) => {
51
+ const db = mode === 'dir' ? await getResourceDb(resource) : await getSharedDb();
52
+ return db.data[resource] || [];
53
+ };
54
+ const writeAll = async (resource, next) => {
55
+ const db = mode === 'dir' ? await getResourceDb(resource) : await getSharedDb();
56
+ await db.update((data) => {
57
+ data[resource] = next;
58
+ });
59
+ };
20
60
  async function getAll(resource) {
21
- const db = await getDb();
22
- const data = db.data[resource] || [];
23
- return data;
61
+ return await readAll(resource);
24
62
  }
25
63
  async function getById(resource, id) {
26
- const db = await getDb();
27
- const data = db.data[resource] || [];
28
- return (data || []).find((x) => x.id === id) || null;
64
+ const data = await readAll(resource);
65
+ return data.find((x) => x.id === id) || null;
29
66
  }
30
67
  async function create(resource, id, item) {
31
- const db = await getDb();
68
+ const data = await readAll(resource);
32
69
  const itemWithId = {
33
70
  ...item,
34
71
  id: id || String(new Date().getTime()),
35
72
  };
36
- await db.update((data) => {
37
- data[resource] = [...(data[resource] || []), itemWithId];
38
- });
73
+ await writeAll(resource, [...data, itemWithId]);
39
74
  return itemWithId;
40
75
  }
41
76
  async function update(resource, item) {
42
- const updatedItem = { ...item };
43
- const db = await getDb();
44
- await db.update((data) => {
45
- data[resource] = [...(data[resource] || []).filter((r) => r.id !== item.id), updatedItem];
46
- });
47
- return updatedItem;
77
+ const data = await readAll(resource);
78
+ const next = [...data.filter((r) => r.id !== item.id), { ...item }];
79
+ await writeAll(resource, next);
80
+ return next.find((r) => r.id === item.id);
48
81
  }
49
82
  async function replace(resource, item) {
50
83
  return update(resource, item);
51
84
  }
52
85
  async function deleteById(resource, id) {
53
- const db = await getDb();
54
- await db.update((data) => {
55
- data[resource] = [...(data[resource] || []).filter((r) => r.id !== id)];
56
- });
86
+ const data = await readAll(resource);
87
+ const next = data.filter((r) => r.id !== id);
88
+ await writeAll(resource, next);
57
89
  }
58
90
  async function deleteAll(resource) {
59
- const db = await getDb();
60
- await db.update((data) => {
61
- data[resource] = [];
62
- });
91
+ await writeAll(resource, []);
63
92
  }
64
93
  const fileQueries = {
65
94
  getAll,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/json/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/json/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/data/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAI3C,eAAO,MAAM,aAAa,GAAI,kBAAkB,MAAM,GAAG,IAAI,EAAE,KAAK,MAAM,8BASzE,CAAA"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/data/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAI3C,eAAO,MAAM,aAAa,GAAI,kBAAkB,MAAM,GAAG,IAAI,EAAE,KAAK,MAAM,8BAazE,CAAA"}
package/data/queries.js CHANGED
@@ -3,10 +3,13 @@ import { createMongoQueries } from './mongo/index.js';
3
3
  export const createQueries = (connectionString, log) => {
4
4
  if (process.env.NODE_ENV === 'test' || !connectionString)
5
5
  return createJsonQueries({ filename: null });
6
- if (connectionString.endsWith('.json'))
7
- return createJsonQueries({ filename: connectionString });
6
+ // MongoDB
8
7
  if (connectionString.startsWith('mongodb'))
9
8
  return createMongoQueries(connectionString, log);
9
+ // Single JSON file or a folder with per-resource JSON files
10
+ if (connectionString.endsWith('.json') || /^[a-zA-Z0-9_-]+$/.test(connectionString))
11
+ return createJsonQueries({ filename: connectionString });
12
+ log.warn('Unknown connection string, defaulting to in-memory DB');
10
13
  return createJsonQueries({ filename: null });
11
14
  };
12
15
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/data/queries.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,gBAA+B,EAAE,GAAW,EAAE,EAAE;IAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,gBAAgB;QACtD,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAEhG,IAAI,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,kBAAkB,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;IAE5F,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9C,CAAC,CAAA"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/data/queries.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,gBAA+B,EAAE,GAAW,EAAE,EAAE;IAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,gBAAgB;QACtD,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9C,UAAU;IACV,IAAI,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,kBAAkB,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;IAE5F,4DAA4D;IAC5D,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACjF,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAE1D,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;IACjE,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9C,CAAC,CAAA"}
package/log/logger.d.ts CHANGED
@@ -1,10 +1,16 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
- type LogLevel = 'debug' | 'info' | 'error';
2
+ declare const logLevels: {
3
+ readonly debug: 0;
4
+ readonly info: 1;
5
+ readonly warn: 2;
6
+ readonly error: 3;
7
+ };
8
+ type LogLevel = keyof typeof logLevels;
3
9
  export type Logger = Record<LogLevel, (...data: unknown[]) => void>;
4
- export declare const initLogger: (configuredLogLevel: string | undefined) => {
5
- logLevel: LogLevel;
10
+ export declare const initLogger: (configured: string | undefined) => {
11
+ logLevel: "error" | "debug" | "info" | "warn";
6
12
  log: Logger;
7
13
  };
8
- export declare const getHttpLogger: (logLevel: LogLevel) => (_: IncomingMessage, __: ServerResponse<IncomingMessage>, next: (err?: unknown) => void) => void;
14
+ export declare const getHttpLogger: (logLevel: LogLevel) => (_: IncomingMessage, __: ServerResponse, next: (err?: unknown) => void) => void;
9
15
  export {};
10
16
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/log/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhE,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;AAQ1C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAA;AA2BnE,eAAO,MAAM,UAAU,GAAI,oBAAoB,MAAM,GAAG,SAAS;;;CAWhE,CAAA;AAQD,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,SAL3C,eAAe,MACd,cAAc,CAAC,eAAe,CAAC,QAC7B,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,SAO9B,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/log/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhE,QAAA,MAAM,SAAS;;;;;CAAoD,CAAA;AACnE,KAAK,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAA;AACtC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAA;AAoBnE,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,GAAG,SAAS;;;CAKxD,CAAA;AAID,eAAO,MAAM,aAAa,GAAI,UAAU,QAAQ,SAF/B,eAAe,MAAM,cAAc,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,SAKzE,CAAA"}
package/log/logger.js CHANGED
@@ -1,43 +1,28 @@
1
1
  import morgan from 'morgan';
2
- const logLevels = {
3
- debug: 0,
4
- info: 1,
5
- error: 2,
6
- };
7
- const createLogger = (logLevel) => {
2
+ const logLevels = { debug: 0, info: 1, warn: 2, error: 3 };
3
+ const levels = Object.keys(logLevels);
4
+ const createLogger = (minLevel) => {
8
5
  const log = (level, ...data) => {
9
- // Only log when the level is at least as high as the configured log level
10
- if (logLevels[level] >= logLevels[logLevel]) {
11
- try {
12
- console[level](`${new Date().toISOString()} ${level.toUpperCase().padEnd(6, ' ')}- ${data.join(' ')}`);
13
- }
14
- catch {
15
- // swallow exceptions during logging
16
- }
6
+ if (logLevels[level] < logLevels[minLevel])
7
+ return;
8
+ try {
9
+ console[level](`${new Date().toISOString()} ${level.toUpperCase().padEnd(6)}- ${data.join(' ')}`);
10
+ }
11
+ catch {
12
+ // Swallow exceptions caused by logging itself
17
13
  }
18
14
  };
19
- return {
20
- debug: (...data) => log('debug', ...data),
21
- info: (...data) => log('info', ...data),
22
- error: (...data) => log('error', ...data),
23
- };
15
+ return Object.fromEntries(levels.map((l) => [l, (...d) => log(l, ...d)]));
24
16
  };
25
- const isInvalid = (value) => {
26
- return !value || !Object.keys(logLevels).includes(value);
27
- };
28
- export const initLogger = (configuredLogLevel) => {
29
- const logLevel = isInvalid(configuredLogLevel) ? 'debug' : configuredLogLevel;
17
+ const isLogLevel = (v) => !!v && v in logLevels;
18
+ export const initLogger = (configured) => {
19
+ const logLevel = isLogLevel(configured) ? configured : 'debug';
30
20
  const log = createLogger(logLevel);
31
21
  log.debug('Logger initialized');
32
- return {
33
- logLevel,
34
- log,
35
- };
36
- };
37
- const noopHandler = (_, __, next) => next();
38
- export const getHttpLogger = (logLevel) => {
39
- return logLevel === 'debug'
40
- ? morgan(':date[iso] DEBUG - :method :url :status :res[content-length] - :response-time ms')
41
- : noopHandler;
22
+ return { logLevel, log };
42
23
  };
24
+ const noop = (_, __, next) => next();
25
+ export const getHttpLogger = (logLevel) => logLevel === 'debug'
26
+ ? morgan(':date[iso] DEBUG - :method :url :status :res[content-length] - :response-time ms')
27
+ : noop;
43
28
  //# sourceMappingURL=logger.js.map
package/log/logger.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/log/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAI3B,MAAM,SAAS,GAA6B;IAC1C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAA;AAID,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAE,EAAE;IAC1C,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAClD,0EAA0E;QAC1E,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CACZ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACvF,CAAA;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QACpD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QAClD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;KAC3C,CAAA;AACb,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAW,EAAE;IACvD,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,kBAAsC,EAAE,EAAE;IACnE,MAAM,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,kBAA+B,CAAA;IAE3F,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAElC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAE/B,OAAO;QACL,QAAQ;QACR,GAAG;KACJ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAClB,CAAkB,EAClB,EAAmC,EACnC,IAA6B,EAC7B,EAAE,CAAC,IAAI,EAAE,CAAA;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,EAAE;IAClD,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,MAAM,CAAC,kFAAkF,CAAC;QAC5F,CAAC,CAAC,WAAW,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/log/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAW,CAAA;AAInE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAe,CAAA;AAEnD,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAU,EAAE;IAClD,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAClD,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC;YAAE,OAAM;QAClD,IAAI,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,CACZ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAClF,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAY,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAA;AAChG,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,CAAqB,EAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;AAElF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAA8B,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAA;IAC9D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAClC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC/B,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,CAAkB,EAAE,EAAkB,EAAE,IAA6B,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;AAE9F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAE,EAAE,CAClD,QAAQ,KAAK,OAAO;IAClB,CAAC,CAAC,MAAM,CAAC,kFAAkF,CAAC;IAC5F,CAAC,CAAC,IAAI,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "temba",
3
- "version": "0.45.1",
3
+ "version": "0.46.0",
4
4
  "description": "Create a simple REST API with zero coding in less than 30 seconds (seriously).",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
package/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = 'v0.45.1'
1
+ export const version = 'v0.46.0'
2
2