@platforma-sdk/bootstrap 5.2.31 → 5.2.33

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.
Files changed (63) hide show
  1. package/dist/block.cjs +1 -1
  2. package/dist/block.cjs.map +1 -1
  3. package/dist/block.d.ts.map +1 -1
  4. package/dist/block.js +1 -1
  5. package/dist/block.js.map +1 -1
  6. package/dist/cmd-opts.d.ts +36 -36
  7. package/dist/commands/create-block.cjs +2 -2
  8. package/dist/commands/create-block.cjs.map +1 -1
  9. package/dist/commands/create-block.d.ts +1 -1
  10. package/dist/commands/create-block.d.ts.map +1 -1
  11. package/dist/commands/create-block.js +2 -2
  12. package/dist/commands/create-block.js.map +1 -1
  13. package/dist/commands/reset.cjs +1 -1
  14. package/dist/commands/reset.cjs.map +1 -1
  15. package/dist/commands/reset.d.ts +1 -1
  16. package/dist/commands/reset.d.ts.map +1 -1
  17. package/dist/commands/reset.js +1 -1
  18. package/dist/commands/reset.js.map +1 -1
  19. package/dist/commands/start/docker/s3.d.ts +21 -21
  20. package/dist/commands/start/docker.d.ts +21 -21
  21. package/dist/commands/start/local/s3.d.ts +25 -25
  22. package/dist/commands/start/local.d.ts +23 -23
  23. package/dist/commands/start.d.ts +1 -1
  24. package/dist/commands/stop.cjs +1 -1
  25. package/dist/commands/stop.cjs.map +1 -1
  26. package/dist/commands/stop.d.ts +1 -1
  27. package/dist/commands/stop.js +1 -1
  28. package/dist/commands/stop.js.map +1 -1
  29. package/dist/commands/svc/create/arg-parser.cjs +2 -2
  30. package/dist/commands/svc/create/arg-parser.cjs.map +1 -1
  31. package/dist/commands/svc/create/arg-parser.js +2 -2
  32. package/dist/commands/svc/create/arg-parser.js.map +1 -1
  33. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  34. package/dist/commands/svc/create/docker/s3.d.ts +22 -22
  35. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  36. package/dist/commands/svc/create/docker.cjs.map +1 -1
  37. package/dist/commands/svc/create/docker.d.ts +22 -22
  38. package/dist/commands/svc/create/docker.js.map +1 -1
  39. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  40. package/dist/commands/svc/create/local/s3.d.ts +26 -26
  41. package/dist/commands/svc/create/local/s3.js.map +1 -1
  42. package/dist/commands/svc/create/local.cjs.map +1 -1
  43. package/dist/commands/svc/create/local.d.ts +24 -24
  44. package/dist/commands/svc/create/local.js.map +1 -1
  45. package/dist/commands/svc/delete.d.ts +3 -3
  46. package/dist/commands/svc/down.d.ts +2 -2
  47. package/dist/commands/svc/up.d.ts +2 -2
  48. package/dist/index.cjs +0 -1
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +0 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/package.cjs.map +1 -1
  54. package/dist/package.js.map +1 -1
  55. package/dist/templates/pl-config.cjs.map +1 -1
  56. package/dist/templates/pl-config.js.map +1 -1
  57. package/dist/util.cjs +2 -2
  58. package/dist/util.cjs.map +1 -1
  59. package/dist/util.d.ts +1 -1
  60. package/dist/util.d.ts.map +1 -1
  61. package/dist/util.js +2 -2
  62. package/dist/util.js.map +1 -1
  63. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"pl-config.cjs","sources":["../../src/templates/pl-config.ts"],"sourcesContent":["import fs from 'node:fs';\nimport * as types from './types';\nimport { assertNever, resolveTilde } from '../util';\nimport state from '../state';\n\nexport type { plOptions } from './types';\n\nexport function storageSettingsFromURL(\n storageURL: string,\n baseDir?: string,\n defaults?: types.storageOptions,\n): types.storageOptions {\n storageURL = resolveTilde(storageURL);\n const url = new URL(storageURL, `file:${baseDir}`);\n\n switch (url.protocol) {\n case 's3:': {\n const bucketName = url.hostname;\n const region = url.searchParams.get('region');\n const keyPrefix = url.pathname.slice(1); // 's3://bucket/' will have '/' as pathname. We don't want to always have '/' prefix\n\n return {\n ...defaults,\n\n type: 'S3',\n bucketName,\n region,\n keyPrefix,\n } as types.storageOptions;\n }\n case 's3e:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `http://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 's3es:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `https://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 'file:':\n return {\n type: 'FS',\n rootPath: url.pathname,\n };\n\n default:\n throw new Error(`storage protocol '${url.protocol}' is not supported`);\n }\n}\n\nexport function loadDefaults(jwtKey: string, options?: types.plOptions): types.plSettings {\n const localRoot = options?.localRoot ?? state.instanceDir('default');\n\n const log: types.logSettings = {\n level: options?.log?.level ?? 'info',\n path: options?.log?.path ?? `${localRoot}/logs/platforma.log`,\n };\n\n const grpc: types.grpcSettings = {\n listen: options?.grpc?.listen ?? 'localhost:6345',\n tls: {\n enable: defaultBool(options?.grpc?.tls?.enable, false),\n clientAuthMode: options?.grpc?.tls?.clientAuthMode ?? 'NoAuth',\n certFile: options?.grpc?.tls?.certFile ?? `${localRoot}/certs/tls.cert`,\n keyFile: options?.grpc?.tls?.keyFile ?? `${localRoot}/certs/tls.key`,\n\n ...options?.grpc?.tls,\n },\n };\n\n const core: types.coreSettings = {\n auth: {\n enabled: options?.core?.auth?.enabled ?? false,\n drivers: options?.core?.auth?.drivers ?? [\n { driver: 'jwt', key: jwtKey },\n { driver: 'htpasswd', path: `${localRoot}/users.htpasswd` },\n ],\n },\n db: {\n path: `${localRoot}/db`,\n },\n };\n\n const primary = defaultStorageSettings(\n 'main',\n `${localRoot}/storages/main`,\n 'platforma-primary-bucket',\n options?.storages?.primary,\n );\n\n let work: types.storageSettings;\n const wType = options?.storages?.work?.type;\n switch (wType) {\n case undefined:\n case 'FS':\n work = types.emptyFSSettings('work');\n work.rootPath = options?.storages?.work?.rootPath ?? `${localRoot}/storages/work`;\n work.indexCachePeriod = options?.storages?.work?.indexCachePeriod ?? '1m';\n break;\n\n default:\n throw new Error('work storage MUST have \\'FS\\' type as it is used for working directories management');\n }\n\n const library = defaultStorageSettings(\n 'library',\n `${localRoot}/storages/library`,\n 'platforma-library-bucket',\n options?.storages?.library,\n );\n\n const monitoring: types.monitoringSettings = {\n enabled: defaultBool(options?.monitoring?.enabled, true),\n listen: options?.monitoring?.listen ?? '127.0.0.1:9090',\n };\n const debug: types.debugSettings = {\n enabled: defaultBool(options?.debug?.enabled, true),\n listen: options?.debug?.listen ?? '127.0.0.1:9091',\n };\n const license: types.licenseSettings = {\n value: options?.license?.value ?? '',\n file: options?.license?.file ?? '',\n };\n\n return {\n localRoot,\n license,\n log,\n grpc,\n core,\n monitoring,\n debug,\n numCpu: options?.numCpu,\n storages: { primary, work, library },\n hacks: { libraryDownloadable: true },\n };\n}\n\nfunction defaultStorageSettings(\n storageID: string,\n defaultLocation: string,\n defaultBucket: string,\n options?: types.storageOptions,\n): types.storageSettings {\n let storage: types.storageSettings;\n const pType = options?.type;\n switch (pType) {\n case undefined:\n case 'FS':\n storage = types.emptyFSSettings(storageID);\n storage.rootPath = options?.rootPath ?? defaultLocation;\n break;\n\n case 'S3':\n storage = types.emptyS3Settings(storageID);\n\n storage.endpoint = options?.endpoint;\n storage.region = options?.region;\n storage.presignEndpoint = options?.presignEndpoint ?? options?.endpoint;\n storage.bucketName = options?.bucketName ?? defaultBucket;\n storage.createBucket = defaultBool(options?.createBucket, true);\n storage.forcePathStyle = defaultBool(options?.forcePathStyle, true);\n storage.key = options?.key ?? '';\n storage.secret = options?.secret ?? '';\n storage.keyPrefix = options?.keyPrefix ?? '';\n storage.accessPrefixes = options?.accessPrefixes ?? [''];\n storage.uploadKeyPrefix = options?.uploadKeyPrefix ?? '';\n break;\n\n default:\n assertNever(pType);\n throw new Error('unknown storage type'); // calm down TS type analyzer\n }\n\n return storage;\n}\n\nexport function render(options: types.plSettings): string {\n const disableMon = options.monitoring.enabled ? '' : ' disabled';\n const disableDbg = options.debug.enabled ? '' : ' disabled';\n const libraryDownloadable = options.hacks.libraryDownloadable ? 'true' : 'false';\n let miLicenseSecret = options.license.value;\n if (options.license.file != '') {\n miLicenseSecret = fs.readFileSync(options.license.file).toString().trimEnd();\n }\n\n let cpuLimit = ''\n if (options.numCpu) {\n cpuLimit = `\n resources:\n cpu: ${options.numCpu}\n`;\n }\n\n return `\nlicense:\n value: '${options.license.value}'\n file: '${options.license.file}'\n\nlogging:\n level: '${options.log.level}'\n destinations:\n - path: '${options.log.path}'\n rotation:\n maxSize: 1GiB\n maxBackups: 15\n compress: true\n\nmonitoring${disableMon}:\n listen: '${options.monitoring.listen}'\n\ndebug${disableDbg}:\n listen: '${options.debug.listen}'\n\ncore:\n logging:\n extendedInfo: true\n dumpResourceData: false\n\n grpc:\n listen: '${options.grpc.listen}'\n\n tlsEnabled: ${JSON.stringify(options.grpc.tls.enable)}\n tls:\n clientAuthMode: '${options.grpc.tls.clientAuthMode}'\n certificates:\n - certFile: '${options.grpc.tls.certFile}'\n keyFile: '${options.grpc.tls.keyFile}'\n\n\n authEnabled: ${JSON.stringify(options.core.auth.enabled)}\n auth: ${JSON.stringify(options.core.auth.drivers)}\n db:\n path: '${options.core.db.path}'\n\ncontrollers:\n data:\n main:\n storages:\n main:\n mode: primary\n downloadable: true\n\n library:\n mode: passive\n downloadable: ${libraryDownloadable}\n\n work:\n mode: active\n downloadable: false\n\n storages:\n - ${JSON.stringify(options.storages.primary)}\n - ${JSON.stringify(options.storages.library)}\n - ${JSON.stringify(options.storages.work)}\n\n runner:\n type: local\n storageRoot: '${(options.storages.work).rootPath}'\n workdirCacheOnSuccess: 20m\n workdirCacheOnFailure: 1h\n${cpuLimit}\n secrets:\n - map:\n MI_LICENSE: ${JSON.stringify(miLicenseSecret)}\n\n packageLoader:\n packagesRoot: '${options.localRoot}/packages'\n\n workflows:\n features:\n pureFutureFields: true\n commandExpressions: true\n workdirLimits: true\n computeLimits: false\n`;\n}\n\nfunction defaultBool(v: boolean | undefined, def: boolean): boolean {\n return v === undefined ? def : v;\n}\n"],"names":["resolveTilde","types.emptyFSSettings","types.emptyS3Settings","assertNever"],"mappings":"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"}
