diff --git a/.github/workflows/web-build.yml b/.github/workflows/web-build.yml index 1404cc4239..0a7784aa22 100644 --- a/.github/workflows/web-build.yml +++ b/.github/workflows/web-build.yml @@ -75,7 +75,7 @@ jobs: # Set deployment from input, replacing branch slash name with suffix (`prod/my_deployment` -> `my_deployment`) # https://stackoverflow.com/a/40524879 - name: Set deployment - if: ${{inputs.deployment && inputs.deployment != 'master'}} + if: ${{inputs.deployment && inputs.deployment != 'master' && inputs.deployment!='refs/heads/master'}} run: | echo "DEPLOYMENT_NAME=$(echo ${{inputs.deployment}} | sed 's/.*\///')" >> $GITHUB_ENV; shell: bash @@ -154,11 +154,6 @@ jobs: if: ${{env.GIT_SHA}} run: echo "export const GIT_SHA = \"$GIT_SHA\";" > src/environments/sha.ts - # Ensure required packages built to enable deployment set - # TODO - should add implicit dep to scripts when NX added - - name: Precompile - run: yarn scripts compile types - - name: Set deployment run: yarn workflow deployment set ${{env.DEPLOYMENT_NAME}} diff --git a/android/app/build.gradle b/android/app/build.gradle index 45f04d047e..ccd07d5329 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "international.idems.plh_teens" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 16019 - versionName "0.16.19" + versionCode 16020 + versionName "0.16.20" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/package.json b/package.json index efe5ac5728..17b0556f67 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "frontend", - "version": "0.16.19", + "version": "0.16.20", "author": "IDEMS International", "license": "See LICENSE", "homepage": "https://idems.international/", @@ -11,11 +11,10 @@ ], "scripts": { "ng": "ng", - "start": "yarn prepare && concurrently --kill-others --raw \"yarn data-models:serve\" \"ng serve --open\"", + "start": "yarn prepare && ng serve --open", "start:local": "yarn prepare && concurrently --kill-others --raw \"ng serve --open\" \"yarn workflow sync_local\"", - "prepare": "node .husky/prepare.js && yarn scripts compile types && yarn workflow populate_src_assets", + "prepare": "node .husky/prepare.js && yarn workflow populate_src_assets", "build": "yarn prepare && ng build --configuration=production", - "data-models:serve": "yarn workspace data-models serve", "compodoc:generate": "compodoc --tsconfig tsconfig.docs.json --theme material --assetsFolder 'documentation/docs/assets' --output documentation/docs/generated --disablePrivate --disableLifeCycleHooks", "compodoc:serve": "yarn compodoc:generate --serve --watch --open", "scripts": "yarn workspace scripts start", diff --git a/packages/data-models/README.md b/packages/data-models/README.md new file mode 100644 index 0000000000..93271d6bb5 --- /dev/null +++ b/packages/data-models/README.md @@ -0,0 +1,40 @@ +## Data Models + +### How to import + +**Node** +The workspace is designed for direct import as `.ts` files, to be compiled within parent project. Most imports are made available from the top-level `index.ts` +```ts +import { getDefaultAppConfig } from "data-models" +``` +If any imports are not available simply update the workspace `index.ts` to include + +**Angular** +The angular compiler uses local `tsconfig.app.json` to include external dependencies, therefore if using an entry should be included +```json +{ + "extends": "./tsconfig.json", + "include": [ + "packages/data-models/**/*.ts", + ] +} + +``` +Once included, data-models can be imported in the same way +```ts +import { getDefaultAppConfig } from "data-models" +``` + +*Legacy Implementation* +If it is not possible to import via tsconfig, it is still possible to include as a workspace dependency (defined in package.json), however the data models package.json requires update to build and import from dist folder. Additionally any angular serve script should concurrently serve the data-models workspace to ensure changes are recompiled, e.g. + +```ts +"main": "dist/index.js", +"types": "dist/index.d.ts", +"scripts": { + "build": "tsc -b", + "serve": "tsc -w" +}, +``` + + diff --git a/packages/data-models/index.ts b/packages/data-models/index.ts index 09769c9c38..65b7b445d3 100644 --- a/packages/data-models/index.ts +++ b/packages/data-models/index.ts @@ -1,12 +1,6 @@ +export * from "./appConfig"; +export * from "./db.model"; +export * from "./deployment.model"; export * from "./flowTypes"; export * from "./functions"; -// NOTE - avoid exporting workflows as node-based can't be consumed by frontend src -// export { IDeploymentWorkflows, IWorkflow, IWorkflowContext, WORKFLOW_DEFAULTS } from "./workflows"; -export { - IDeploymentConfig, - IDeploymentConfigJson, - DEPLOYMENT_CONFIG_EXAMPLE_DEFAULTS, - DEPLOYMENT_CONFIG_VERSION, -} from "./deployment.model"; -export { IAppSkin } from "./skin.model"; -export { IAppConfig, IAppConfigOverride, getDefaultAppConfig } from "./appConfig"; +export * from "./skin.model"; diff --git a/packages/data-models/package.json b/packages/data-models/package.json index 348fdcbe51..51b19f0edc 100644 --- a/packages/data-models/package.json +++ b/packages/data-models/package.json @@ -2,19 +2,18 @@ "name": "data-models", "version": "1.0.0", "description": "", - "types": "index.d.ts", - "scripts": { - "build": "tsc -b", - "serve": "tsc -w" + "files": [ + "dist" + ], + "main": "./index.ts", + "types": "./index.ts", + "dependencies": { + "clone": "^2.1.2" }, "devDependencies": { "@types/clone": "^2.1.1", "@types/node": "^16.18.9", - "scripts": "workspace:*", "shared": "workspace:*", "typescript": "~4.2.4" - }, - "dependencies": { - "clone": "^2.1.2" } } diff --git a/packages/data-models/tsconfig.json b/packages/data-models/tsconfig.json index 2572ee9196..979d0e3ae0 100644 --- a/packages/data-models/tsconfig.json +++ b/packages/data-models/tsconfig.json @@ -9,6 +9,6 @@ "target": "es5", "esModuleInterop": true }, - "include": ["index.ts"], + "include": ["**/*.ts"], "exclude": ["**/*.d.ts", "dist", "node_modules"] } diff --git a/packages/scripts/package.json b/packages/scripts/package.json index cbac212436..59fa41382d 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -30,10 +30,8 @@ "commander": "^8.3.0", "data-models": "workspace:*", "fs-extra": "^9.0.1", - "glob": "^7.2.0", "inquirer": "^7.3.3", "node-rsa": "^1.1.1", - "open": "^9.1.0", "p-queue": "^6.6.2", "semver": "^7.5.2", "shared": "workspace:*", @@ -42,6 +40,7 @@ "ts-morph": "^15.0.0", "typescript": "^4.1.2", "winston": "^3.8.1", + "workflows": "workspace:*", "xlsx": "^0.18.5" }, "devDependencies": { @@ -59,7 +58,6 @@ "nodemon": "^2.0.19", "pkg": "^5.5.1", "ts-node": "^10.8.0", - "ts-node-dev": "^1.0.0", - "tsimportlib": "^0.0.5" + "ts-node-dev": "^1.0.0" } } diff --git a/packages/scripts/src/commands/app-data/convert/convert.spec.ts b/packages/scripts/src/commands/app-data/convert/convert.spec.ts index 2cf1a47285..a486ba4a6c 100644 --- a/packages/scripts/src/commands/app-data/convert/convert.spec.ts +++ b/packages/scripts/src/commands/app-data/convert/convert.spec.ts @@ -59,7 +59,7 @@ describe("App Data Converter", () => { }); it("Throws on duplicate flows", async () => { await converter.run().catch((err) => { - expect(err.message.includes("Duplicate flows found")); + expect(err.message.includes("Duplicate flows found")).toEqual(true); }); }); }); @@ -70,20 +70,20 @@ describe("App Data Converter - Error Checking", () => { outputFolder: path.resolve(SCRIPTS_TEST_DATA_DIR, "output", "errorChecking"), cacheFolder: path.resolve(SCRIPTS_TEST_DATA_DIR, "cache"), }; - const errorConverter = new AppDataConverter(errorPaths); + let errorConverter = new AppDataConverter(errorPaths); beforeAll(() => { if (existsSync(paths.outputFolder)) { emptyDirSync(paths.outputFolder); } }); it("Tracks number of conversion errors", async () => { - const errorConverter = new AppDataConverter(errorPaths); + errorConverter = new AppDataConverter(errorPaths); const { errors } = await errorConverter.run(); expect(errors.length).toBeGreaterThan(0); }); - it("Throws on duplicate flows", async () => { + it("Throws on duplicate flows (2)", async () => { await errorConverter.run().catch((err) => { - expect(err.message.includes("Duplicate flows found")); + expect(err.message.includes("Duplicate flows found")).toBe(true); }); }); }); diff --git a/packages/scripts/src/commands/app-data/convert/processors/flowParser/parsers/data_pipe.parser.spec.ts b/packages/scripts/src/commands/app-data/convert/processors/flowParser/parsers/data_pipe.parser.spec.ts index 57d8fed464..b6c6d5660a 100644 --- a/packages/scripts/src/commands/app-data/convert/processors/flowParser/parsers/data_pipe.parser.spec.ts +++ b/packages/scripts/src/commands/app-data/convert/processors/flowParser/parsers/data_pipe.parser.spec.ts @@ -1,5 +1,5 @@ import { FlowTypes } from "data-models"; -import { IDataPipeOperation } from "shared/src/models/dataPipe/types"; +import type { IDataPipeOperation } from "shared/src/models/dataPipe/types"; import { DataPipeParser } from "./data_pipe.parser"; const testInputSources = { diff --git a/packages/scripts/src/commands/app-data/postProcess/assets.spec.ts b/packages/scripts/src/commands/app-data/postProcess/assets.spec.ts index 874c30dc69..d5f341b167 100644 --- a/packages/scripts/src/commands/app-data/postProcess/assets.spec.ts +++ b/packages/scripts/src/commands/app-data/postProcess/assets.spec.ts @@ -9,7 +9,7 @@ import mockFs from "mock-fs"; // Use default imports to allow spying on functions and replacing with mock methods import { ActiveDeployment } from "../../deployment/get"; -import { Logger } from "../../../utils/logging.utils"; +import { Logger } from "../../../utils"; import path from "path"; import { IAssetEntryHashmap } from "data-models/deployment.model"; diff --git a/packages/scripts/src/commands/app-data/postProcess/sheets.spec.ts b/packages/scripts/src/commands/app-data/postProcess/sheets.spec.ts index 62bf6a2def..b298841057 100644 --- a/packages/scripts/src/commands/app-data/postProcess/sheets.spec.ts +++ b/packages/scripts/src/commands/app-data/postProcess/sheets.spec.ts @@ -6,7 +6,6 @@ import mockFs from "mock-fs"; // Use default imports to allow spying on functions and replacing with mock methods import { ActiveDeployment } from "../../deployment/get"; -import { Logger } from "../../../utils/logging.utils"; import path from "path"; /** Mock file system folders for use in tests */ diff --git a/packages/scripts/src/commands/compile/types.ts b/packages/scripts/src/commands/compile/types.ts index 028adce335..dc09865f13 100644 --- a/packages/scripts/src/commands/compile/types.ts +++ b/packages/scripts/src/commands/compile/types.ts @@ -13,19 +13,27 @@ import { DATA_MODELS_WORKSPACE_PATH } from "../../paths"; const program = new Command("types"); export default program.description("Compile types").action(() => { - compileTypes(); + _DEPRECATED_compileTypes(); }); /*************************************************************************************** * Main Methods *************************************************************************************/ /** + * DEPRECATED - CC 2023-08-18 + * Previously frontend app would import from data-models compiled dist, so extra step + * required to ensure this had been built before running + * However this has been updated to import .ts directly and compile with angular compiler + * so not required. + * Method should be retained for short term in case pattern required + * (recommend to remove post 2023-11-18) + * === * * Data models import types from scripts but scripts also import types from data models * Whilst the types are not in conflict themselves, they do lead to compilation issues * Remove any outstanding types before compiling noew */ -function compileTypes() { +function _DEPRECATED_compileTypes() { const dataModelsBuildPath = path.resolve(DATA_MODELS_WORKSPACE_PATH, "dist"); console.log(chalk.yellow("Compiling type definitions")); if (fs.existsSync(dataModelsBuildPath)) { diff --git a/packages/scripts/src/commands/deployment/create.ts b/packages/scripts/src/commands/deployment/create.ts index 76ced15792..8081edf29b 100644 --- a/packages/scripts/src/commands/deployment/create.ts +++ b/packages/scripts/src/commands/deployment/create.ts @@ -5,7 +5,6 @@ import path from "path"; import { DEPLOYMENTS_PATH } from "../../paths"; import { Logger, logOutput, logWarning, promptInput, promptOptions } from "../../utils"; import type { IDeploymentConfigJson } from "./common"; -import { DeploymentSet } from "./set"; import generateDefaultConfig from "./templates/config.default"; import generateExtendedConfig from "./templates/config.extended"; import { loadDeploymentJson } from "./utils"; diff --git a/packages/scripts/src/commands/index.ts b/packages/scripts/src/commands/index.ts index b43028330a..945b52b418 100644 --- a/packages/scripts/src/commands/index.ts +++ b/packages/scripts/src/commands/index.ts @@ -9,7 +9,7 @@ import configCmd from "./config"; import deploymentCmd from "./deployment"; import versionCmd from "./version"; import workflowCmd from "./workflow"; -import { logWarning, logProgramHelp } from "../utils/logging.utils"; +import { logWarning, logProgramHelp } from "../utils"; const program = new Command(); diff --git a/packages/scripts/src/commands/workflow/run.ts b/packages/scripts/src/commands/workflow/run.ts index b2d161e855..85233f480d 100644 --- a/packages/scripts/src/commands/workflow/run.ts +++ b/packages/scripts/src/commands/workflow/run.ts @@ -4,7 +4,7 @@ import boxen from "boxen"; import chalk from "chalk"; import path from "path"; import { Command } from "commander"; -import { IDeploymentWorkflows, IWorkflow, WORKFLOW_DEFAULTS } from "data-models/workflows"; +import { IDeploymentWorkflows, IWorkflow, WORKFLOW_DEFAULTS } from "workflows"; import ALL_TASKS from "../../tasks"; import { Logger, logProgramHelp, pad, promptOptions } from "../../utils"; import { ActiveDeployment } from "../deployment/get"; diff --git a/packages/scripts/src/paths.ts b/packages/scripts/src/paths.ts index f376c3fbfc..fd62713f87 100644 --- a/packages/scripts/src/paths.ts +++ b/packages/scripts/src/paths.ts @@ -1,24 +1,2 @@ -import * as path from "path"; - -export const ROOT_DIR = path.resolve(__dirname, "../../../"); -export const MAIN_PACKAGE_PATH = path.join(ROOT_DIR, "package.json"); - -export const DEPLOYMENTS_PATH = path.resolve(ROOT_DIR, ".idems_app", "deployments"); - -export const SCRIPTS_WORKSPACE_PATH = path.join(ROOT_DIR, "packages/scripts"); -export const SCRIPTS_TEST_DATA_DIR = path.join(SCRIPTS_WORKSPACE_PATH, "test", "data"); -export const SCRIPTS_LOGS_DIR = path.join(SCRIPTS_WORKSPACE_PATH, "logs"); -export const DATA_MODELS_WORKSPACE_PATH = path.join(ROOT_DIR, "packages/data-models"); - -export const SRC_ASSETS_PATH = path.join(ROOT_DIR, "src", "assets"); - -export const CONFIG_FOLDER_PATH = path.join(SCRIPTS_WORKSPACE_PATH, "config"); -export const PRIVATE_KEY_PATH = path.join(CONFIG_FOLDER_PATH, "private.key"); -export const PUBLIC_KEY_PATH = path.join(CONFIG_FOLDER_PATH, "public.key"); -export const CREDENTIALS_PATH = path.join(CONFIG_FOLDER_PATH, "credentials.json"); -export const AUTH_TOKEN_PATH = path.join(CONFIG_FOLDER_PATH, "token.json"); - -export const RESOURCE_FOLDER_PATH = path.join(ROOT_DIR, "resources"); - -export const ANDROID_RES_PATH = path.join(ROOT_DIR, "android/app/src/main/res"); -export const APP_BUILD_GRADLE_PATH = path.join(ROOT_DIR, "android/app/build.gradle"); +// re-export shared utils for ease of import +export * from "shared/src/paths"; diff --git a/packages/scripts/src/tasks/providers/workflow.ts b/packages/scripts/src/tasks/providers/workflow.ts index 5c9a885298..b889ba2549 100644 --- a/packages/scripts/src/tasks/providers/workflow.ts +++ b/packages/scripts/src/tasks/providers/workflow.ts @@ -1,4 +1,4 @@ -import { IWorkflowContext } from "data-models/workflows"; +import { IWorkflowContext } from "workflows"; import { parseCommand } from "../../commands"; /** diff --git a/packages/scripts/src/utils.ts b/packages/scripts/src/utils.ts new file mode 100644 index 0000000000..4646053846 --- /dev/null +++ b/packages/scripts/src/utils.ts @@ -0,0 +1,2 @@ +// re-export shared utils for ease of import +export * from "shared/src/utils"; diff --git a/packages/scripts/src/utils/index.ts b/packages/scripts/src/utils/index.ts deleted file mode 100644 index 1842e691d0..0000000000 --- a/packages/scripts/src/utils/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./cli-utils"; -export * from "./file-utils"; -export * from "./logging.utils"; -export * from "./string-utils"; -export * from "./typescript-utils"; diff --git a/packages/shared/README.md b/packages/shared/README.md new file mode 100644 index 0000000000..a285f9bee3 --- /dev/null +++ b/packages/shared/README.md @@ -0,0 +1,44 @@ +## Shared + +Common platform methods and utility functions. + +There are particularly a number of utility methods used by both scripts and workflow packages + +Note, some methods will only work in node-based environments (non-browser) + +### How to import + +**Node** +The workspace is designed for direct import as `.ts` files, to be compiled within parent project. Most imports are made available from the top-level `index.ts` +```ts +import { TemplatedData } from "shared" +``` +If any imports are not available simply update the workspace `index.ts` to include + +**Angular** +The angular compiler uses local `tsconfig.app.json` to include external dependencies, therefore if using an entry should be included + +```json +{ + "extends": "./tsconfig.json", + "include": [ + "packages/shared/**/*.ts", + ] +} +``` + +**NOTE** - the `shared` package workspace name conflicts with local `shared` folder +As such when importing methods a package-based path will be required, i.e + +```ts +import { TemplatedData } from "packages/shared" +``` + +In addition, to avoid compiler errors thrown by non-browser shared methods, explicit paths should be included to import only the supported files as required + +```ts +import { AppStringEvaluator } from "packages/shared/src/models/appStringEvaluator/appStringEvaluator"; +import { TemplatedData } from "packages/shared/src/models/templatedData/templatedData"; +``` + +In future it may be better to move any non-compatible shared methods to own package, or polyfill missing functions (e.g. `os`) \ No newline at end of file diff --git a/packages/shared/package.json b/packages/shared/package.json index 25e840f2c2..b784ca972c 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -3,16 +3,28 @@ "version": "1.0.0", "description": "", "main": "src/index.ts", + "types": "src/index.ts", "scripts": { "test": "jasmine-ts --config=jasmine.json", "test:watch": "nodemon --ext ts --exec 'jasmine-ts --config=jasmine.json'" }, "license": "ISC", "dependencies": { + "boxen": "^5.0.1", + "chalk": "^4.1.0", "character-parser": "^4.0.0", - "danfojs": "^1.1.1" + "commander": "^8.3.0", + "danfojs": "^1.1.1", + "fs-extra": "^9.0.1", + "glob": "^7.2.0", + "inquirer": "^7.3.3", + "open": "^9.1.0", + "tsimportlib": "^0.0.5", + "winston": "^3.8.1" }, "devDependencies": { + "@types/fs-extra": "^9.0.4", + "@types/inquirer": "^7.3.1", "@types/jasmine": "^3.10.6", "@types/node": "^16.11.47", "jasmine": "^3.99.0", diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 0305fa80aa..710df44b60 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1,2 +1,8 @@ -export * from "./utils"; export * from "./models"; +export * from "./types"; +export * from "./utils"; +export * from "./paths"; + +// Re-export all paths within a single namespace +import * as PATHS from "./paths"; +export { PATHS }; diff --git a/packages/shared/src/models/templatedData/templatedData.ts b/packages/shared/src/models/templatedData/templatedData.ts index 6f3a6edb84..1e2056d0cf 100644 --- a/packages/shared/src/models/templatedData/templatedData.ts +++ b/packages/shared/src/models/templatedData/templatedData.ts @@ -1,5 +1,5 @@ import { ITemplatedStringVariable } from "../../types"; -import { addStringDelimiters, extractDelimitedTemplateString } from "../../utils"; +import { addStringDelimiters, extractDelimitedTemplateString } from "../../utils/delimiters"; type ITemplatedDataContext = { [prefix: string]: any }; diff --git a/packages/shared/src/paths.ts b/packages/shared/src/paths.ts new file mode 100644 index 0000000000..f376c3fbfc --- /dev/null +++ b/packages/shared/src/paths.ts @@ -0,0 +1,24 @@ +import * as path from "path"; + +export const ROOT_DIR = path.resolve(__dirname, "../../../"); +export const MAIN_PACKAGE_PATH = path.join(ROOT_DIR, "package.json"); + +export const DEPLOYMENTS_PATH = path.resolve(ROOT_DIR, ".idems_app", "deployments"); + +export const SCRIPTS_WORKSPACE_PATH = path.join(ROOT_DIR, "packages/scripts"); +export const SCRIPTS_TEST_DATA_DIR = path.join(SCRIPTS_WORKSPACE_PATH, "test", "data"); +export const SCRIPTS_LOGS_DIR = path.join(SCRIPTS_WORKSPACE_PATH, "logs"); +export const DATA_MODELS_WORKSPACE_PATH = path.join(ROOT_DIR, "packages/data-models"); + +export const SRC_ASSETS_PATH = path.join(ROOT_DIR, "src", "assets"); + +export const CONFIG_FOLDER_PATH = path.join(SCRIPTS_WORKSPACE_PATH, "config"); +export const PRIVATE_KEY_PATH = path.join(CONFIG_FOLDER_PATH, "private.key"); +export const PUBLIC_KEY_PATH = path.join(CONFIG_FOLDER_PATH, "public.key"); +export const CREDENTIALS_PATH = path.join(CONFIG_FOLDER_PATH, "credentials.json"); +export const AUTH_TOKEN_PATH = path.join(CONFIG_FOLDER_PATH, "token.json"); + +export const RESOURCE_FOLDER_PATH = path.join(ROOT_DIR, "resources"); + +export const ANDROID_RES_PATH = path.join(ROOT_DIR, "android/app/src/main/res"); +export const APP_BUILD_GRADLE_PATH = path.join(ROOT_DIR, "android/app/build.gradle"); diff --git a/packages/scripts/src/utils/cli-utils.ts b/packages/shared/src/utils/cli-utils.ts similarity index 100% rename from packages/scripts/src/utils/cli-utils.ts rename to packages/shared/src/utils/cli-utils.ts diff --git a/packages/scripts/src/utils/file-utils.spec.ts b/packages/shared/src/utils/file-utils.spec.ts similarity index 100% rename from packages/scripts/src/utils/file-utils.spec.ts rename to packages/shared/src/utils/file-utils.spec.ts diff --git a/packages/scripts/src/utils/file-utils.ts b/packages/shared/src/utils/file-utils.ts similarity index 97% rename from packages/scripts/src/utils/file-utils.ts rename to packages/shared/src/utils/file-utils.ts index 65dbb14647..c670026812 100644 --- a/packages/scripts/src/utils/file-utils.ts +++ b/packages/shared/src/utils/file-utils.ts @@ -3,8 +3,6 @@ import * as path from "path"; import * as os from "os"; import { createHash, randomUUID } from "crypto"; import { logWarning } from "./logging.utils"; -import { ROOT_DIR } from "../paths"; -import { spawnSync } from "child_process"; import { tmpdir } from "os"; /** @@ -524,15 +522,6 @@ export function createTempDir() { return dirPath; } -/** - * Run prettier to automatically format code in given folder path - * NOTE - by default will only format .ts files - */ -export function runPrettierCodeTidy(folderPath: string) { - const cmd = `npx prettier --config ${ROOT_DIR}/.prettierrc --write ${folderPath}/**/*.ts --loglevel error`; - return spawnSync(cmd, { stdio: ["inherit", "inherit", "inherit"], shell: true }); -} - /** Create a randomly-named temporary folder within the os temp directory */ export function createTemporaryFolder() { const folderName = randomUUID(); diff --git a/packages/shared/src/utils/index.ts b/packages/shared/src/utils/index.ts index c13064083d..93d76b4e00 100644 --- a/packages/shared/src/utils/index.ts +++ b/packages/shared/src/utils/index.ts @@ -1 +1,6 @@ +export * from "./cli-utils"; export * from "./delimiters"; +export * from "./file-utils"; +export * from "./logging.utils"; +export * from "./string-utils"; +export * from "./typescript-utils"; diff --git a/packages/scripts/src/utils/logging.utils.ts b/packages/shared/src/utils/logging.utils.ts similarity index 100% rename from packages/scripts/src/utils/logging.utils.ts rename to packages/shared/src/utils/logging.utils.ts diff --git a/packages/shared/src/utils/misc-utils.ts b/packages/shared/src/utils/misc-utils.ts new file mode 100644 index 0000000000..1158f832aa --- /dev/null +++ b/packages/shared/src/utils/misc-utils.ts @@ -0,0 +1,11 @@ +import { spawnSync } from "child_process"; +import { ROOT_DIR } from "../paths"; + +/** + * Run prettier to automatically format code in given folder path + * NOTE - by default will only format .ts files + */ +export function runPrettierCodeTidy(folderPath: string) { + const cmd = `npx prettier --config ${ROOT_DIR}/.prettierrc --write ${folderPath}/**/*.ts --loglevel error`; + return spawnSync(cmd, { stdio: ["inherit", "inherit", "inherit"], shell: true }); +} diff --git a/packages/scripts/src/utils/string-utils.ts b/packages/shared/src/utils/string-utils.ts similarity index 100% rename from packages/scripts/src/utils/string-utils.ts rename to packages/shared/src/utils/string-utils.ts diff --git a/packages/scripts/src/utils/typescript-utils.ts b/packages/shared/src/utils/typescript-utils.ts similarity index 100% rename from packages/scripts/src/utils/typescript-utils.ts rename to packages/shared/src/utils/typescript-utils.ts diff --git a/packages/workflows/README.md b/packages/workflows/README.md new file mode 100644 index 0000000000..22ce48ab8c --- /dev/null +++ b/packages/workflows/README.md @@ -0,0 +1,7 @@ +## Workflows + +Common workflows made available to scripts + +```sh +yarn workflow [name_of_workflow] +``` \ No newline at end of file diff --git a/packages/workflows/package.json b/packages/workflows/package.json new file mode 100644 index 0000000000..625abb5978 --- /dev/null +++ b/packages/workflows/package.json @@ -0,0 +1,15 @@ +{ + "name": "workflows", + "version": "1.0.0", + "description": "", + "main": "src/index.ts", + "scripts": { + "build": "tsc -b", + "serve": "tsc -w" + }, + "devDependencies": { + "@types/node": "^16.18.9", + "shared": "workspace:*", + "typescript": "~4.2.4" + } +} diff --git a/packages/data-models/workflows/android.workflows.ts b/packages/workflows/src/android.workflows.ts similarity index 100% rename from packages/data-models/workflows/android.workflows.ts rename to packages/workflows/src/android.workflows.ts diff --git a/packages/data-models/workflows/deployment.workflows.ts b/packages/workflows/src/deployment.workflows.ts similarity index 100% rename from packages/data-models/workflows/deployment.workflows.ts rename to packages/workflows/src/deployment.workflows.ts diff --git a/packages/data-models/workflows/index.ts b/packages/workflows/src/index.ts similarity index 100% rename from packages/data-models/workflows/index.ts rename to packages/workflows/src/index.ts diff --git a/packages/data-models/workflows/misc.workflows.ts b/packages/workflows/src/misc.workflows.ts similarity index 100% rename from packages/data-models/workflows/misc.workflows.ts rename to packages/workflows/src/misc.workflows.ts diff --git a/packages/data-models/workflows/repo.workflows.ts b/packages/workflows/src/repo.workflows.ts similarity index 100% rename from packages/data-models/workflows/repo.workflows.ts rename to packages/workflows/src/repo.workflows.ts diff --git a/packages/data-models/workflows/sync.workflows.ts b/packages/workflows/src/sync.workflows.ts similarity index 99% rename from packages/data-models/workflows/sync.workflows.ts rename to packages/workflows/src/sync.workflows.ts index 0569ee7863..58b3bb811d 100644 --- a/packages/data-models/workflows/sync.workflows.ts +++ b/packages/workflows/src/sync.workflows.ts @@ -1,5 +1,5 @@ import { normalize } from "path"; -import { replicateDir } from "scripts/src/utils"; +import { replicateDir } from "shared"; import type { IDeploymentWorkflows, IWorkflowStepContext } from "./workflow.model"; /** Default workflows made available to all deployments */ diff --git a/packages/data-models/workflows/workflow.model.ts b/packages/workflows/src/workflow.model.ts similarity index 80% rename from packages/data-models/workflows/workflow.model.ts rename to packages/workflows/src/workflow.model.ts index f0f49ae10e..23ae0a45d3 100644 --- a/packages/data-models/workflows/workflow.model.ts +++ b/packages/workflows/src/workflow.model.ts @@ -1,7 +1,10 @@ // NOTE - this import can lead to build issues // https://www.codejam.info/2021/10/typescript-cannot-write-file-overwrite-input.html -import { IDeploymentConfigJson } from "scripts/src/commands/deployment/common"; -import type { ITasks } from "scripts/src/tasks"; +import type { IDeploymentConfigJson } from "data-models"; + +// HACK - we want type-safety for workflow tasks, however the tasks list is part of the +// scripts workspace. Avoid circular imports by direct import from relative path +import type { ITasks } from "../../scripts/src/tasks"; export interface IWorkflowContext { [step_name: string]: { output: any }; diff --git a/packages/workflows/tsconfig.json b/packages/workflows/tsconfig.json new file mode 100644 index 0000000000..e9f6868de3 --- /dev/null +++ b/packages/workflows/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + /* Basic Options */ + "outDir": "dist", + "typeRoots": ["node_modules/@types"], + "declaration": true, + "skipLibCheck": true, + "lib": ["es2016", "dom"], + "target": "es5", + "esModuleInterop": true + }, + "include": ["src/index.ts"], + "exclude": ["**/*.d.ts", "dist", "**/node_modules"] +} diff --git a/src/app/data/app-data.ts b/src/app/data/app-data.ts index bc9a461029..54bd944c26 100644 --- a/src/app/data/app-data.ts +++ b/src/app/data/app-data.ts @@ -1,5 +1,5 @@ import type { FlowTypes } from "data-models"; -import type { IAssetEntry } from "packages/data-models/deployment.model"; +import type { IAssetEntry } from "data-models"; import ASSETS_CONTENT_JSON from "src/assets/app_data/assets/contents.json"; import SHEETS_CONTENT_JSON from "src/assets/app_data/sheets/contents.json"; import TRANSLATIONS_CONTENT_JSON from "src/assets/app_data/translations/contents.json"; diff --git a/src/app/feature/campaign/campaign.service.ts b/src/app/feature/campaign/campaign.service.ts index 535cc36f01..41a8136cfe 100644 --- a/src/app/feature/campaign/campaign.service.ts +++ b/src/app/feature/campaign/campaign.service.ts @@ -1,7 +1,7 @@ import { Injectable, Injector } from "@angular/core"; import { addDays, addSeconds } from "date-fns"; import { addHours, addMinutes, addWeeks, endOfDay, isAfter, isBefore, setISODay } from "date-fns"; -import { extractDynamicFields, IAppConfig } from "packages/data-models"; +import { extractDynamicFields, IAppConfig } from "data-models"; import { Subscription } from "rxjs"; import { TemplateActionService } from "src/app/shared/components/template/services/instance/template-action.service"; import { TemplateTranslateService } from "src/app/shared/components/template/services/template-translate.service"; diff --git a/src/app/feature/feedback/feedback.types.ts b/src/app/feature/feedback/feedback.types.ts index a51af15473..8e0ba7a626 100644 --- a/src/app/feature/feedback/feedback.types.ts +++ b/src/app/feature/feedback/feedback.types.ts @@ -1,5 +1,5 @@ import { DeviceInfo } from "@capacitor/device"; -import { IDBMeta } from "packages/data-models/db.model"; +import { IDBMeta } from "data-models"; import { IContextMenuType } from "src/app/shared/modules/context-menu/context-menu.types"; /** Fields required to include a button in context menus */ diff --git a/src/app/feature/template/template.page.ts b/src/app/feature/template/template.page.ts index 4bdf70af19..37831a0bd8 100644 --- a/src/app/feature/template/template.page.ts +++ b/src/app/feature/template/template.page.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; -import { FlowTypes } from "packages/data-models"; +import { FlowTypes } from "data-models"; import { AppDataService } from "src/app/shared/services/data/app-data.service"; @Component({ diff --git a/src/app/feature/theme/pages/theme-editor/theme-editor.page.ts b/src/app/feature/theme/pages/theme-editor/theme-editor.page.ts index 95e7273254..2a3ee2e530 100644 --- a/src/app/feature/theme/pages/theme-editor/theme-editor.page.ts +++ b/src/app/feature/theme/pages/theme-editor/theme-editor.page.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from "@angular/core"; -import { IAppConfig } from "packages/data-models/appConfig"; +import { IAppConfig } from "data-models"; import { ThemeService } from "../../services/theme.service"; @Component({ diff --git a/src/app/feature/theme/services/theme.service.ts b/src/app/feature/theme/services/theme.service.ts index 104da20233..1d40d89907 100644 --- a/src/app/feature/theme/services/theme.service.ts +++ b/src/app/feature/theme/services/theme.service.ts @@ -2,7 +2,7 @@ import { Injectable } from "@angular/core"; import { BehaviorSubject } from "rxjs"; import { LocalStorageService } from "src/app/shared/services/local-storage/local-storage.service"; import { AppConfigService } from "src/app/shared/services/app-config/app-config.service"; -import { IAppConfig } from "packages/data-models"; +import { IAppConfig } from "data-models"; import { SyncServiceBase } from "src/app/shared/services/syncService.base"; @Injectable({ diff --git a/src/app/shared/components/template/pipes/filter-display-component.pipe.ts b/src/app/shared/components/template/pipes/filter-display-component.pipe.ts index c4e9ffe248..02e4960e2b 100644 --- a/src/app/shared/components/template/pipes/filter-display-component.pipe.ts +++ b/src/app/shared/components/template/pipes/filter-display-component.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from "@angular/core"; -import { FlowTypes } from "packages/data-models"; +import { FlowTypes } from "data-models"; import { TEMPLATE_COMPONENT_MAPPING } from "../components"; /** diff --git a/src/app/shared/components/template/processors/item.ts b/src/app/shared/components/template/processors/item.ts index cb968ce858..61f8a31718 100644 --- a/src/app/shared/components/template/processors/item.ts +++ b/src/app/shared/components/template/processors/item.ts @@ -1,5 +1,8 @@ -// TODO - shared package name conflicts with local shared -import { AppStringEvaluator, TemplatedData } from "packages/shared"; +// NOTE - importing from 'shared' will fail as contains non-browser packages and +// name conflicts with local 'shared' folder. Import full path from packages instead +import { AppStringEvaluator } from "packages/shared/src/models/appStringEvaluator/appStringEvaluator"; +import { TemplatedData } from "packages/shared/src/models/templatedData/templatedData"; + import { shuffleArray } from "src/app/shared/utils"; import { FlowTypes } from "../models"; import { objectToArray } from "../utils"; diff --git a/src/app/shared/components/template/services/instance/template-action.registry.ts b/src/app/shared/components/template/services/instance/template-action.registry.ts index ad103c51a2..0369129867 100644 --- a/src/app/shared/components/template/services/instance/template-action.registry.ts +++ b/src/app/shared/components/template/services/instance/template-action.registry.ts @@ -1,6 +1,6 @@ import { Injectable } from "@angular/core"; import clone from "clone"; -import { FlowTypes } from "packages/data-models"; +import { FlowTypes } from "data-models"; export type IActionId = FlowTypes.TemplateRowAction["action_id"]; export type IActionHandlers = Record< diff --git a/src/app/shared/components/template/services/template-asset.service.ts b/src/app/shared/components/template/services/template-asset.service.ts index a62b804a5b..5d77b68fd8 100644 --- a/src/app/shared/components/template/services/template-asset.service.ts +++ b/src/app/shared/components/template/services/template-asset.service.ts @@ -1,10 +1,9 @@ import { Injectable } from "@angular/core"; -import { Capacitor } from "@capacitor/core"; import { ASSETS_CONTENTS_LIST, IAssetContents } from "src/app/data"; import { ThemeService } from "src/app/feature/theme/services/theme.service"; import { AsyncServiceBase } from "src/app/shared/services/asyncService.base"; import { TemplateTranslateService } from "./template-translate.service"; -import { IAssetEntry, IContentsEntryMinimal } from "packages/data-models/deployment.model"; +import { IAssetEntry, IContentsEntryMinimal } from "data-models"; import { HttpClient } from "@angular/common/http"; import { lastValueFrom } from "rxjs"; diff --git a/src/app/shared/components/template/services/template-field.service.ts b/src/app/shared/components/template/services/template-field.service.ts index cff0be3ac1..9750e2c76b 100644 --- a/src/app/shared/components/template/services/template-field.service.ts +++ b/src/app/shared/components/template/services/template-field.service.ts @@ -1,5 +1,5 @@ import { Injectable } from "@angular/core"; -import { IFlowEvent } from "data-models/db.model"; +import { IFlowEvent } from "data-models"; import { FlowTypes } from "data-models"; import { DbService } from "src/app/shared/services/db/db.service"; import { LocalStorageService } from "src/app/shared/services/local-storage/local-storage.service"; diff --git a/src/app/shared/components/template/services/template-translate.service.ts b/src/app/shared/components/template/services/template-translate.service.ts index 233f0927fb..8b9b605f0f 100644 --- a/src/app/shared/components/template/services/template-translate.service.ts +++ b/src/app/shared/components/template/services/template-translate.service.ts @@ -1,5 +1,5 @@ import { Injectable } from "@angular/core"; -import { IAppConfig } from "packages/data-models"; +import { IAppConfig } from "data-models"; import { BehaviorSubject } from "rxjs"; import { AppConfigService } from "src/app/shared/services/app-config/app-config.service"; import { AsyncServiceBase } from "src/app/shared/services/asyncService.base"; diff --git a/src/app/shared/components/template/services/template.service.ts b/src/app/shared/components/template/services/template.service.ts index 030a293b14..a45d24df3c 100644 --- a/src/app/shared/components/template/services/template.service.ts +++ b/src/app/shared/components/template/services/template.service.ts @@ -6,7 +6,7 @@ import { FlowTypes } from "src/app/shared/model"; import { ModalController } from "@ionic/angular"; import { ITemplatePopupComponentProps, TemplatePopupComponent } from "../components/layout/popup"; import { TemplateTranslateService } from "./template-translate.service"; -import { IFlowEvent } from "data-models/db.model"; +import { IFlowEvent } from "data-models"; import { TemplateVariablesService } from "./template-variables.service"; import { TemplateFieldService } from "./template-field.service"; import { arrayToHashmap } from "src/app/shared/utils"; diff --git a/src/app/shared/services/data/data-evaluation.service.ts b/src/app/shared/services/data/data-evaluation.service.ts index 63b8ed9b32..b4e8747a60 100644 --- a/src/app/shared/services/data/data-evaluation.service.ts +++ b/src/app/shared/services/data/data-evaluation.service.ts @@ -1,6 +1,6 @@ import { Injectable, Injector } from "@angular/core"; import { differenceInHours } from "date-fns"; -import { IDBTable } from "packages/data-models/db.model"; +import { IDBTable } from "data-models"; import { FlowTypes } from "src/app/shared/model"; import { TemplateFieldService } from "../../components/template/services/template-field.service"; import { TemplateVariablesService } from "../../components/template/services/template-variables.service"; diff --git a/src/app/shared/services/db/db-sync.service.ts b/src/app/shared/services/db/db-sync.service.ts index df2efc929b..dd6f3e8e25 100644 --- a/src/app/shared/services/db/db-sync.service.ts +++ b/src/app/shared/services/db/db-sync.service.ts @@ -1,14 +1,13 @@ import { HttpClient } from "@angular/common/http"; import { Injectable } from "@angular/core"; -import { interval } from "packages/api/node_modules/rxjs"; import { DB_SERVER_MAPPING, IDBMeta, IDBServerMapping, IDBServerUserRecord, IDBTable, -} from "packages/data-models/db.model"; -import { lastValueFrom } from "rxjs"; +} from "data-models"; +import { interval, lastValueFrom } from "rxjs"; import { environment } from "src/environments/environment"; import { IAppConfig } from "../../model"; import { AppConfigService } from "../app-config/app-config.service"; diff --git a/src/app/shared/services/db/db.service.ts b/src/app/shared/services/db/db.service.ts index 722e6ef738..3263c8b44d 100644 --- a/src/app/shared/services/db/db.service.ts +++ b/src/app/shared/services/db/db.service.ts @@ -5,14 +5,7 @@ import "dexie-syncable"; // import "./db-sync.service"; import { ICreateChange, IDatabaseChange, IDeleteChange, IUpdateChange } from "dexie-observable/api"; import { Subject } from "rxjs"; -import { - DB_TABLES, - DB_VERSION, - IDBMeta, - IDBEvent, - IDBTable, - IFlowEvent, -} from "data-models/db.model"; +import { DB_TABLES, DB_VERSION, IDBMeta, IDBEvent, IDBTable, IFlowEvent } from "data-models"; import { arrayToHashmapArray, generateTimestamp } from "../../utils"; import { EventService } from "../event/event.service"; import { AsyncServiceBase } from "../asyncService.base"; @@ -24,7 +17,6 @@ window.addEventListener("unhandledrejection", (event) => { let reason = event.reason; console.warn("Unhandled promise rejection:", reason && (reason.stack || reason)); }); - db.version(DB_VERSION).stores(DB_TABLES); @Injectable({ diff --git a/src/app/shared/services/dynamic-data/adapters/persistedMemory.ts b/src/app/shared/services/dynamic-data/adapters/persistedMemory.ts index e067b2b54d..1360dca9df 100644 --- a/src/app/shared/services/dynamic-data/adapters/persistedMemory.ts +++ b/src/app/shared/services/dynamic-data/adapters/persistedMemory.ts @@ -14,7 +14,7 @@ addRxPlugin(RxDBMigrationPlugin); import { RxDBUpdatePlugin } from "rxdb/plugins/update"; addRxPlugin(RxDBUpdatePlugin); -import { FlowTypes } from "packages/data-models"; +import { FlowTypes } from "data-models"; import { environment } from "src/environments/environment"; import { deepMergeObjects, generateTimestamp } from "../../../utils"; diff --git a/src/app/shared/services/dynamic-data/dynamic-data.service.ts b/src/app/shared/services/dynamic-data/dynamic-data.service.ts index a0c6e16bb1..6e2379dd2a 100644 --- a/src/app/shared/services/dynamic-data/dynamic-data.service.ts +++ b/src/app/shared/services/dynamic-data/dynamic-data.service.ts @@ -2,7 +2,7 @@ import { Injectable } from "@angular/core"; import { addRxPlugin, MangoQuery, RxDocument } from "rxdb"; import { firstValueFrom, map } from "rxjs"; -import { FlowTypes } from "packages/data-models"; +import { FlowTypes } from "data-models"; import { environment } from "src/environments/environment"; import { AppDataService } from "../data/app-data.service"; import { AsyncServiceBase } from "../asyncService.base"; diff --git a/src/app/shared/services/notification/local-notification-interaction.service.ts b/src/app/shared/services/notification/local-notification-interaction.service.ts index 68d0e1a7c7..aa6c3831a1 100644 --- a/src/app/shared/services/notification/local-notification-interaction.service.ts +++ b/src/app/shared/services/notification/local-notification-interaction.service.ts @@ -1,6 +1,6 @@ import { Injectable } from "@angular/core"; import type { Table } from "dexie"; -import { IDBMeta } from "packages/data-models/db.model"; +import { IDBMeta } from "data-models"; import { BehaviorSubject } from "rxjs"; import { interval } from "rxjs"; import { debounce, filter } from "rxjs/operators"; diff --git a/src/app/shared/services/server/server.service.ts b/src/app/shared/services/server/server.service.ts index c6c5eeeccc..8ce45f70d3 100644 --- a/src/app/shared/services/server/server.service.ts +++ b/src/app/shared/services/server/server.service.ts @@ -1,7 +1,7 @@ import { HttpClient, HttpErrorResponse } from "@angular/common/http"; import { Injectable } from "@angular/core"; import { DeviceInfo, Device } from "@capacitor/device"; -import { IAppConfig } from "packages/data-models"; +import { IAppConfig } from "data-models"; import { interval } from "rxjs"; import { throwError } from "rxjs"; import { environment } from "src/environments/environment"; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 5c54890889..0d0b7d7fa7 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,7 +1,7 @@ import { firebaseConfig } from "./firebaseConfig"; import packageJson from "../../package.json"; import deploymentJson from "../../.idems_app/deployments/activeDeployment.json"; -import type { IDeploymentConfig } from "packages/data-models"; +import type { IDeploymentConfig } from "data-models"; export const environment = { version: packageJson.version, diff --git a/src/environments/environment.ts b/src/environments/environment.ts index caf9509183..d27f784c68 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -1,7 +1,7 @@ import { firebaseConfig } from "./firebaseConfig"; import packageJson from "../../package.json"; import deploymentJson from "../../.idems_app/deployments/activeDeployment.json"; -import type { IDeploymentConfig } from "packages/data-models"; +import type { IDeploymentConfig } from "data-models"; export const environment = { /** App version, as provided by package.json */ diff --git a/tsconfig.app.json b/tsconfig.app.json index f45d7781bb..f2dda57b84 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -8,6 +8,10 @@ "include": [ "src/**/*.d.ts", "src/app/shared/components/template/components/odk-form/libs/**/*.js", - "src/app/shared/components/template/components/odk-form/libs/**/*.ts" + "src/app/shared/components/template/components/odk-form/libs/**/*.ts", + // Ensure any ts-based packages used by frontend app are listed here + // to allow import/live-reload within angular compiler + "packages/data-models/**/*.ts", + "packages/shared/**/*.ts" ] } diff --git a/yarn.lock b/yarn.lock index 565d015d02..a2988ec72f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11329,7 +11329,6 @@ __metadata: "@types/clone": ^2.1.1 "@types/node": ^16.18.9 clone: ^2.1.2 - scripts: "workspace:*" shared: "workspace:*" typescript: ~4.2.4 languageName: unknown @@ -24486,7 +24485,6 @@ __metadata: data-models: "workspace:*" esbuild: ^0.14.2 fs-extra: ^9.0.1 - glob: ^7.2.0 inquirer: ^7.3.3 jasmine: ^3.99.0 jasmine-spec-reporter: ^7.0.0 @@ -24494,7 +24492,6 @@ __metadata: mock-fs: ^5.2.0 node-rsa: ^1.1.1 nodemon: ^2.0.19 - open: ^9.1.0 p-queue: ^6.6.2 pkg: ^5.5.1 semver: ^7.5.2 @@ -24504,9 +24501,9 @@ __metadata: ts-morph: ^15.0.0 ts-node: ^10.8.0 ts-node-dev: ^1.0.0 - tsimportlib: ^0.0.5 typescript: ^4.1.2 winston: ^3.8.1 + workflows: "workspace:*" xlsx: ^0.18.5 bin: idapp: ./build/commands.js @@ -24931,16 +24928,27 @@ __metadata: version: 0.0.0-use.local resolution: "shared@workspace:packages/shared" dependencies: + "@types/fs-extra": ^9.0.4 + "@types/inquirer": ^7.3.1 "@types/jasmine": ^3.10.6 "@types/node": ^16.11.47 + boxen: ^5.0.1 + chalk: ^4.1.0 character-parser: ^4.0.0 + commander: ^8.3.0 danfojs: ^1.1.1 + fs-extra: ^9.0.1 + glob: ^7.2.0 + inquirer: ^7.3.3 jasmine: ^3.99.0 jasmine-spec-reporter: ^7.0.0 jasmine-ts: ^0.4.0 nodemon: ^2.0.19 + open: ^9.1.0 ts-node: ^10.8.0 + tsimportlib: ^0.0.5 typescript: ^4.1.2 + winston: ^3.8.1 languageName: unknown linkType: soft @@ -28517,6 +28525,16 @@ __metadata: languageName: node linkType: hard +"workflows@workspace:*, workflows@workspace:packages/workflows": + version: 0.0.0-use.local + resolution: "workflows@workspace:packages/workflows" + dependencies: + "@types/node": ^16.18.9 + shared: "workspace:*" + typescript: ~4.2.4 + languageName: unknown + linkType: soft + "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0"