@forge/sql 2.2.3 → 2.3.0-next.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.
@@ -38,25 +38,25 @@ describe('Migration', () => {
38
38
  describe('list', () => {
39
39
  it('should list all previously migrations', async () => {
40
40
  const migratedAtDate = new Date();
41
- mockSqlClient.executeRaw.mockResolvedValueOnce({
41
+ mockSqlClient.executeDDL.mockResolvedValueOnce({
42
42
  rows: [{ id: 1, name: 'create-table-test', migratedAt: migratedAtDate }]
43
43
  });
44
44
  const migrations = await migrationRunner.list();
45
45
  expect(migrations.length).toBe(1);
46
46
  expect(migrations[0]).toEqual({ id: 1, name: 'create-table-test', migratedAt: migratedAtDate });
47
- expect(mockSqlClient.executeRaw).toHaveBeenCalledWith('SELECT id, name, migratedAt FROM __migrations;');
47
+ expect(mockSqlClient.executeDDL).toHaveBeenCalledWith('SELECT id, name, migratedAt FROM __migrations;');
48
48
  });
49
49
  it('should be empty when no previous migrations exist', async () => {
50
- mockSqlClient.executeRaw.mockResolvedValueOnce({
50
+ mockSqlClient.executeDDL.mockResolvedValueOnce({
51
51
  rows: []
52
52
  });
53
53
  const migrations = await migrationRunner.list();
54
54
  expect(migrations.length).toBe(0);
55
- expect(mockSqlClient.executeRaw).toHaveBeenCalledWith('SELECT id, name, migratedAt FROM __migrations;');
55
+ expect(mockSqlClient.executeDDL).toHaveBeenCalledWith('SELECT id, name, migratedAt FROM __migrations;');
56
56
  });
57
57
  it('should raise an error when schema version table does not exist', async () => {
58
58
  const tableDoesNotExistError = new Error(errorCodes_1.errorCodes.SQL_EXECUTION_ERROR);
59
- mockSqlClient.executeRaw.mockRejectedValue(tableDoesNotExistError);
59
+ mockSqlClient.executeDDL.mockRejectedValue(tableDoesNotExistError);
60
60
  await expect(migrationRunner.list()).rejects.toThrow(tableDoesNotExistError);
61
61
  });
62
62
  });
@@ -72,10 +72,10 @@ describe('Migration', () => {
72
72
  it('should execute migrations that have not been previously run', async () => {
73
73
  migrationRunner.enqueue('v_001_create_table_foo', CREATE_TABLE_FOO_QUERY);
74
74
  migrationRunner.enqueue('v_002_create_table_bar', CREATE_TABLE_BAR_QUERY);
75
- (0, jest_when_1.when)(mockSqlClient.executeRaw)
75
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
76
76
  .calledWith((0, jest_when_1.when)((arg) => arg.startsWith('CREATE TABLE IF NOT EXISTS __migrations')))
77
77
  .mockResolvedValue({ rows: [] });
78
- (0, jest_when_1.when)(mockSqlClient.executeRaw)
78
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
79
79
  .calledWith('SELECT id, name, migratedAt FROM __migrations;')
80
80
  .mockResolvedValue({
81
81
  rows: [{ name: 'v_001_create_table_foo', statement: CREATE_TABLE_FOO_QUERY, migratedAt: new Date() }]
@@ -90,7 +90,7 @@ describe('Migration', () => {
90
90
  const result = await migrationRunner.run();
91
91
  expect(result).toEqual(['v_002_create_table_bar']);
92
92
  expect(mockSqlClient.prepare).toHaveBeenCalledTimes(1);
93
- expect(mockSqlClient.executeRaw).toHaveBeenCalledTimes(3);
93
+ expect(mockSqlClient.executeDDL).toHaveBeenCalledTimes(3);
94
94
  });
95
95
  });
96
96
  describe('when no migrations have been run in the past', () => {
@@ -98,10 +98,10 @@ describe('Migration', () => {
98
98
  const CREATE_TABLE_FOO_QUERY = 'CREATE TABLE IF NOT EXISTS foo (id INT)';
99
99
  migrationRunner.enqueue('v_001_create_table_foo', CREATE_TABLE_FOO_QUERY);
100
100
  migrationRunner.enqueue('v_002_create_table_bar', 'CREATE TABLE IF NOT EXISTS bar (id INT)');
101
- (0, jest_when_1.when)(mockSqlClient.executeRaw).calledWith('SELECT id, name, migratedAt FROM __migrations;').mockResolvedValue({
101
+ (0, jest_when_1.when)(mockSqlClient.executeDDL).calledWith('SELECT id, name, migratedAt FROM __migrations;').mockResolvedValue({
102
102
  rows: []
103
103
  });
104
- (0, jest_when_1.when)(mockSqlClient.executeRaw)
104
+ (0, jest_when_1.when)(mockSqlClient.executeDDL)
105
105
  .calledWith((0, jest_when_1.when)((arg) => arg.startsWith('CREATE TABLE IF NOT EXISTS __migrations')))
106
106
  .mockResolvedValue({ rows: [] });
107
107
  const mockApiCall = jest.fn();
@@ -114,7 +114,7 @@ describe('Migration', () => {
114
114
  const result = await migrationRunner.run();
115
115
  expect(result).toEqual(['v_001_create_table_foo', 'v_002_create_table_bar']);
116
116
  expect(mockSqlClient.prepare).toHaveBeenCalledTimes(2);
117
- expect(mockSqlClient.executeRaw).toHaveBeenCalledTimes(4);
117
+ expect(mockSqlClient.executeDDL).toHaveBeenCalledTimes(4);
118
118
  });
119
119
  });
120
120
  });
@@ -21,11 +21,61 @@ describe('SqlClient', () => {
21
21
  mockFetch.mockResolvedValue(response);
22
22
  return body;
23
23
  }
24
+ describe('storageApi', () => {
25
+ it('should send a request and return the response body', async () => {
26
+ mockFetchExecute([]);
27
+ const result = await sqlClient['storageApi']('SELECT * FROM test', [], undefined, sql_1.SQL_API_ENDPOINTS.EXECUTE);
28
+ expect(mockFetch).toHaveBeenCalledWith('/api/v1/execute', {
29
+ method: 'POST',
30
+ body: JSON.stringify({ query: 'SELECT * FROM test', params: [], method: 'all' }),
31
+ redirect: 'follow',
32
+ headers: { 'Content-Type': 'application/json' }
33
+ });
34
+ expect(result).toEqual({ rows: [] });
35
+ });
36
+ it('should send a request with parameters and method', async () => {
37
+ mockFetchExecute([]);
38
+ const params = [1];
39
+ const result = await sqlClient['storageApi']('SELECT * FROM test WHERE id = ?', params, 'one', sql_1.SQL_API_ENDPOINTS.EXECUTE);
40
+ expect(mockFetch).toHaveBeenCalledWith('/api/v1/execute', {
41
+ method: 'POST',
42
+ body: JSON.stringify({ query: 'SELECT * FROM test WHERE id = ?', params, method: 'one' }),
43
+ redirect: 'follow',
44
+ headers: { 'Content-Type': 'application/json' }
45
+ });
46
+ expect(result).toEqual({ rows: [] });
47
+ });
48
+ it('should send a request to DDL endpoint with method', async () => {
49
+ mockFetchExecute([]);
50
+ const result = await sqlClient['storageApi']('CREATE TABLE test (id INT)', [], 'one', sql_1.SQL_API_ENDPOINTS.EXECUTE_DDL);
51
+ expect(mockFetch).toHaveBeenCalledWith('/api/v1/execute/ddl', {
52
+ method: 'POST',
53
+ body: JSON.stringify({ query: 'CREATE TABLE test (id INT)', params: [], method: 'one' }),
54
+ redirect: 'follow',
55
+ headers: { 'Content-Type': 'application/json' }
56
+ });
57
+ expect(result).toEqual({ rows: [] });
58
+ });
59
+ it('should handle invalid JSON body', async () => {
60
+ const responseText = 'Invalid JSON';
61
+ const response = new node_fetch_1.Response(responseText, { status: 200 });
62
+ mockFetch.mockResolvedValue(response);
63
+ await expect(sqlClient['storageApi']('SELECT * from strange;', [], 'one', sql_1.SQL_API_ENDPOINTS.EXECUTE)).rejects.toThrow(`Unexpected error. Response was not valid JSON: ${responseText}`);
64
+ });
65
+ it('should throw ForgeSQLAPIError on API error', async () => {
66
+ const forgeError = { code: 'INVALID_QUERY', message: 'Invalid SQL query' };
67
+ const mockResponse = new node_fetch_1.Response(JSON.stringify(forgeError), {
68
+ status: 400
69
+ });
70
+ mockFetch.mockResolvedValue(mockResponse);
71
+ await expect(sqlClient['storageApi']('INVALID SQL QUERY', [], undefined, sql_1.SQL_API_ENDPOINTS.EXECUTE)).rejects.toThrow(new errors_1.ForgeSQLAPIError({ status: mockResponse.status, statusText: mockResponse.statusText }, forgeError));
72
+ });
73
+ });
24
74
  describe('sendRequest', () => {
25
75
  it('should send a request with the correct options and return the response', async () => {
26
76
  const mockResponse = { ok: true, status: 200 };
27
77
  mockFetch.mockResolvedValue(mockResponse);
28
- const path = 'api/v1/execute';
78
+ const path = '/api/v1/execute';
29
79
  const options = { method: 'GET', headers: { 'Custom-Header': 'value' } };
30
80
  const response = await sqlClient['sendRequest'](path, options);
31
81
  expect(mockFetch).toHaveBeenCalledWith(path, {
@@ -41,7 +91,7 @@ describe('SqlClient', () => {
41
91
  it('should handle requests without options', async () => {
42
92
  const mockResponse = { ok: true, status: 200 };
43
93
  mockFetch.mockResolvedValue(mockResponse);
44
- const path = 'api/v1/execute';
94
+ const path = '/api/v1/execute';
45
95
  const response = await sqlClient['sendRequest'](path);
46
96
  expect(mockFetch).toHaveBeenCalledWith(path, {
47
97
  redirect: 'follow',
@@ -54,50 +104,11 @@ describe('SqlClient', () => {
54
104
  it('should propagate fetch errors', async () => {
55
105
  const mockError = new Error('Network error');
56
106
  mockFetch.mockRejectedValue(mockError);
57
- const path = 'api/v1/execute';
107
+ const path = '/api/v1/execute';
58
108
  await expect(sqlClient['sendRequest'](path)).rejects.toThrow(mockError);
59
109
  expect(mockFetch).toHaveBeenCalledWith(path, expect.any(Object));
60
110
  });
61
111
  });
62
- describe('storageApi', () => {
63
- it('should send a request and return the response body', async () => {
64
- mockFetchExecute([]);
65
- const result = await sqlClient.storageApi('SELECT * FROM test');
66
- expect(mockFetch).toHaveBeenCalledWith('api/v1/execute', {
67
- method: 'POST',
68
- body: JSON.stringify({ query: 'SELECT * FROM test', params: [], method: 'all' }),
69
- redirect: 'follow',
70
- headers: { 'Content-Type': 'application/json' }
71
- });
72
- expect(result).toEqual({ rows: [] });
73
- });
74
- it('should send a request with parameters and method', async () => {
75
- mockFetchExecute([]);
76
- const params = [1];
77
- const result = await sqlClient.storageApi('SELECT * FROM test WHERE id = ?', params, 'one');
78
- expect(mockFetch).toHaveBeenCalledWith('api/v1/execute', {
79
- method: 'POST',
80
- body: JSON.stringify({ query: 'SELECT * FROM test WHERE id = ?', params, method: 'one' }),
81
- redirect: 'follow',
82
- headers: { 'Content-Type': 'application/json' }
83
- });
84
- expect(result).toEqual({ rows: [] });
85
- });
86
- it('should handle invalid JSON body', async () => {
87
- const responseText = 'Invalid JSON';
88
- const response = new node_fetch_1.Response(responseText, { status: 200 });
89
- mockFetch.mockResolvedValue(response);
90
- await expect(sqlClient.storageApi('SELECT * from strange;')).rejects.toThrow(`Unexpected error. Response was not valid JSON: ${responseText}`);
91
- });
92
- it('should throw ForgeSQLAPIError on API error', async () => {
93
- const forgeError = { code: 'INVALID_QUERY', message: 'Invalid SQL query' };
94
- const mockResponse = new node_fetch_1.Response(JSON.stringify(forgeError), {
95
- status: 400
96
- });
97
- mockFetch.mockResolvedValue(mockResponse);
98
- await expect(sqlClient.storageApi('INVALID SQL QUERY')).rejects.toThrow(new errors_1.ForgeSQLAPIError({ status: mockResponse.status, statusText: mockResponse.statusText }, forgeError));
99
- });
100
- });
101
112
  describe('prepare', () => {
102
113
  it('should return a SqlStatement instance with query', () => {
103
114
  const statement = sqlClient.prepare('INSERT INTO test VALUES (?, ?)');
@@ -156,4 +167,25 @@ describe('SqlClient', () => {
156
167
  await expect(sqlClient._provision()).rejects.toThrow('Unexpected error in provision request');
157
168
  });
158
169
  });
170
+ describe('executeDDL', () => {
171
+ it('should return a valid Result object when DDL query gexecuted successfully', async () => {
172
+ const mockResponse = {
173
+ ok: true,
174
+ status: 200,
175
+ text: jest.fn().mockResolvedValue(JSON.stringify({ success: true }))
176
+ };
177
+ mockFetch.mockResolvedValue(mockResponse);
178
+ const result = await sqlClient.executeDDL('CREATE TABLE test (id INT)');
179
+ expect(result).toEqual({ success: true });
180
+ expect(mockFetch).toHaveBeenCalledWith('/api/v1/execute/ddl', expect.objectContaining({ method: 'POST' }));
181
+ });
182
+ it('should throw ForgeSQLError when response is not valid JSON', async () => {
183
+ const forgeError = { code: 'INVALID_QUERY', message: 'Invalid SQL query' };
184
+ const mockResponse = new node_fetch_1.Response(JSON.stringify(forgeError), {
185
+ status: 400
186
+ });
187
+ mockFetch.mockResolvedValue(mockResponse);
188
+ await expect(sqlClient.executeDDL('INVALID SQL QUERY')).rejects.toThrow(new errors_1.ForgeSQLAPIError(mockResponse, forgeError));
189
+ });
190
+ });
159
191
  });
package/out/migration.js CHANGED
@@ -14,7 +14,7 @@ class MigrationRunner {
14
14
  this.migrations = [];
15
15
  }
16
16
  async initialize() {
17
- await this.sqlClient.executeRaw(SCHEMA_VERSION_TABLE_CREATE_QUERY);
17
+ await this.sqlClient.executeDDL(SCHEMA_VERSION_TABLE_CREATE_QUERY);
18
18
  }
19
19
  enqueue(name, statement) {
20
20
  if (this.migrations.some((migration) => migration.name === name)) {
@@ -27,7 +27,7 @@ class MigrationRunner {
27
27
  return this.migrations;
28
28
  }
29
29
  async list() {
30
- const result = await this.sqlClient.executeRaw(LIST_MIGRATIONS_QUERY);
30
+ const result = await this.sqlClient.executeDDL(LIST_MIGRATIONS_QUERY);
31
31
  const migrations = new Array();
32
32
  for (const row of result.rows) {
33
33
  const migratedAt = new Date(row.migratedAt);
@@ -44,7 +44,7 @@ class MigrationRunner {
44
44
  const migrationsSuccessfullyRun = [];
45
45
  for (const migration of migrationsToRun) {
46
46
  try {
47
- await this.sqlClient.executeRaw(migration.statement);
47
+ await this.sqlClient.executeDDL(migration.statement);
48
48
  }
49
49
  catch (error) {
50
50
  throw new errors_1.MigrationExecutionError(migration.name, migrationsToRun.map((m) => m.name));
package/out/sql.d.ts CHANGED
@@ -1,11 +1,19 @@
1
1
  import { Result } from './utils/types';
2
- import { SqlParameters, SqlStatement } from './sql-statement';
2
+ import { SqlStatement } from './sql-statement';
3
+ export declare const SQL_API_ENDPOINTS: {
4
+ readonly EXECUTE: "/api/v1/execute";
5
+ readonly EXECUTE_DDL: "/api/v1/execute/ddl";
6
+ };
7
+ declare type SqlAPIEndPoints = (typeof SQL_API_ENDPOINTS)[keyof typeof SQL_API_ENDPOINTS];
3
8
  export declare class SqlClient {
4
9
  private sendRequest;
5
- storageApi<DataType>(query: string, params?: SqlParameters, method?: string): Promise<Result<DataType>>;
6
- prepare<DataType>(query: string): SqlStatement<Result<DataType>>;
10
+ private storageApi;
11
+ private storageApiWithOptions;
12
+ prepare<DataType>(query: string, endpoint?: SqlAPIEndPoints): SqlStatement<Result<DataType>>;
7
13
  executeRaw<DataType>(query: string): Promise<Result<DataType>>;
8
14
  _provision(): Promise<void>;
15
+ executeDDL<DataType>(query: string): Promise<Result<DataType>>;
9
16
  }
10
17
  export declare const sql: SqlClient;
18
+ export {};
11
19
  //# sourceMappingURL=sql.d.ts.map
package/out/sql.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI9D,qBAAa,SAAS;YACN,WAAW;IAYnB,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,EAAE,MAAM,SAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAiBhH,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAI1D,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAK9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CASlC;AAED,eAAO,MAAM,GAAG,WAAkB,CAAC"}
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAgC,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI7E,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAEX,aAAK,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAElF,qBAAa,SAAS;YACN,WAAW;YAYX,UAAU;YAsBV,qBAAqB;IAYnC,OAAO,CAAC,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,eAA2C,GACpD,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAU3B,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAK9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;CAGrE;AAED,eAAO,MAAM,GAAG,WAAkB,CAAC"}
package/out/sql.js CHANGED
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sql = exports.SqlClient = void 0;
3
+ exports.sql = exports.SqlClient = exports.SQL_API_ENDPOINTS = void 0;
4
4
  const api_1 = require("@forge/api");
5
5
  const sql_statement_1 = require("./sql-statement");
6
6
  const error_handling_1 = require("./utils/error-handling");
7
7
  const errors_1 = require("./errors");
8
+ exports.SQL_API_ENDPOINTS = {
9
+ EXECUTE: '/api/v1/execute',
10
+ EXECUTE_DDL: '/api/v1/execute/ddl'
11
+ };
8
12
  class SqlClient {
9
13
  async sendRequest(path, options) {
10
14
  const response = await (0, api_1.__fetchProduct)({ provider: 'app', remote: 'sql' })(path, {
@@ -17,8 +21,8 @@ class SqlClient {
17
21
  });
18
22
  return response;
19
23
  }
20
- async storageApi(query, params = [], method = 'all') {
21
- const response = await this.sendRequest('api/v1/execute', {
24
+ async storageApi(query, params = [], method = 'all', endpoint = exports.SQL_API_ENDPOINTS.EXECUTE) {
25
+ const response = await this.sendRequest(endpoint, {
22
26
  method: 'POST',
23
27
  body: JSON.stringify({ query, params, method })
24
28
  });
@@ -31,11 +35,16 @@ class SqlClient {
31
35
  throw new errors_1.ForgeSQLError(`Unexpected error. Response was not valid JSON: ${responseText}`);
32
36
  }
33
37
  }
34
- prepare(query) {
35
- return new sql_statement_1.SqlStatement(query, this.storageApi.bind(this));
38
+ async storageApiWithOptions(query, options = {}) {
39
+ const { endpoint = exports.SQL_API_ENDPOINTS.EXECUTE, params = [], method = 'all' } = options;
40
+ return await this.storageApi(query, params, method, endpoint);
41
+ }
42
+ prepare(query, endpoint = exports.SQL_API_ENDPOINTS.EXECUTE) {
43
+ const remoteSqlApi = (query, params, method) => this.storageApiWithOptions(query, { endpoint, params, method });
44
+ return new sql_statement_1.SqlStatement(query, remoteSqlApi);
36
45
  }
37
46
  async executeRaw(query) {
38
- return await this.prepare(query).execute();
47
+ return await this.prepare(query, exports.SQL_API_ENDPOINTS.EXECUTE).execute();
39
48
  }
40
49
  async _provision() {
41
50
  const response = await this.sendRequest('/api/v1/provision', {
@@ -43,6 +52,9 @@ class SqlClient {
43
52
  });
44
53
  await (0, error_handling_1.checkResponseError)(response, 'Unexpected error in provision request');
45
54
  }
55
+ async executeDDL(query) {
56
+ return await this.prepare(query, exports.SQL_API_ENDPOINTS.EXECUTE_DDL).execute();
57
+ }
46
58
  }
47
59
  exports.SqlClient = SqlClient;
48
60
  exports.sql = new SqlClient();
@@ -1 +1 @@
1
- {"version":3,"file":"error-handling.d.ts","sourceRoot":"","sources":["../../src/utils/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAA2B,UAAU,EAAoB,MAAM,WAAW,CAAC;AAGlF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,UAAU,CAO9D;AASD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC/F"}
1
+ {"version":3,"file":"error-handling.d.ts","sourceRoot":"","sources":["../../src/utils/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAA2B,UAAU,EAAoB,MAAM,WAAW,CAAC;AAGlF,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,UAAU,CAO9D;AASD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC/F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/sql",
3
- "version": "2.2.3",
3
+ "version": "2.3.0-next.0",
4
4
  "description": "Forge SQL sdk",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",