1
+ {"version":3,"file":"pl-config.cjs","sources":["../../src/templates/pl-config.ts"],"sourcesContent":["import fs from 'node:fs';\nimport * as types from './types';\nimport { assertNever, resolveTilde } from '../util';\nimport state from '../state';\n\nexport type { plOptions } from './types';\n\nexport function storageSettingsFromURL(\n storageURL: string,\n baseDir?: string,\n defaults?: types.storageOptions,\n): types.storageOptions {\n storageURL = resolveTilde(storageURL);\n const url = new URL(storageURL, `file:${baseDir}`);\n\n switch (url.protocol) {\n case 's3:': {\n const bucketName = url.hostname;\n const region = url.searchParams.get('region');\n const keyPrefix = url.pathname.slice(1); // 's3://bucket/' will have '/' as pathname. We don't want to always have '/' prefix\n\n return {\n ...defaults,\n\n type: 'S3',\n bucketName,\n region,\n keyPrefix,\n } as types.storageOptions;\n }\n case 's3e:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `http://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 's3es:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `https://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 'file:':\n return {\n type: 'FS',\n rootPath: url.pathname,\n };\n\n default:\n throw new Error(`storage protocol '${url.protocol}' is not supported`);\n }\n}\n\nexport function loadDefaults(jwtKey: string, options?: types.plOptions): types.plSettings {\n const localRoot = options?.localRoot ?? state.instanceDir('default');\n\n const log: types.logSettings = {\n level: options?.log?.level ?? 'info',\n path: options?.log?.path ?? `${localRoot}/logs/platforma.log`,\n };\n\n const grpc: types.grpcSettings = {\n listen: options?.grpc?.listen ?? 'localhost:6345',\n tls: {\n enable: defaultBool(options?.grpc?.tls?.enable, false),\n clientAuthMode: options?.grpc?.tls?.clientAuthMode ?? 'NoAuth',\n certFile: options?.grpc?.tls?.certFile ?? `${localRoot}/certs/tls.cert`,\n keyFile: options?.grpc?.tls?.keyFile ?? `${localRoot}/certs/tls.key`,\n\n ...options?.grpc?.tls,\n },\n };\n\n const core: types.coreSettings = {\n auth: {\n enabled: options?.core?.auth?.enabled ?? false,\n drivers: options?.core?.auth?.drivers ?? [\n { driver: 'jwt', key: jwtKey },\n { driver: 'htpasswd', path: `${localRoot}/users.htpasswd` },\n ],\n },\n db: {\n path: `${localRoot}/db`,\n },\n };\n\n const primary = defaultStorageSettings(\n 'main',\n `${localRoot}/storages/main`,\n 'platforma-primary-bucket',\n options?.storages?.primary,\n );\n\n let work: types.storageSettings;\n const wType = options?.storages?.work?.type;\n switch (wType) {\n case undefined:\n case 'FS':\n work = types.emptyFSSettings('work');\n work.rootPath = options?.storages?.work?.rootPath ?? `${localRoot}/storages/work`;\n work.indexCachePeriod = options?.storages?.work?.indexCachePeriod ?? '1m';\n break;\n\n default:\n throw new Error('work storage MUST have \\'FS\\' type as it is used for working directories management');\n }\n\n const library = defaultStorageSettings(\n 'library',\n `${localRoot}/storages/library`,\n 'platforma-library-bucket',\n options?.storages?.library,\n );\n\n const monitoring: types.monitoringSettings = {\n enabled: defaultBool(options?.monitoring?.enabled, true),\n listen: options?.monitoring?.listen ?? '127.0.0.1:9090',\n };\n const debug: types.debugSettings = {\n enabled: defaultBool(options?.debug?.enabled, true),\n listen: options?.debug?.listen ?? '127.0.0.1:9091',\n };\n const license: types.licenseSettings = {\n value: options?.license?.value ?? '',\n file: options?.license?.file ?? '',\n };\n\n return {\n localRoot,\n license,\n log,\n grpc,\n core,\n monitoring,\n debug,\n numCpu: options?.numCpu,\n storages: { primary, work, library },\n hacks: { libraryDownloadable: true },\n };\n}\n\nfunction defaultStorageSettings(\n storageID: string,\n defaultLocation: string,\n defaultBucket: string,\n options?: types.storageOptions,\n): types.storageSettings {\n let storage: types.storageSettings;\n const pType = options?.type;\n switch (pType) {\n case undefined:\n case 'FS':\n storage = types.emptyFSSettings(storageID);\n storage.rootPath = options?.rootPath ?? defaultLocation;\n break;\n\n case 'S3':\n storage = types.emptyS3Settings(storageID);\n\n storage.endpoint = options?.endpoint;\n storage.region = options?.region;\n storage.presignEndpoint = options?.presignEndpoint ?? options?.endpoint;\n storage.bucketName = options?.bucketName ?? defaultBucket;\n storage.createBucket = defaultBool(options?.createBucket, true);\n storage.forcePathStyle = defaultBool(options?.forcePathStyle, true);\n storage.key = options?.key ?? '';\n storage.secret = options?.secret ?? '';\n storage.keyPrefix = options?.keyPrefix ?? '';\n storage.accessPrefixes = options?.accessPrefixes ?? [''];\n storage.uploadKeyPrefix = options?.uploadKeyPrefix ?? '';\n break;\n\n default:\n assertNever(pType);\n throw new Error('unknown storage type'); // calm down TS type analyzer\n }\n\n return storage;\n}\n\nexport function render(options: types.plSettings): string {\n const disableMon = options.monitoring.enabled ? '' : ' disabled';\n const disableDbg = options.debug.enabled ? '' : ' disabled';\n const libraryDownloadable = options.hacks.libraryDownloadable ? 'true' : 'false';\n let miLicenseSecret = options.license.value;\n if (options.license.file != '') {\n miLicenseSecret = fs.readFileSync(options.license.file).toString().trimEnd();\n }\n\n let cpuLimit = '';\n if (options.numCpu) {\n cpuLimit = `\n resources:\n cpu: ${options.numCpu}\n`;\n }\n\n return `\nlicense:\n value: '${options.license.value}'\n file: '${options.license.file}'\n\nlogging:\n level: '${options.log.level}'\n destinations:\n - path: '${options.log.path}'\n rotation:\n maxSize: 1GiB\n maxBackups: 15\n compress: true\n\nmonitoring${disableMon}:\n listen: '${options.monitoring.listen}'\n\ndebug${disableDbg}:\n listen: '${options.debug.listen}'\n\ncore:\n logging:\n extendedInfo: true\n dumpResourceData: false\n\n grpc:\n listen: '${options.grpc.listen}'\n\n tlsEnabled: ${JSON.stringify(options.grpc.tls.enable)}\n tls:\n clientAuthMode: '${options.grpc.tls.clientAuthMode}'\n certificates:\n - certFile: '${options.grpc.tls.certFile}'\n keyFile: '${options.grpc.tls.keyFile}'\n\n\n authEnabled: ${JSON.stringify(options.core.auth.enabled)}\n auth: ${JSON.stringify(options.core.auth.drivers)}\n db:\n path: '${options.core.db.path}'\n\ncontrollers:\n data:\n main:\n storages:\n main:\n mode: primary\n downloadable: true\n\n library:\n mode: passive\n downloadable: ${libraryDownloadable}\n\n work:\n mode: active\n downloadable: false\n\n storages:\n - ${JSON.stringify(options.storages.primary)}\n - ${JSON.stringify(options.storages.library)}\n - ${JSON.stringify(options.storages.work)}\n\n runner:\n type: local\n storageRoot: '${(options.storages.work).rootPath}'\n workdirCacheOnSuccess: 20m\n workdirCacheOnFailure: 1h\n${cpuLimit}\n secrets:\n - map:\n MI_LICENSE: ${JSON.stringify(miLicenseSecret)}\n\n packageLoader:\n packagesRoot: '${options.localRoot}/packages'\n\n workflows:\n features:\n pureFutureFields: true\n commandExpressions: true\n workdirLimits: true\n computeLimits: false\n`;\n}\n\nfunction defaultBool(v: boolean | undefined, def: boolean): boolean {\n return v === undefined ? def : v;\n}\n"],"names":["resolveTilde","types.emptyFSSettings","types.emptyS3Settings","assertNever"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pl-config.js","sources":["../../src/templates/pl-config.ts"],"sourcesContent":["import fs from 'node:fs';\nimport * as types from './types';\nimport { assertNever, resolveTilde } from '../util';\nimport state from '../state';\n\nexport type { plOptions } from './types';\n\nexport function storageSettingsFromURL(\n storageURL: string,\n baseDir?: string,\n defaults?: types.storageOptions,\n): types.storageOptions {\n storageURL = resolveTilde(storageURL);\n const url = new URL(storageURL, `file:${baseDir}`);\n\n switch (url.protocol) {\n case 's3:': {\n const bucketName = url.hostname;\n const region = url.searchParams.get('region');\n const keyPrefix = url.pathname.slice(1); // 's3://bucket/' will have '/' as pathname. We don't want to always have '/' prefix\n\n return {\n ...defaults,\n\n type: 'S3',\n bucketName,\n region,\n keyPrefix,\n } as types.storageOptions;\n }\n case 's3e:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `http://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 's3es:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `https://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 'file:':\n return {\n type: 'FS',\n rootPath: url.pathname,\n };\n\n default:\n throw new Error(`storage protocol '${url.protocol}' is not supported`);\n }\n}\n\nexport function loadDefaults(jwtKey: string, options?: types.plOptions): types.plSettings {\n const localRoot = options?.localRoot ?? state.instanceDir('default');\n\n const log: types.logSettings = {\n level: options?.log?.level ?? 'info',\n path: options?.log?.path ?? `${localRoot}/logs/platforma.log`,\n };\n\n const grpc: types.grpcSettings = {\n listen: options?.grpc?.listen ?? 'localhost:6345',\n tls: {\n enable: defaultBool(options?.grpc?.tls?.enable, false),\n clientAuthMode: options?.grpc?.tls?.clientAuthMode ?? 'NoAuth',\n certFile: options?.grpc?.tls?.certFile ?? `${localRoot}/certs/tls.cert`,\n keyFile: options?.grpc?.tls?.keyFile ?? `${localRoot}/certs/tls.key`,\n\n ...options?.grpc?.tls,\n },\n };\n\n const core: types.coreSettings = {\n auth: {\n enabled: options?.core?.auth?.enabled ?? false,\n drivers: options?.core?.auth?.drivers ?? [\n { driver: 'jwt', key: jwtKey },\n { driver: 'htpasswd', path: `${localRoot}/users.htpasswd` },\n ],\n },\n db: {\n path: `${localRoot}/db`,\n },\n };\n\n const primary = defaultStorageSettings(\n 'main',\n `${localRoot}/storages/main`,\n 'platforma-primary-bucket',\n options?.storages?.primary,\n );\n\n let work: types.storageSettings;\n const wType = options?.storages?.work?.type;\n switch (wType) {\n case undefined:\n case 'FS':\n work = types.emptyFSSettings('work');\n work.rootPath = options?.storages?.work?.rootPath ?? `${localRoot}/storages/work`;\n work.indexCachePeriod = options?.storages?.work?.indexCachePeriod ?? '1m';\n break;\n\n default:\n throw new Error('work storage MUST have \\'FS\\' type as it is used for working directories management');\n }\n\n const library = defaultStorageSettings(\n 'library',\n `${localRoot}/storages/library`,\n 'platforma-library-bucket',\n options?.storages?.library,\n );\n\n const monitoring: types.monitoringSettings = {\n enabled: defaultBool(options?.monitoring?.enabled, true),\n listen: options?.monitoring?.listen ?? '127.0.0.1:9090',\n };\n const debug: types.debugSettings = {\n enabled: defaultBool(options?.debug?.enabled, true),\n listen: options?.debug?.listen ?? '127.0.0.1:9091',\n };\n const license: types.licenseSettings = {\n value: options?.license?.value ?? '',\n file: options?.license?.file ?? '',\n };\n\n return {\n localRoot,\n license,\n log,\n grpc,\n core,\n monitoring,\n debug,\n numCpu: options?.numCpu,\n storages: { primary, work, library },\n hacks: { libraryDownloadable: true },\n };\n}\n\nfunction defaultStorageSettings(\n storageID: string,\n defaultLocation: string,\n defaultBucket: string,\n options?: types.storageOptions,\n): types.storageSettings {\n let storage: types.storageSettings;\n const pType = options?.type;\n switch (pType) {\n case undefined:\n case 'FS':\n storage = types.emptyFSSettings(storageID);\n storage.rootPath = options?.rootPath ?? defaultLocation;\n break;\n\n case 'S3':\n storage = types.emptyS3Settings(storageID);\n\n storage.endpoint = options?.endpoint;\n storage.region = options?.region;\n storage.presignEndpoint = options?.presignEndpoint ?? options?.endpoint;\n storage.bucketName = options?.bucketName ?? defaultBucket;\n storage.createBucket = defaultBool(options?.createBucket, true);\n storage.forcePathStyle = defaultBool(options?.forcePathStyle, true);\n storage.key = options?.key ?? '';\n storage.secret = options?.secret ?? '';\n storage.keyPrefix = options?.keyPrefix ?? '';\n storage.accessPrefixes = options?.accessPrefixes ?? [''];\n storage.uploadKeyPrefix = options?.uploadKeyPrefix ?? '';\n break;\n\n default:\n assertNever(pType);\n throw new Error('unknown storage type'); // calm down TS type analyzer\n }\n\n return storage;\n}\n\nexport function render(options: types.plSettings): string {\n const disableMon = options.monitoring.enabled ? '' : ' disabled';\n const disableDbg = options.debug.enabled ? '' : ' disabled';\n const libraryDownloadable = options.hacks.libraryDownloadable ? 'true' : 'false';\n let miLicenseSecret = options.license.value;\n if (options.license.file != '') {\n miLicenseSecret = fs.readFileSync(options.license.file).toString().trimEnd();\n }\n\n let cpuLimit = ''\n if (options.numCpu) {\n cpuLimit = `\n resources:\n cpu: ${options.numCpu}\n`;\n }\n\n return `\nlicense:\n value: '${options.license.value}'\n file: '${options.license.file}'\n\nlogging:\n level: '${options.log.level}'\n destinations:\n - path: '${options.log.path}'\n rotation:\n maxSize: 1GiB\n maxBackups: 15\n compress: true\n\nmonitoring${disableMon}:\n listen: '${options.monitoring.listen}'\n\ndebug${disableDbg}:\n listen: '${options.debug.listen}'\n\ncore:\n logging:\n extendedInfo: true\n dumpResourceData: false\n\n grpc:\n listen: '${options.grpc.listen}'\n\n tlsEnabled: ${JSON.stringify(options.grpc.tls.enable)}\n tls:\n clientAuthMode: '${options.grpc.tls.clientAuthMode}'\n certificates:\n - certFile: '${options.grpc.tls.certFile}'\n keyFile: '${options.grpc.tls.keyFile}'\n\n\n authEnabled: ${JSON.stringify(options.core.auth.enabled)}\n auth: ${JSON.stringify(options.core.auth.drivers)}\n db:\n path: '${options.core.db.path}'\n\ncontrollers:\n data:\n main:\n storages:\n main:\n mode: primary\n downloadable: true\n\n library:\n mode: passive\n downloadable: ${libraryDownloadable}\n\n work:\n mode: active\n downloadable: false\n\n storages:\n - ${JSON.stringify(options.storages.primary)}\n - ${JSON.stringify(options.storages.library)}\n - ${JSON.stringify(options.storages.work)}\n\n runner:\n type: local\n storageRoot: '${(options.storages.work).rootPath}'\n workdirCacheOnSuccess: 20m\n workdirCacheOnFailure: 1h\n${cpuLimit}\n secrets:\n - map:\n MI_LICENSE: ${JSON.stringify(miLicenseSecret)}\n\n packageLoader:\n packagesRoot: '${options.localRoot}/packages'\n\n workflows:\n features:\n pureFutureFields: true\n commandExpressions: true\n workdirLimits: true\n computeLimits: false\n`;\n}\n\nfunction defaultBool(v: boolean | undefined, def: boolean): boolean {\n return v === undefined ? def : v;\n}\n"],"names":["types.emptyFSSettings","types.emptyS3Settings","fs"],"mappings":"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"}
1
+ {"version":3,"file":"pl-config.js","sources":["../../src/templates/pl-config.ts"],"sourcesContent":["import fs from 'node:fs';\nimport * as types from './types';\nimport { assertNever, resolveTilde } from '../util';\nimport state from '../state';\n\nexport type { plOptions } from './types';\n\nexport function storageSettingsFromURL(\n storageURL: string,\n baseDir?: string,\n defaults?: types.storageOptions,\n): types.storageOptions {\n storageURL = resolveTilde(storageURL);\n const url = new URL(storageURL, `file:${baseDir}`);\n\n switch (url.protocol) {\n case 's3:': {\n const bucketName = url.hostname;\n const region = url.searchParams.get('region');\n const keyPrefix = url.pathname.slice(1); // 's3://bucket/' will have '/' as pathname. We don't want to always have '/' prefix\n\n return {\n ...defaults,\n\n type: 'S3',\n bucketName,\n region,\n keyPrefix,\n } as types.storageOptions;\n }\n case 's3e:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `http://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 's3es:': {\n const p = url.pathname.split('/').slice(1); // '/bucket/key/prefix' -> ['', 'bucket', 'key' 'prefix'] -> ['bucket', 'key', 'prefix']\n const bucketName = p[0];\n const keyPrefix = p.length > 1 ? p.slice(1).join('/') : '';\n\n return {\n ...defaults,\n\n type: 'S3',\n endpoint: `https://${url.host}/`,\n bucketName,\n keyPrefix,\n region: url.searchParams.get('region'),\n key: url.username ? `static:${url.username}` : '',\n secret: url.password ? `static:${url.password}` : '',\n } as types.storageOptions;\n }\n case 'file:':\n return {\n type: 'FS',\n rootPath: url.pathname,\n };\n\n default:\n throw new Error(`storage protocol '${url.protocol}' is not supported`);\n }\n}\n\nexport function loadDefaults(jwtKey: string, options?: types.plOptions): types.plSettings {\n const localRoot = options?.localRoot ?? state.instanceDir('default');\n\n const log: types.logSettings = {\n level: options?.log?.level ?? 'info',\n path: options?.log?.path ?? `${localRoot}/logs/platforma.log`,\n };\n\n const grpc: types.grpcSettings = {\n listen: options?.grpc?.listen ?? 'localhost:6345',\n tls: {\n enable: defaultBool(options?.grpc?.tls?.enable, false),\n clientAuthMode: options?.grpc?.tls?.clientAuthMode ?? 'NoAuth',\n certFile: options?.grpc?.tls?.certFile ?? `${localRoot}/certs/tls.cert`,\n keyFile: options?.grpc?.tls?.keyFile ?? `${localRoot}/certs/tls.key`,\n\n ...options?.grpc?.tls,\n },\n };\n\n const core: types.coreSettings = {\n auth: {\n enabled: options?.core?.auth?.enabled ?? false,\n drivers: options?.core?.auth?.drivers ?? [\n { driver: 'jwt', key: jwtKey },\n { driver: 'htpasswd', path: `${localRoot}/users.htpasswd` },\n ],\n },\n db: {\n path: `${localRoot}/db`,\n },\n };\n\n const primary = defaultStorageSettings(\n 'main',\n `${localRoot}/storages/main`,\n 'platforma-primary-bucket',\n options?.storages?.primary,\n );\n\n let work: types.storageSettings;\n const wType = options?.storages?.work?.type;\n switch (wType) {\n case undefined:\n case 'FS':\n work = types.emptyFSSettings('work');\n work.rootPath = options?.storages?.work?.rootPath ?? `${localRoot}/storages/work`;\n work.indexCachePeriod = options?.storages?.work?.indexCachePeriod ?? '1m';\n break;\n\n default:\n throw new Error('work storage MUST have \\'FS\\' type as it is used for working directories management');\n }\n\n const library = defaultStorageSettings(\n 'library',\n `${localRoot}/storages/library`,\n 'platforma-library-bucket',\n options?.storages?.library,\n );\n\n const monitoring: types.monitoringSettings = {\n enabled: defaultBool(options?.monitoring?.enabled, true),\n listen: options?.monitoring?.listen ?? '127.0.0.1:9090',\n };\n const debug: types.debugSettings = {\n enabled: defaultBool(options?.debug?.enabled, true),\n listen: options?.debug?.listen ?? '127.0.0.1:9091',\n };\n const license: types.licenseSettings = {\n value: options?.license?.value ?? '',\n file: options?.license?.file ?? '',\n };\n\n return {\n localRoot,\n license,\n log,\n grpc,\n core,\n monitoring,\n debug,\n numCpu: options?.numCpu,\n storages: { primary, work, library },\n hacks: { libraryDownloadable: true },\n };\n}\n\nfunction defaultStorageSettings(\n storageID: string,\n defaultLocation: string,\n defaultBucket: string,\n options?: types.storageOptions,\n): types.storageSettings {\n let storage: types.storageSettings;\n const pType = options?.type;\n switch (pType) {\n case undefined:\n case 'FS':\n storage = types.emptyFSSettings(storageID);\n storage.rootPath = options?.rootPath ?? defaultLocation;\n break;\n\n case 'S3':\n storage = types.emptyS3Settings(storageID);\n\n storage.endpoint = options?.endpoint;\n storage.region = options?.region;\n storage.presignEndpoint = options?.presignEndpoint ?? options?.endpoint;\n storage.bucketName = options?.bucketName ?? defaultBucket;\n storage.createBucket = defaultBool(options?.createBucket, true);\n storage.forcePathStyle = defaultBool(options?.forcePathStyle, true);\n storage.key = options?.key ?? '';\n storage.secret = options?.secret ?? '';\n storage.keyPrefix = options?.keyPrefix ?? '';\n storage.accessPrefixes = options?.accessPrefixes ?? [''];\n storage.uploadKeyPrefix = options?.uploadKeyPrefix ?? '';\n break;\n\n default:\n assertNever(pType);\n throw new Error('unknown storage type'); // calm down TS type analyzer\n }\n\n return storage;\n}\n\nexport function render(options: types.plSettings): string {\n const disableMon = options.monitoring.enabled ? '' : ' disabled';\n const disableDbg = options.debug.enabled ? '' : ' disabled';\n const libraryDownloadable = options.hacks.libraryDownloadable ? 'true' : 'false';\n let miLicenseSecret = options.license.value;\n if (options.license.file != '') {\n miLicenseSecret = fs.readFileSync(options.license.file).toString().trimEnd();\n }\n\n let cpuLimit = '';\n if (options.numCpu) {\n cpuLimit = `\n resources:\n cpu: ${options.numCpu}\n`;\n }\n\n return `\nlicense:\n value: '${options.license.value}'\n file: '${options.license.file}'\n\nlogging:\n level: '${options.log.level}'\n destinations:\n - path: '${options.log.path}'\n rotation:\n maxSize: 1GiB\n maxBackups: 15\n compress: true\n\nmonitoring${disableMon}:\n listen: '${options.monitoring.listen}'\n\ndebug${disableDbg}:\n listen: '${options.debug.listen}'\n\ncore:\n logging:\n extendedInfo: true\n dumpResourceData: false\n\n grpc:\n listen: '${options.grpc.listen}'\n\n tlsEnabled: ${JSON.stringify(options.grpc.tls.enable)}\n tls:\n clientAuthMode: '${options.grpc.tls.clientAuthMode}'\n certificates:\n - certFile: '${options.grpc.tls.certFile}'\n keyFile: '${options.grpc.tls.keyFile}'\n\n\n authEnabled: ${JSON.stringify(options.core.auth.enabled)}\n auth: ${JSON.stringify(options.core.auth.drivers)}\n db:\n path: '${options.core.db.path}'\n\ncontrollers:\n data:\n main:\n storages:\n main:\n mode: primary\n downloadable: true\n\n library:\n mode: passive\n downloadable: ${libraryDownloadable}\n\n work:\n mode: active\n downloadable: false\n\n storages:\n - ${JSON.stringify(options.storages.primary)}\n - ${JSON.stringify(options.storages.library)}\n - ${JSON.stringify(options.storages.work)}\n\n runner:\n type: local\n storageRoot: '${(options.storages.work).rootPath}'\n workdirCacheOnSuccess: 20m\n workdirCacheOnFailure: 1h\n${cpuLimit}\n secrets:\n - map:\n MI_LICENSE: ${JSON.stringify(miLicenseSecret)}\n\n packageLoader:\n packagesRoot: '${options.localRoot}/packages'\n\n workflows:\n features:\n pureFutureFields: true\n commandExpressions: true\n workdirLimits: true\n computeLimits: false\n`;\n}\n\nfunction defaultBool(v: boolean | undefined, def: boolean): boolean {\n return v === undefined ? def : v;\n}\n"],"names":["types.emptyFSSettings","types.emptyS3Settings","fs"],"mappings":"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"}
package/dist/util.cjs CHANGED
@@ -12,7 +12,7 @@ function askYN(prompt) {
12
12
  const answer = readlineSync.question(`${prompt} [y/N] `);
13
13
  return answer.toLowerCase() === 'y';
14
14
  }
15
- function assertNever(n) {
15
+ function assertNever(_n) {
16
16
  throw new Error('this should never happen');
17
17
  }
18
18
  function createLogger(level = 'debug') {
@@ -72,7 +72,7 @@ function getProcessName(pid) {
72
72
  }
73
73
  return lines[1].trim();
74
74
  }
75
- catch (e) {
75
+ catch (_e) {
76
76
  return '';
77
77
  }
78
78
  }
package/dist/util.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.cjs","sources":["../src/util.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nimport winston from 'winston';\nimport { randomBytes } from 'node:crypto';\nimport readlineSync from 'readline-sync';\n\nexport function askYN(prompt: string): boolean {\n const answer = readlineSync.question(`${prompt} [y/N] `);\n return answer.toLowerCase() === 'y';\n}\n\nexport function assertNever(n: never) {\n throw new Error('this should never happen');\n}\n\nexport function createLogger(level: string = 'debug'): winston.Logger {\n return winston.createLogger({\n level: level,\n\n format: winston.format.printf(({ level, message }) => {\n const indent = ' '.repeat(level.length + 2); // For ': ' after the level\n if (typeof message !== 'string') {\n const messageJson = JSON.stringify(message);\n throw Error(`logger message ${messageJson} is not a string`);\n }\n const indentedMessage = message\n .split('\\n')\n .map((line: string, index: number) => (index === 0 ? line : indent + line))\n .join('\\n');\n\n const colorize = (l: string) => winston.format.colorize().colorize(l, l);\n\n return `${colorize(level)}: ${indentedMessage}`;\n }),\n\n transports: [\n new winston.transports.Console({\n stderrLevels: ['error', 'warn', 'info', 'debug'],\n handleExceptions: true,\n }),\n ],\n });\n}\n\nexport function randomStr(len: number): string {\n return randomBytes(Math.ceil(len / 2))\n .toString('hex')\n .slice(0, len);\n}\n\nexport function resolveTilde(p: string): string {\n if (p.startsWith('~')) {\n return path.join(os.homedir(), p.slice(1));\n }\n return p;\n}\n\nexport function ensureDir(p: string, options?: {\n mode?: fs.Mode;\n}) {\n if (fs.existsSync(p)) {\n return;\n }\n\n fs.mkdirSync(p, { recursive: true });\n if (options?.mode) {\n fs.chmodSync(p, options.mode);\n }\n}\n\nexport function getProcessName(pid: number): string {\n try {\n if (os.platform() !== 'win32') {\n return execSync(`ps -p ${pid} -o comm=`, { encoding: 'utf8' }).trim();\n }\n\n const command = `wmic process where processid=${pid} get Caption`;\n const lines = execSync(command, { encoding: 'utf8' }).split('\\n');\n\n // lines = [\"Caption:\", \"<process name>\"]\n if (lines.length <= 1) {\n return '';\n }\n\n return lines[1].trim();\n } catch (e) {\n return '';\n }\n}\n\nexport type dockerComposeStatus = {\n Name: string;\n Status: string;\n ConfigFiles: string;\n};\n\nexport function getDockerComposeInfo(serviceName: string): dockerComposeStatus | undefined {\n const result = execSync(`docker compose ls --filter name=${serviceName} --format json`, { encoding: 'utf8' }).trim();\n\n const report = JSON.parse(result) as dockerComposeStatus[];\n\n for (const st of report) {\n if (st.Name === serviceName) {\n return st;\n }\n }\n\n return undefined;\n}\n"],"names":["randomBytes","execSync"],"mappings":";;;;;;;;;;AASM,SAAU,KAAK,CAAC,MAAc,EAAA;IAClC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA,EAAG,MAAM,CAAA,OAAA,CAAS,CAAC;AACxD,IAAA,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG;AACrC;AAEM,SAAU,WAAW,CAAC,CAAQ,EAAA;AAClC,IAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;AAC7C;AAEM,SAAU,YAAY,CAAC,KAAA,GAAgB,OAAO,EAAA;IAClD,OAAO,OAAO,CAAC,YAAY,CAAC;AAC1B,QAAA,KAAK,EAAE,KAAK;AAEZ,QAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAI;AACnD,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC3C,gBAAA,MAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,WAAW,CAAA,gBAAA,CAAkB,CAAC;YAC9D;YACA,MAAM,eAAe,GAAG;iBACrB,KAAK,CAAC,IAAI;iBACV,GAAG,CAAC,CAAC,IAAY,EAAE,KAAa,MAAM,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;iBACzE,IAAI,CAAC,IAAI,CAAC;YAEb,MAAM,QAAQ,GAAG,CAAC,CAAS,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAExE,OAAO,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,eAAe,EAAE;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,UAAU,EAAE;AACV,YAAA,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAChD,gBAAA,gBAAgB,EAAE,IAAI;aACvB,CAAC;AACH,SAAA;AACF,KAAA,CAAC;AACJ;AAEM,SAAU,SAAS,CAAC,GAAW,EAAA;IACnC,OAAOA,uBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;SAClC,QAAQ,CAAC,KAAK;AACd,SAAA,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;AAClB;AAEM,SAAU,YAAY,CAAC,CAAS,EAAA;AACpC,IAAA,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACrB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C;AACA,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,SAAS,CAAC,CAAS,EAAE,OAEpC,EAAA;AACC,IAAA,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QACpB;IACF;IAEA,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpC,IAAA,IAAI,OAAO,EAAE,IAAI,EAAE;QACjB,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;IAC/B;AACF;AAEM,SAAU,cAAc,CAAC,GAAW,EAAA;AACxC,IAAA,IAAI;AACF,QAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE;AAC7B,YAAA,OAAOC,2BAAQ,CAAC,CAAA,MAAA,EAAS,GAAG,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE;QACvE;AAEA,QAAA,MAAM,OAAO,GAAG,CAAA,6BAAA,EAAgC,GAAG,cAAc;AACjE,QAAA,MAAM,KAAK,GAAGA,2BAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;;AAGjE,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACrB,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IACxB;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,EAAE;IACX;AACF;AAQM,SAAU,oBAAoB,CAAC,WAAmB,EAAA;AACtD,IAAA,MAAM,MAAM,GAAGA,2BAAQ,CAAC,CAAA,gCAAA,EAAmC,WAAW,CAAA,cAAA,CAAgB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE;IAEpH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA0B;AAE1D,IAAA,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;AACvB,QAAA,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE;AAC3B,YAAA,OAAO,EAAE;QACX;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;;;;;;;;;;;"}
1
+ {"version":3,"file":"util.cjs","sources":["../src/util.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nimport winston from 'winston';\nimport { randomBytes } from 'node:crypto';\nimport readlineSync from 'readline-sync';\n\nexport function askYN(prompt: string): boolean {\n const answer = readlineSync.question(`${prompt} [y/N] `);\n return answer.toLowerCase() === 'y';\n}\n\nexport function assertNever(_n: never) {\n throw new Error('this should never happen');\n}\n\nexport function createLogger(level: string = 'debug'): winston.Logger {\n return winston.createLogger({\n level: level,\n\n format: winston.format.printf(({ level, message }) => {\n const indent = ' '.repeat(level.length + 2); // For ': ' after the level\n if (typeof message !== 'string') {\n const messageJson = JSON.stringify(message);\n throw Error(`logger message ${messageJson} is not a string`);\n }\n const indentedMessage = message\n .split('\\n')\n .map((line: string, index: number) => (index === 0 ? line : indent + line))\n .join('\\n');\n\n const colorize = (l: string) => winston.format.colorize().colorize(l, l);\n\n return `${colorize(level)}: ${indentedMessage}`;\n }),\n\n transports: [\n new winston.transports.Console({\n stderrLevels: ['error', 'warn', 'info', 'debug'],\n handleExceptions: true,\n }),\n ],\n });\n}\n\nexport function randomStr(len: number): string {\n return randomBytes(Math.ceil(len / 2))\n .toString('hex')\n .slice(0, len);\n}\n\nexport function resolveTilde(p: string): string {\n if (p.startsWith('~')) {\n return path.join(os.homedir(), p.slice(1));\n }\n return p;\n}\n\nexport function ensureDir(p: string, options?: {\n mode?: fs.Mode;\n}) {\n if (fs.existsSync(p)) {\n return;\n }\n\n fs.mkdirSync(p, { recursive: true });\n if (options?.mode) {\n fs.chmodSync(p, options.mode);\n }\n}\n\nexport function getProcessName(pid: number): string {\n try {\n if (os.platform() !== 'win32') {\n return execSync(`ps -p ${pid} -o comm=`, { encoding: 'utf8' }).trim();\n }\n\n const command = `wmic process where processid=${pid} get Caption`;\n const lines = execSync(command, { encoding: 'utf8' }).split('\\n');\n\n // lines = [\"Caption:\", \"<process name>\"]\n if (lines.length <= 1) {\n return '';\n }\n\n return lines[1].trim();\n } catch (_e) {\n return '';\n }\n}\n\nexport type dockerComposeStatus = {\n Name: string;\n Status: string;\n ConfigFiles: string;\n};\n\nexport function getDockerComposeInfo(serviceName: string): dockerComposeStatus | undefined {\n const result = execSync(`docker compose ls --filter name=${serviceName} --format json`, { encoding: 'utf8' }).trim();\n\n const report = JSON.parse(result) as dockerComposeStatus[];\n\n for (const st of report) {\n if (st.Name === serviceName) {\n return st;\n }\n }\n\n return undefined;\n}\n"],"names":["randomBytes","execSync"],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import winston from 'winston';
3
3
  export declare function askYN(prompt: string): boolean;
4
- export declare function assertNever(n: never): void;
4
+ export declare function assertNever(_n: never): void;
5
5
  export declare function createLogger(level?: string): winston.Logger;
6
6
  export declare function randomStr(len: number): string;
7
7
  export declare function resolveTilde(p: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,QAEnC;AAED,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CA2BpE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC7C,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;CAChB,QASA;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBlD;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAYzF"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AAIzB,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,KAAK,QAEpC;AAED,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAgB,GAAG,OAAO,CAAC,MAAM,CA2BpE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC7C,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;CAChB,QASA;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBlD;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAYzF"}
package/dist/util.js CHANGED
@@ -10,7 +10,7 @@ function askYN(prompt) {
10
10
  const answer = readlineSync.question(`${prompt} [y/N] `);
11
11
  return answer.toLowerCase() === 'y';
12
12
  }
13
- function assertNever(n) {
13
+ function assertNever(_n) {
14
14
  throw new Error('this should never happen');
15
15
  }
16
16
  function createLogger(level = 'debug') {
@@ -70,7 +70,7 @@ function getProcessName(pid) {
70
70
  }
71
71
  return lines[1].trim();
72
72
  }
73
- catch (e) {
73
+ catch (_e) {
74
74
  return '';
75
75
  }
76
76
  }
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nimport winston from 'winston';\nimport { randomBytes } from 'node:crypto';\nimport readlineSync from 'readline-sync';\n\nexport function askYN(prompt: string): boolean {\n const answer = readlineSync.question(`${prompt} [y/N] `);\n return answer.toLowerCase() === 'y';\n}\n\nexport function assertNever(n: never) {\n throw new Error('this should never happen');\n}\n\nexport function createLogger(level: string = 'debug'): winston.Logger {\n return winston.createLogger({\n level: level,\n\n format: winston.format.printf(({ level, message }) => {\n const indent = ' '.repeat(level.length + 2); // For ': ' after the level\n if (typeof message !== 'string') {\n const messageJson = JSON.stringify(message);\n throw Error(`logger message ${messageJson} is not a string`);\n }\n const indentedMessage = message\n .split('\\n')\n .map((line: string, index: number) => (index === 0 ? line : indent + line))\n .join('\\n');\n\n const colorize = (l: string) => winston.format.colorize().colorize(l, l);\n\n return `${colorize(level)}: ${indentedMessage}`;\n }),\n\n transports: [\n new winston.transports.Console({\n stderrLevels: ['error', 'warn', 'info', 'debug'],\n handleExceptions: true,\n }),\n ],\n });\n}\n\nexport function randomStr(len: number): string {\n return randomBytes(Math.ceil(len / 2))\n .toString('hex')\n .slice(0, len);\n}\n\nexport function resolveTilde(p: string): string {\n if (p.startsWith('~')) {\n return path.join(os.homedir(), p.slice(1));\n }\n return p;\n}\n\nexport function ensureDir(p: string, options?: {\n mode?: fs.Mode;\n}) {\n if (fs.existsSync(p)) {\n return;\n }\n\n fs.mkdirSync(p, { recursive: true });\n if (options?.mode) {\n fs.chmodSync(p, options.mode);\n }\n}\n\nexport function getProcessName(pid: number): string {\n try {\n if (os.platform() !== 'win32') {\n return execSync(`ps -p ${pid} -o comm=`, { encoding: 'utf8' }).trim();\n }\n\n const command = `wmic process where processid=${pid} get Caption`;\n const lines = execSync(command, { encoding: 'utf8' }).split('\\n');\n\n // lines = [\"Caption:\", \"<process name>\"]\n if (lines.length <= 1) {\n return '';\n }\n\n return lines[1].trim();\n } catch (e) {\n return '';\n }\n}\n\nexport type dockerComposeStatus = {\n Name: string;\n Status: string;\n ConfigFiles: string;\n};\n\nexport function getDockerComposeInfo(serviceName: string): dockerComposeStatus | undefined {\n const result = execSync(`docker compose ls --filter name=${serviceName} --format json`, { encoding: 'utf8' }).trim();\n\n const report = JSON.parse(result) as dockerComposeStatus[];\n\n for (const st of report) {\n if (st.Name === serviceName) {\n return st;\n }\n }\n\n return undefined;\n}\n"],"names":["os","fs"],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\n\nimport winston from 'winston';\nimport { randomBytes } from 'node:crypto';\nimport readlineSync from 'readline-sync';\n\nexport function askYN(prompt: string): boolean {\n const answer = readlineSync.question(`${prompt} [y/N] `);\n return answer.toLowerCase() === 'y';\n}\n\nexport function assertNever(_n: never) {\n throw new Error('this should never happen');\n}\n\nexport function createLogger(level: string = 'debug'): winston.Logger {\n return winston.createLogger({\n level: level,\n\n format: winston.format.printf(({ level, message }) => {\n const indent = ' '.repeat(level.length + 2); // For ': ' after the level\n if (typeof message !== 'string') {\n const messageJson = JSON.stringify(message);\n throw Error(`logger message ${messageJson} is not a string`);\n }\n const indentedMessage = message\n .split('\\n')\n .map((line: string, index: number) => (index === 0 ? line : indent + line))\n .join('\\n');\n\n const colorize = (l: string) => winston.format.colorize().colorize(l, l);\n\n return `${colorize(level)}: ${indentedMessage}`;\n }),\n\n transports: [\n new winston.transports.Console({\n stderrLevels: ['error', 'warn', 'info', 'debug'],\n handleExceptions: true,\n }),\n ],\n });\n}\n\nexport function randomStr(len: number): string {\n return randomBytes(Math.ceil(len / 2))\n .toString('hex')\n .slice(0, len);\n}\n\nexport function resolveTilde(p: string): string {\n if (p.startsWith('~')) {\n return path.join(os.homedir(), p.slice(1));\n }\n return p;\n}\n\nexport function ensureDir(p: string, options?: {\n mode?: fs.Mode;\n}) {\n if (fs.existsSync(p)) {\n return;\n }\n\n fs.mkdirSync(p, { recursive: true });\n if (options?.mode) {\n fs.chmodSync(p, options.mode);\n }\n}\n\nexport function getProcessName(pid: number): string {\n try {\n if (os.platform() !== 'win32') {\n return execSync(`ps -p ${pid} -o comm=`, { encoding: 'utf8' }).trim();\n }\n\n const command = `wmic process where processid=${pid} get Caption`;\n const lines = execSync(command, { encoding: 'utf8' }).split('\\n');\n\n // lines = [\"Caption:\", \"<process name>\"]\n if (lines.length <= 1) {\n return '';\n }\n\n return lines[1].trim();\n } catch (_e) {\n return '';\n }\n}\n\nexport type dockerComposeStatus = {\n Name: string;\n Status: string;\n ConfigFiles: string;\n};\n\nexport function getDockerComposeInfo(serviceName: string): dockerComposeStatus | undefined {\n const result = execSync(`docker compose ls --filter name=${serviceName} --format json`, { encoding: 'utf8' }).trim();\n\n const report = JSON.parse(result) as dockerComposeStatus[];\n\n for (const st of report) {\n if (st.Name === serviceName) {\n return st;\n }\n }\n\n return undefined;\n}\n"],"names":["os","fs"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/bootstrap",
3
- "version": "5.2.31",
3
+ "version": "5.2.33",
4
4
  "description": "MiLaboratories Platforma Backend bootstrap code: configuration generators, service run wrappers and so on",
5
5
  "bin": {
6
6
  "pl-dev": "./bin/run.js"
@@ -19,13 +19,13 @@
19
19
  "@types/decompress": "^4.2.7",
20
20
  "@types/node": "~24.5.2",
21
21
  "@types/readline-sync": "^1.4.8",
22
- "prettier": "^3.4.1",
22
+ "eslint": "^9.25.1",
23
23
  "ts-node": "^10.9.2",
24
24
  "typescript": "~5.6.3",
25
- "@milaboratories/build-configs": "1.0.9",
26
25
  "@milaboratories/oclif-index": "1.1.1",
27
- "@milaboratories/ts-configs": "1.0.6",
28
- "@milaboratories/ts-builder": "1.0.6",
26
+ "@milaboratories/ts-builder": "1.2.1",
27
+ "@milaboratories/build-configs": "1.2.1",
28
+ "@milaboratories/ts-configs": "1.2.0",
29
29
  "@milaboratories/eslint-config": "1.0.5"
30
30
  },
31
31
  "dependencies": {
@@ -37,7 +37,7 @@
37
37
  "winston": "^3.17.0",
38
38
  "yaml": "^2.8.0",
39
39
  "zod": "~3.23.8",
40
- "@milaboratories/pl-deployments": "2.13.1"
40
+ "@milaboratories/pl-deployments": "2.14.1"
41
41
  },
42
42
  "oclif": {
43
43
  "bin": "pl-dev",
@@ -53,6 +53,7 @@
53
53
  "type-check": "ts-builder types --target node",
54
54
  "build": "oclif-index && ts-builder build --target node",
55
55
  "watch": "ts-builder build --target node --watch",
56
- "do-pack": "rm -f *.tgz && pnpm pack && mv *.tgz package.tgz"
56
+ "do-pack": "rm -f *.tgz && pnpm pack && mv *.tgz package.tgz",
57
+ "lint": "eslint ."
57
58
  }
58
59
  }