1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-10 17:04:36 +00:00

Merge pull request #847 from sasjs/update_20250821

feat: h54s Tables() compatibility
This commit is contained in:
Allan Bowe
2025-08-22 12:11:34 +01:00
committed by GitHub
6 changed files with 79 additions and 1 deletions

View File

@@ -9,7 +9,8 @@ import {
ErrorResponse,
LoginOptions,
LoginResult,
ExecutionQuery
ExecutionQuery,
Tables
} from './types'
import { SASViyaApiClient } from './SASViyaApiClient'
import { SAS9ApiClient } from './SAS9ApiClient'
@@ -1240,4 +1241,15 @@ export default class SASjs {
public setVerboseMode = (verboseMode: VerboseMode) => {
this.requestClient?.setVerboseMode(verboseMode)
}
/**
* Create a tables class containing one or more tables to be sent to
* SAS.
* @param table - initial table data
* @param macroName - macro name
* @returns Tables class
*/
Tables(table: Record<string, any>, macroName: string) {
return new Tables(table, macroName)
}
}

28
src/types/Tables.spec.ts Normal file
View File

@@ -0,0 +1,28 @@
import SASjs from '../SASjs'
describe('Tables - basic coverage', () => {
const adapter = new SASjs()
it('should throw an error if first argument is not an array', () => {
expect(() => adapter.Tables({}, 'test')).toThrow('First argument')
})
it('should throw an error if second argument is not a string', () => {
// @ts-expect-error
expect(() => adapter.Tables([], 1234)).toThrow('Second argument')
})
it('should throw an error if macro name ends with a number', () => {
expect(() => adapter.Tables([], 'test1')).toThrow('number at the end')
})
it('should throw an error if no arguments are passed', () => {
// @ts-expect-error
expect(() => adapter.Tables()).toThrow('Missing arguments')
})
it('should create Tables class successfully with _tables property', () => {
const tables = adapter.Tables([], 'test')
expect(tables).toHaveProperty('_tables')
})
})

29
src/types/Tables.ts Normal file
View File

@@ -0,0 +1,29 @@
import { ArgumentError } from './errors'
export class Tables {
_tables: { [macroName: string]: Record<string, any> }
constructor(table: Record<string, any>, macroName: string) {
this._tables = {}
this.add(table, macroName)
}
add(table: Record<string, any> | null, macroName: string) {
if (table && macroName) {
if (!(table instanceof Array)) {
throw new ArgumentError('First argument must be array')
}
if (typeof macroName !== 'string') {
throw new ArgumentError('Second argument must be string')
}
if (!isNaN(Number(macroName[macroName.length - 1]))) {
throw new ArgumentError('Macro name cannot have number at the end')
}
} else {
throw new ArgumentError('Missing arguments')
}
this._tables[macroName] = table
}
}

View File

@@ -0,0 +1,7 @@
export class ArgumentError extends Error {
constructor(public message: string) {
super(message)
this.name = 'ArgumentError'
Object.setPrototypeOf(this, ArgumentError.prototype)
}
}

View File

@@ -1,3 +1,4 @@
export * from './ArgumentError'
export * from './AuthorizeError'
export * from './CertificateError'
export * from './ComputeJobExecutionError'

View File

@@ -15,3 +15,4 @@ export * from './PollOptions'
export * from './WriteStream'
export * from './ExecuteScript'
export * from './errors'
export * from './Tables'