diff --git a/.gitignore b/.gitignore index 4fe91fa..3d08c5d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ node_modules/ sas/ tmp/ build/ +sasjsbuild/ certificates/ executables/ .env diff --git a/api/package-lock.json b/api/package-lock.json index e6dd55e..e03345a 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -8,7 +8,8 @@ "name": "api", "version": "0.0.1", "dependencies": { - "@sasjs/utils": "^2.33.1", + "@sasjs/core": "^2.48.6", + "@sasjs/utils": "file:../../utils/build/sasjs-utils-5.0.0.tgz", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "express": "^4.17.1", @@ -1560,11 +1561,17 @@ "@octokit/openapi-types": "^7.2.3" } }, + "node_modules/@sasjs/core": { + "version": "2.48.6", + "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.48.6.tgz", + "integrity": "sha512-5kCf4TdCVOYve4wSHVTi+db34hknDwvY2C/JVEPHT6T3CkQ5cnwRVPSFz/1WzXzcVvdUi4ag5xd9SDOsU12oWA==" + }, "node_modules/@sasjs/utils": { - "version": "2.33.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.33.1.tgz", - "integrity": "sha512-QQqI9+G/riMrbNSjambYwaJwGY3om2f3N9z9tNxBSva+W0g3JaOl4qeOqpRS91KhOmNhrLMCohg6jScMCz3YFQ==", + "version": "5.0.0", + "resolved": "file:../../utils/build/sasjs-utils-5.0.0.tgz", + "integrity": "sha512-ZSX1oHLEl3Gaz1ILnmbf1hMt3WLfvAddck65BY1NduOePtHx2ioja9CjzXKxB75CphBjLdjR95tbmb8jjzGDZA==", "hasInstallScript": true, + "license": "ISC", "dependencies": { "@types/fs-extra": "^9.0.11", "@types/prompts": "^2.0.13", @@ -1572,8 +1579,11 @@ "cli-table": "^0.3.6", "consola": "^2.15.0", "csv-stringify": "^5.6.5", + "find": "0.3.0", "fs-extra": "^10.0.0", "jwt-decode": "^3.1.2", + "lodash.groupby": "4.6.0", + "lodash.uniqby": "4.7.0", "prompts": "^2.4.1", "rimraf": "^3.0.2", "valid-url": "^1.0.9" @@ -4933,6 +4943,14 @@ "node": ">= 0.8" } }, + "node_modules/find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "dependencies": { + "traverse-chain": "~0.1.0" + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -7975,6 +7993,11 @@ "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", "dev": true }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -8025,8 +8048,7 @@ "node_modules/lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=" }, "node_modules/lowercase-keys": { "version": "1.0.1", @@ -14220,6 +14242,11 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "node_modules/traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" + }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -16141,10 +16168,14 @@ "@octokit/openapi-types": "^7.2.3" } }, + "@sasjs/core": { + "version": "2.48.6", + "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-2.48.6.tgz", + "integrity": "sha512-5kCf4TdCVOYve4wSHVTi+db34hknDwvY2C/JVEPHT6T3CkQ5cnwRVPSFz/1WzXzcVvdUi4ag5xd9SDOsU12oWA==" + }, "@sasjs/utils": { - "version": "2.33.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.33.1.tgz", - "integrity": "sha512-QQqI9+G/riMrbNSjambYwaJwGY3om2f3N9z9tNxBSva+W0g3JaOl4qeOqpRS91KhOmNhrLMCohg6jScMCz3YFQ==", + "version": "file:../../utils/build/sasjs-utils-5.0.0.tgz", + "integrity": "sha512-ZSX1oHLEl3Gaz1ILnmbf1hMt3WLfvAddck65BY1NduOePtHx2ioja9CjzXKxB75CphBjLdjR95tbmb8jjzGDZA==", "requires": { "@types/fs-extra": "^9.0.11", "@types/prompts": "^2.0.13", @@ -16152,8 +16183,11 @@ "cli-table": "^0.3.6", "consola": "^2.15.0", "csv-stringify": "^5.6.5", + "find": "0.3.0", "fs-extra": "^10.0.0", "jwt-decode": "^3.1.2", + "lodash.groupby": "4.6.0", + "lodash.uniqby": "4.7.0", "prompts": "^2.4.1", "rimraf": "^3.0.2", "valid-url": "^1.0.9" @@ -18889,6 +18923,14 @@ "unpipe": "~1.0.0" } }, + "find": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", + "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", + "requires": { + "traverse-chain": "~0.1.0" + } + }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -21170,6 +21212,11 @@ "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", "dev": true }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -21220,8 +21267,7 @@ "lodash.uniqby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=" }, "lowercase-keys": { "version": "1.0.1", @@ -25795,6 +25841,11 @@ "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, + "traverse-chain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", + "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" + }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", diff --git a/api/package.json b/api/package.json index 4742b51..3204c6b 100644 --- a/api/package.json +++ b/api/package.json @@ -4,8 +4,10 @@ "description": "Api of SASjs server", "main": "./src/server.ts", "scripts": { - "prestart": "npm run swagger", - "prestart:prod": "npm run swagger", + "initial": "npm run swagger && npm run compileSysInit", + "prestart": "npm run initial", + "prestart:prod": "npm run initial", + "prebuild": "npm run initial", "start": "nodemon ./src/server.ts", "start:prod": "nodemon ./src/prod-server.ts", "build": "rimraf build && tsc", @@ -16,14 +18,18 @@ "lint:fix": "npx prettier --write \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"", "lint": "npx prettier --check \"src/**/*.{ts,tsx,js,jsx,html,css,sass,less,yml,md,graphql}\"", "package:lib": "npm run build && cp ./package.json build && cp README.md build && cd build && npm version \"5.0.0\" && npm pack", - "exe": "npm run build && npm run public:copy && npm run web:copy && pkg .", + "exe": "npm run build && npm run exe:copy && pkg .", + "exe:copy": "npm run public:copy && npm run sasjsbuild:copy && npm run web:copy", "public:copy": "cp -r ./public/ ./build/public/", - "web:copy": "rimraf web && mkdir web && cp -r ../web/build/ ./web/build/" + "sasjsbuild:copy": "cp -r ./sasjsbuild/ ./build/sasjsbuild/", + "web:copy": "rimraf web && mkdir web && cp -r ../web/build/ ./web/build/", + "compileSysInit": "ts-node ./scripts/compileSysInit.ts" }, "bin": "./build/src/server.js", "pkg": { "assets": [ "./build/public/**/*", + "./build/sasjsbuild/**/*", "./web/build/**/*" ], "targets": [ @@ -40,7 +46,8 @@ }, "author": "Analytium Ltd", "dependencies": { - "@sasjs/utils": "^2.33.1", + "@sasjs/core": "^2.48.6", + "@sasjs/utils": "file:../../utils/build/sasjs-utils-5.0.0.tgz", "bcryptjs": "^2.4.3", "cors": "^2.8.5", "express": "^4.17.1", diff --git a/api/scripts/compileSysInit.ts b/api/scripts/compileSysInit.ts new file mode 100644 index 0000000..2aa5443 --- /dev/null +++ b/api/scripts/compileSysInit.ts @@ -0,0 +1,35 @@ +import path from 'path' +import { + createFile, + loadDependenciesFile, + readFile, + SASJsFileType +} from '@sasjs/utils' +import { apiRoot, sysInitCompiledPath } from '../src/utils' + +const macroCorePath = path.join(apiRoot, 'node_modules', '@sasjs', 'core') + +const compiledSystemInit = async (systemInit: string) => + 'options ps=max;\n' + + (await loadDependenciesFile({ + fileContent: systemInit, + type: SASJsFileType.job, + programFolders: [], + macroFolders: [], + buildSourceFolder: '', + macroCorePath + })) + +const createSysInitFile = async () => { + console.log('macroCorePath', macroCorePath) + const systemInitContent = await readFile( + path.join(__dirname, 'systemInit.sas') + ) + + await createFile( + path.join(sysInitCompiledPath), + await compiledSystemInit(systemInitContent) + ) +} + +createSysInitFile() diff --git a/api/scripts/systemInit.sas b/api/scripts/systemInit.sas new file mode 100644 index 0000000..9a20dda --- /dev/null +++ b/api/scripts/systemInit.sas @@ -0,0 +1,15 @@ +/** + @file + @brief The systemInit program + @details This program is inserted into every sasjs/server program invocation, + _before_ any user-provided content. + +