@ms-cloudpack/api-server 0.12.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/lib/apis/addPackageOverride.d.ts +2 -0
  2. package/lib/apis/ensurePackageBundled.d.ts +484 -0
  3. package/lib/apis/ensurePackageBundled.d.ts.map +1 -0
  4. package/lib/apis/ensurePackageBundled.js +106 -0
  5. package/lib/apis/ensurePackageBundled.js.map +1 -0
  6. package/lib/apis/getData.d.ts +2 -0
  7. package/lib/apis/getSessionId.d.ts +2 -0
  8. package/lib/apis/index.d.ts +2 -0
  9. package/lib/apis/index.d.ts.map +1 -1
  10. package/lib/apis/index.js +2 -0
  11. package/lib/apis/index.js.map +1 -1
  12. package/lib/apis/onDataChanged.d.ts +2 -0
  13. package/lib/apis/openCodeEditor.d.ts +2 -0
  14. package/lib/apis/openConfigEditor.d.ts +2 -0
  15. package/lib/apis/openFilePath.d.ts +2 -0
  16. package/lib/apis/reportMetric.d.ts +2 -0
  17. package/lib/apis/syncDownload.d.ts +57 -0
  18. package/lib/apis/syncDownload.d.ts.map +1 -0
  19. package/lib/apis/syncDownload.js +12 -0
  20. package/lib/apis/syncDownload.js.map +1 -0
  21. package/lib/apis/syncUpload.d.ts +57 -0
  22. package/lib/apis/syncUpload.d.ts.map +1 -0
  23. package/lib/apis/syncUpload.js +12 -0
  24. package/lib/apis/syncUpload.js.map +1 -0
  25. package/lib/apis/validatePackageOverride.d.ts +2 -0
  26. package/lib/common/prepareOutputPath.d.ts +5 -0
  27. package/lib/common/prepareOutputPath.d.ts.map +1 -0
  28. package/lib/common/prepareOutputPath.js +14 -0
  29. package/lib/common/prepareOutputPath.js.map +1 -0
  30. package/lib/index.d.ts +9 -1
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +7 -1
  33. package/lib/index.js.map +1 -1
  34. package/lib/trpc/common.d.ts +3 -0
  35. package/lib/trpc/common.d.ts.map +1 -1
  36. package/lib/trpc/createAppRouter.d.ts +107 -0
  37. package/lib/trpc/createAppRouter.d.ts.map +1 -1
  38. package/lib/trpc/createCloudpackServer.d.ts +3 -0
  39. package/lib/trpc/createCloudpackServer.d.ts.map +1 -1
  40. package/lib/trpc/createContextFactory.d.ts +2 -0
  41. package/lib/trpc/createContextFactory.d.ts.map +1 -1
  42. package/lib/trpc/createContextFactory.js +4 -0
  43. package/lib/trpc/createContextFactory.js.map +1 -1
  44. package/lib/trpc/createRouterFromApis.d.ts +1 -0
  45. package/lib/trpc/createRouterFromApis.d.ts.map +1 -1
  46. package/lib/types/BundleRequest.d.ts +16 -0
  47. package/lib/types/BundleRequest.d.ts.map +1 -1
  48. package/lib/types/BundleRequest.js.map +1 -1
  49. package/lib/types/BundleTaskOptions.d.ts +4 -0
  50. package/lib/types/BundleTaskOptions.d.ts.map +1 -0
  51. package/lib/types/BundleTaskOptions.js +2 -0
  52. package/lib/types/BundleTaskOptions.js.map +1 -0
  53. package/lib/types/TaskMessage.d.ts +2 -2
  54. package/lib/types/TaskResponse.d.ts +12 -12
  55. package/lib/types/TaskResult.d.ts +8 -8
  56. package/lib/utilities/bundleTask.d.ts +9 -0
  57. package/lib/utilities/bundleTask.d.ts.map +1 -0
  58. package/lib/utilities/bundleTask.js +119 -0
  59. package/lib/utilities/bundleTask.js.map +1 -0
  60. package/lib/utilities/createBundleRequestForPackage.d.ts +11 -0
  61. package/lib/utilities/createBundleRequestForPackage.d.ts.map +1 -0
  62. package/lib/utilities/createBundleRequestForPackage.js +21 -0
  63. package/lib/utilities/createBundleRequestForPackage.js.map +1 -0
  64. package/lib/utilities/createBundleTask.d.ts +10 -0
  65. package/lib/utilities/createBundleTask.d.ts.map +1 -0
  66. package/lib/utilities/createBundleTask.js +42 -0
  67. package/lib/utilities/createBundleTask.js.map +1 -0
  68. package/lib/utilities/ensureRemoteCacheEnabled.d.ts +11 -0
  69. package/lib/utilities/ensureRemoteCacheEnabled.d.ts.map +1 -0
  70. package/lib/utilities/ensureRemoteCacheEnabled.js +12 -0
  71. package/lib/utilities/ensureRemoteCacheEnabled.js.map +1 -0
  72. package/lib/utilities/findImports.d.ts +6 -0
  73. package/lib/utilities/findImports.d.ts.map +1 -0
  74. package/lib/utilities/findImports.js +75 -0
  75. package/lib/utilities/findImports.js.map +1 -0
  76. package/lib/utilities/formatBundleErrors.d.ts +9 -0
  77. package/lib/utilities/formatBundleErrors.d.ts.map +1 -0
  78. package/lib/utilities/formatBundleErrors.js +19 -0
  79. package/lib/utilities/formatBundleErrors.js.map +1 -0
  80. package/lib/utilities/getBundleDetails.d.ts +14 -0
  81. package/lib/utilities/getBundleDetails.d.ts.map +1 -0
  82. package/lib/utilities/getBundleDetails.js +35 -0
  83. package/lib/utilities/getBundleDetails.js.map +1 -0
  84. package/lib/utilities/getFileSizeSync.d.ts +5 -0
  85. package/lib/utilities/getFileSizeSync.d.ts.map +1 -0
  86. package/lib/utilities/getFileSizeSync.js +16 -0
  87. package/lib/utilities/getFileSizeSync.js.map +1 -0
  88. package/lib/utilities/hashPackage.d.ts +6 -0
  89. package/lib/utilities/hashPackage.d.ts.map +1 -0
  90. package/lib/utilities/hashPackage.js +21 -0
  91. package/lib/utilities/hashPackage.js.map +1 -0
  92. package/package.json +10 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBundleTask.js","sourceRoot":"","sources":["../../src/utilities/createBundleTask.ts"],"names":[],"mappings":"AAKA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAA4B,EAC5B,OAA2B,EAC3B,QAAuB;IAEvB,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;IAExF,OAAO;QACL,IAAI,EAAE,UAAU,WAAW,IAAI,OAAO,EAAE;QACxC,EAAE;QACF,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;QACvC,KAAK,EAAE,CAAC,UAAU;QAClB,KAAK,CAAC,OAAO;YACX,MAAM,UAAU,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEvD,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YAClC,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC;YACjC,gFAAgF;YAChF,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QACpC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAgC;QACvE,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;YAC1B,EAAE;YACF,IAAI,EAAE,UAAU,WAAW,IAAI,OAAO,EAAE;YACxC,SAAS,EAAE,WAAW,IAAI,EAAE;YAC5B,UAAU;SACX,CAAC;QACF,iBAAiB,EAAE,CAAC,UAAU,EAAE,EAAE,CAChC,CAAC;YACC,EAAE;YACF,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;YAClC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ;SACvC,CAAuB;KAC3B,CAAC;AACJ,CAAC","sourcesContent":["import type { BundleTaskOptions } from '../types/BundleTaskOptions.js';\nimport type { BundleRequest } from '../types/BundleRequest.js';\nimport type { Task } from '../types/Task.js';\nimport type { TaskError } from '../types/TaskError.js';\nimport type { TaskEndDescription } from '../types/TaskEndDescription.js';\nimport path from 'path';\nimport fs from 'fs';\nimport { bundleTask } from './/bundleTask.js';\nimport type { TaskReporter } from '@ms-cloudpack/task-reporter';\n\n/**\n * Creates a bundle task tracked in the task runner of the api server. This allows active tasks to be tracked\n * remotely (e.g. in the browser) and allows the user to cancel tasks.\n */\nexport function createBundleTask(\n bundleRequest: BundleRequest,\n options?: BundleTaskOptions,\n reporter?: TaskReporter,\n): Task<BundleRequest> {\n const { id, packageName, version, outputPath, packagePath, isExternal } = bundleRequest;\n\n return {\n name: `Bundle ${packageName}@${version}`,\n id,\n dir: `${path.join(packagePath, 'src')}`,\n watch: !isExternal,\n async execute(): Promise<BundleRequest> {\n await bundleTask({ bundleRequest, options, reporter });\n\n return bundleRequest;\n },\n clear: () => {\n bundleRequest.result?.dispose?.();\n bundleRequest.result = undefined;\n // eslint-disable-next-line no-restricted-syntax -- this function can't be async\n fs.rmSync(outputPath, { recursive: true, force: true });\n },\n onDispose: () => {\n bundleRequest.result?.dispose?.();\n },\n getErrors: () => bundleRequest.result?.errors as unknown as TaskError[],\n getStartDescription: () => ({\n id,\n name: `Bundle ${packageName}@${version}`,\n inputPath: packagePath || '',\n outputPath,\n }),\n getEndDescription: (taskResult) =>\n ({\n id,\n errors: taskResult?.result?.errors,\n warnings: taskResult?.result?.warnings,\n }) as TaskEndDescription,\n };\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { CloudpackConfig } from '@ms-cloudpack/config';
2
+ /**
3
+ * Ensures that the remote cache is enabled in the config.
4
+ * @param config - The cloudpack config.
5
+ * @returns - The remote cache configuration.
6
+ */
7
+ export declare function ensureRemoteCacheEnabled({ remoteCache }: CloudpackConfig): {
8
+ storageAccount: string;
9
+ container: string;
10
+ };
11
+ //# sourceMappingURL=ensureRemoteCacheEnabled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureRemoteCacheEnabled.d.ts","sourceRoot":"","sources":["../../src/utilities/ensureRemoteCacheEnabled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,WAAW,EAAE,EAAE,eAAe;;;EAMxE"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Ensures that the remote cache is enabled in the config.
3
+ * @param config - The cloudpack config.
4
+ * @returns - The remote cache configuration.
5
+ */
6
+ export function ensureRemoteCacheEnabled({ remoteCache }) {
7
+ if (!remoteCache) {
8
+ throw new Error('Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file.');
9
+ }
10
+ return remoteCache;
11
+ }
12
+ //# sourceMappingURL=ensureRemoteCacheEnabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureRemoteCacheEnabled.js","sourceRoot":"","sources":["../../src/utilities/ensureRemoteCacheEnabled.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAE,WAAW,EAAmB;IACvE,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;KAC/G;IAED,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import type { CloudpackConfig } from '@ms-cloudpack/config';\n\n/**\n * Ensures that the remote cache is enabled in the config.\n * @param config - The cloudpack config.\n * @returns - The remote cache configuration.\n */\nexport function ensureRemoteCacheEnabled({ remoteCache }: CloudpackConfig) {\n if (!remoteCache) {\n throw new Error('Remote cache is not configured. Please add remoteCache to your cloudpack.config.json file.');\n }\n\n return remoteCache;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Returns a dictionary where key is the package name and value is a set of required paths.
3
+ * Eg. `{ '@fluentui/react': new Set([ '.', './lib/Button' ]) }`
4
+ */
5
+ export declare function findImports(filePaths: string[]): Promise<Record<string, Set<string>>>;
6
+ //# sourceMappingURL=findImports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findImports.d.ts","sourceRoot":"","sources":["../../src/utilities/findImports.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAsE3F"}
@@ -0,0 +1,75 @@
1
+ import { parse } from 'es-module-lexer';
2
+ import fsPromises from 'fs/promises';
3
+ import path from 'path';
4
+ import { parseImportString } from '@ms-cloudpack/path-string-parsing';
5
+ import { sourceExtensions } from '@ms-cloudpack/path-utilities';
6
+ import { builtinModules } from 'module';
7
+ /** Treat files with no extension as JS for purposes below */
8
+ const allSourceExtensions = [...sourceExtensions, ''];
9
+ /**
10
+ * Returns a dictionary where key is the package name and value is a set of required paths.
11
+ * Eg. `{ '@fluentui/react': new Set([ '.', './lib/Button' ]) }`
12
+ */
13
+ export async function findImports(filePaths) {
14
+ const requiredExports = {};
15
+ const visitedPaths = new Set(filePaths);
16
+ const pathsToParse = [...filePaths];
17
+ while (pathsToParse.length) {
18
+ const filePath = pathsToParse.shift();
19
+ // Ignore any non-JS/TS files such as SVGs and sourcemaps
20
+ if (!filePath || !allSourceExtensions.includes(path.extname(filePath))) {
21
+ continue;
22
+ }
23
+ const source = await fsPromises.readFile(filePath, 'utf-8');
24
+ let rawImports;
25
+ try {
26
+ [rawImports] = parse(source);
27
+ }
28
+ catch (err) {
29
+ // This could happen if the source file isn't valid JS
30
+ // (unlikely after adding the check above to only attempt parsing JS/TS files)
31
+ const stack = err instanceof Error ? err.stack : '';
32
+ const type = typeof err;
33
+ console.warn(`Failed to parse ${filePath}:`, err, 'Type', type, 'Stack', stack, '\nSource is:\n', source);
34
+ continue;
35
+ }
36
+ const imports = Array.from(new Set(rawImports))
37
+ .map((i) => {
38
+ // The es-module-lexer returns entries where the "n" property equals the import source.
39
+ // This includes the package name and path. For example, in this case:
40
+ //
41
+ // import { Button } from '@fluentui/react/lib/Button';
42
+ //
43
+ // The "n" property would be "@fluentui/react/lib/Button".
44
+ // The "s" and "e" properties represent the start/end character positions of
45
+ // the import source. The "ss" and "se" properties represent the start/end
46
+ // character positions of the import specifier starting with "import". This
47
+ // may be useful for determining if the import is sync or async.
48
+ //
49
+ // Currently when the import source is a backtick string, the "n" property
50
+ // is undefined. This is a bug in es-module-lexer. We may need to handle this
51
+ // at the javascript layer and expand it into multiple potential imports.
52
+ if (!i.n) {
53
+ console.debug(`Found an import that didn't parse correctly:\nFilename:\n${filePath}\n\nImport:\n${source.slice(i.s, i.e)}`);
54
+ return undefined;
55
+ }
56
+ return parseImportString(i.n);
57
+ })
58
+ .filter(Boolean);
59
+ for (const { packageName, importPath } of imports) {
60
+ if (packageName?.startsWith('.')) {
61
+ const localPath = path.resolve(path.dirname(filePath), packageName, importPath || '');
62
+ if (!visitedPaths.has(localPath)) {
63
+ visitedPaths.add(localPath);
64
+ pathsToParse.push(localPath);
65
+ }
66
+ }
67
+ else if (packageName && !packageName.startsWith('node:') && !builtinModules.includes(packageName)) {
68
+ requiredExports[packageName] ??= new Set();
69
+ requiredExports[packageName].add(importPath || '.');
70
+ }
71
+ }
72
+ }
73
+ return requiredExports;
74
+ }
75
+ //# sourceMappingURL=findImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findImports.js","sourceRoot":"","sources":["../../src/utilities/findImports.ts"],"names":[],"mappings":"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","sourcesContent":["import { parse } from 'es-module-lexer';\nimport fsPromises from 'fs/promises';\nimport path from 'path';\nimport { parseImportString, type ImportStringResult } from '@ms-cloudpack/path-string-parsing';\nimport { sourceExtensions } from '@ms-cloudpack/path-utilities';\nimport { builtinModules } from 'module';\n\n/** Treat files with no extension as JS for purposes below */\nconst allSourceExtensions = [...sourceExtensions, ''];\n\n/**\n * Returns a dictionary where key is the package name and value is a set of required paths.\n * Eg. `{ '@fluentui/react': new Set([ '.', './lib/Button' ]) }`\n */\nexport async function findImports(filePaths: string[]): Promise<Record<string, Set<string>>> {\n const requiredExports: Record<string, Set<string>> = {};\n const visitedPaths = new Set(filePaths);\n const pathsToParse: string[] = [...filePaths];\n\n while (pathsToParse.length) {\n const filePath = pathsToParse.shift();\n // Ignore any non-JS/TS files such as SVGs and sourcemaps\n if (!filePath || !allSourceExtensions.includes(path.extname(filePath))) {\n continue;\n }\n\n const source = await fsPromises.readFile(filePath, 'utf-8');\n let rawImports: ReturnType<typeof parse>[0];\n try {\n [rawImports] = parse(source);\n } catch (err) {\n // This could happen if the source file isn't valid JS\n // (unlikely after adding the check above to only attempt parsing JS/TS files)\n const stack = err instanceof Error ? err.stack : '';\n const type = typeof err;\n console.warn(`Failed to parse ${filePath}:`, err, 'Type', type, 'Stack', stack, '\\nSource is:\\n', source);\n continue;\n }\n const imports = Array.from(new Set(rawImports))\n .map((i) => {\n // The es-module-lexer returns entries where the \"n\" property equals the import source.\n // This includes the package name and path. For example, in this case:\n //\n // import { Button } from '@fluentui/react/lib/Button';\n //\n // The \"n\" property would be \"@fluentui/react/lib/Button\".\n // The \"s\" and \"e\" properties represent the start/end character positions of\n // the import source. The \"ss\" and \"se\" properties represent the start/end\n // character positions of the import specifier starting with \"import\". This\n // may be useful for determining if the import is sync or async.\n //\n // Currently when the import source is a backtick string, the \"n\" property\n // is undefined. This is a bug in es-module-lexer. We may need to handle this\n // at the javascript layer and expand it into multiple potential imports.\n if (!i.n) {\n console.debug(\n `Found an import that didn't parse correctly:\\nFilename:\\n${filePath}\\n\\nImport:\\n${source.slice(\n i.s,\n i.e,\n )}`,\n );\n return undefined;\n }\n\n return parseImportString(i.n);\n })\n .filter(Boolean) as ImportStringResult[];\n\n for (const { packageName, importPath } of imports) {\n if (packageName?.startsWith('.')) {\n const localPath = path.resolve(path.dirname(filePath), packageName, importPath || '');\n\n if (!visitedPaths.has(localPath)) {\n visitedPaths.add(localPath);\n pathsToParse.push(localPath);\n }\n } else if (packageName && !packageName.startsWith('node:') && !builtinModules.includes(packageName)) {\n requiredExports[packageName] ??= new Set();\n requiredExports[packageName].add(importPath || '.');\n }\n }\n }\n\n return requiredExports;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { BundleMessage } from '@ms-cloudpack/bundler-types';
2
+ export declare function formatBundleErrors(errors: BundleMessage[] | undefined): {
3
+ message?: undefined;
4
+ details?: undefined;
5
+ } | {
6
+ message: string;
7
+ details: string;
8
+ };
9
+ //# sourceMappingURL=formatBundleErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatBundleErrors.d.ts","sourceRoot":"","sources":["../../src/utilities/formatBundleErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS;;;;;;EAOrE"}
@@ -0,0 +1,19 @@
1
+ import { darkGrey, red, bulletedList } from '@ms-cloudpack/task-reporter';
2
+ export function formatBundleErrors(errors) {
3
+ if (!errors?.length)
4
+ return {};
5
+ return {
6
+ message: `${errors.length} ${errors.length === 1 ? 'error' : 'errors'} found`,
7
+ details: bulletedList(errors.map((error) => formatError(error))),
8
+ };
9
+ }
10
+ function formatError(error) {
11
+ const { location } = error;
12
+ return [
13
+ location && darkGrey(`${location.file}:${location.line}:${location.column}:`),
14
+ red(error.text ? error.text : JSON.stringify(error, null, 2)),
15
+ ]
16
+ .filter(Boolean)
17
+ .join(' ');
18
+ }
19
+ //# sourceMappingURL=formatBundleErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatBundleErrors.js","sourceRoot":"","sources":["../../src/utilities/formatBundleErrors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE1E,MAAM,UAAU,kBAAkB,CAAC,MAAmC;IACpE,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAE/B,OAAO;QACL,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ;QAC7E,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE3B,OAAO;QACL,QAAQ,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC7E,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KAC9D;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC","sourcesContent":["import type { BundleMessage } from '@ms-cloudpack/bundler-types';\nimport { darkGrey, red, bulletedList } from '@ms-cloudpack/task-reporter';\n\nexport function formatBundleErrors(errors: BundleMessage[] | undefined) {\n if (!errors?.length) return {};\n\n return {\n message: `${errors.length} ${errors.length === 1 ? 'error' : 'errors'} found`,\n details: bulletedList(errors.map((error) => formatError(error))),\n };\n}\n\nfunction formatError(error: BundleMessage) {\n const { location } = error;\n\n return [\n location && darkGrey(`${location.file}:${location.line}:${location.column}:`),\n red(error.text ? error.text : JSON.stringify(error, null, 2)),\n ]\n .filter(Boolean)\n .join(' ');\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
2
+ export declare function getBundleDetails(options: {
3
+ packagePath: string;
4
+ }, context: {
5
+ packages: PackageDefinitionsCache;
6
+ }): Promise<{
7
+ bundleId: string;
8
+ isExternal: boolean;
9
+ outputLocation: {
10
+ path: string;
11
+ folderName: string;
12
+ };
13
+ }>;
14
+ //# sourceMappingURL=getBundleDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBundleDetails.d.ts","sourceRoot":"","sources":["../../src/utilities/getBundleDetails.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE;;;;;;;GAmC/C"}
@@ -0,0 +1,35 @@
1
+ import { isExternalPackage } from '@ms-cloudpack/package-utilities';
2
+ import hash from 'object-hash';
3
+ import filenamify from 'filenamify';
4
+ import path from 'path';
5
+ import { getCachePath } from './getCachePath.js';
6
+ export async function getBundleDetails(options, context) {
7
+ const { packagePath } = options;
8
+ const { packages } = context;
9
+ const definition = await packages.get(packagePath);
10
+ if (!definition) {
11
+ throw new Error(`Package definition (package.json) missing or invalid at "${packagePath}"`);
12
+ }
13
+ const { name: packageName, version } = definition;
14
+ if (!packageName) {
15
+ throw new Error(`Package definition (package.json) missing name at "${packagePath}"`);
16
+ }
17
+ const isExternal = isExternalPackage(packagePath);
18
+ const bundleId = hash({
19
+ name: packageName,
20
+ ...definition,
21
+ version: (isExternal ? version : packagePath) || packagePath,
22
+ });
23
+ // Derive where the output should be.
24
+ const folderName = `${filenamify(packageName)}-${version}-${bundleId}`;
25
+ const outputPath = path.join(getCachePath(), folderName);
26
+ return {
27
+ bundleId,
28
+ isExternal,
29
+ outputLocation: {
30
+ path: outputPath,
31
+ folderName,
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=getBundleDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBundleDetails.js","sourceRoot":"","sources":["../../src/utilities/getBundleDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgC,EAChC,OAA8C;IAE9C,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEnD,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,4DAA4D,WAAW,GAAG,CAAC,CAAC;KAC7F;IAED,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAElD,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,sDAAsD,WAAW,GAAG,CAAC,CAAC;KACvF;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,WAAW;QACjB,GAAG,UAAU;QACb,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,WAAW;KAC7D,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,UAAU,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;IAEzD,OAAO;QACL,QAAQ;QACR,UAAU;QACV,cAAc,EAAE;YACd,IAAI,EAAE,UAAU;YAChB,UAAU;SACX;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { isExternalPackage } from '@ms-cloudpack/package-utilities';\nimport hash from 'object-hash';\nimport filenamify from 'filenamify';\nimport path from 'path';\nimport { getCachePath } from './getCachePath.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\nexport async function getBundleDetails(\n options: { packagePath: string },\n context: { packages: PackageDefinitionsCache },\n) {\n const { packagePath } = options;\n const { packages } = context;\n const definition = await packages.get(packagePath);\n\n if (!definition) {\n throw new Error(`Package definition (package.json) missing or invalid at \"${packagePath}\"`);\n }\n\n const { name: packageName, version } = definition;\n\n if (!packageName) {\n throw new Error(`Package definition (package.json) missing name at \"${packagePath}\"`);\n }\n\n const isExternal = isExternalPackage(packagePath);\n const bundleId = hash({\n name: packageName,\n ...definition,\n version: (isExternal ? version : packagePath) || packagePath,\n });\n\n // Derive where the output should be.\n const folderName = `${filenamify(packageName)}-${version}-${bundleId}`;\n const outputPath = path.join(getCachePath(), folderName);\n\n return {\n bundleId,\n isExternal,\n outputLocation: {\n path: outputPath,\n folderName,\n },\n };\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Given a file path, returns a human-readable file size description.
3
+ */
4
+ export declare function getFileSizeSync(filePath: string): string;
5
+ //# sourceMappingURL=getFileSizeSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFileSizeSync.d.ts","sourceRoot":"","sources":["../../src/utilities/getFileSizeSync.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAaxD"}
@@ -0,0 +1,16 @@
1
+ import fs from 'fs';
2
+ /**
3
+ * Given a file path, returns a human-readable file size description.
4
+ */
5
+ export function getFileSizeSync(filePath) {
6
+ // eslint-disable-next-line no-restricted-syntax
7
+ const { size } = fs.statSync(filePath);
8
+ if (size > 1024 * 1024) {
9
+ return `${(size / 1024 / 1024).toFixed(2)} MB`;
10
+ }
11
+ if (size > 1024) {
12
+ return `${(size / 1024).toFixed(2)} KB`;
13
+ }
14
+ return `${size} ${size === 1 ? 'byte' : 'bytes'}`;
15
+ }
16
+ //# sourceMappingURL=getFileSizeSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFileSizeSync.js","sourceRoot":"","sources":["../../src/utilities/getFileSizeSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,gDAAgD;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE;QACtB,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;KAChD;IAED,IAAI,IAAI,GAAG,IAAI,EAAE;QACf,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;KACzC;IAED,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACpD,CAAC","sourcesContent":["import fs from 'fs';\n\n/**\n * Given a file path, returns a human-readable file size description.\n */\nexport function getFileSizeSync(filePath: string): string {\n // eslint-disable-next-line no-restricted-syntax\n const { size } = fs.statSync(filePath);\n\n if (size > 1024 * 1024) {\n return `${(size / 1024 / 1024).toFixed(2)} MB`;\n }\n\n if (size > 1024) {\n return `${(size / 1024).toFixed(2)} KB`;\n }\n\n return `${size} ${size === 1 ? 'byte' : 'bytes'}`;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export declare function hashPackage<T extends object>(options: {
2
+ packagePath: string;
3
+ isExternal: boolean;
4
+ additionalProperties: T;
5
+ }): Promise<string>;
6
+ //# sourceMappingURL=hashPackage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashPackage.d.ts","sourceRoot":"","sources":["../../src/utilities/hashPackage.ts"],"names":[],"mappings":"AASA,wBAAsB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,CAAC,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}
@@ -0,0 +1,21 @@
1
+ import glob from 'fast-glob';
2
+ import { existsSync } from 'fs';
3
+ import { hash } from 'glob-hasher';
4
+ import objectHash from 'object-hash';
5
+ import path from 'path';
6
+ import { performance } from 'perf_hooks';
7
+ const excludeNodeModules = '!**/node_modules/**';
8
+ export async function hashPackage(options) {
9
+ const start = performance.now();
10
+ const { packagePath, isExternal, additionalProperties } = options;
11
+ const shouldUseSrc = !isExternal && existsSync(path.join(packagePath, 'src'));
12
+ const patterns = shouldUseSrc ? ['src/**', '*.json', excludeNodeModules] : ['**', excludeNodeModules];
13
+ const files = await glob(patterns, {
14
+ cwd: packagePath,
15
+ });
16
+ const globHash = hash(files, { cwd: packagePath });
17
+ const result = objectHash({ files: globHash, additionalProperties }, { algorithm: 'md5' });
18
+ console.debug(`Hashed ${path.basename(packagePath)} in ${performance.now() - start}ms`);
19
+ return result;
20
+ }
21
+ //# sourceMappingURL=hashPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashPackage.js","sourceRoot":"","sources":["../../src/utilities/hashPackage.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAmB,OAInD;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAElE,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9E,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACtG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;QACjC,GAAG,EAAE,WAAW;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3F,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import glob from 'fast-glob';\nimport { existsSync } from 'fs';\nimport { hash } from 'glob-hasher';\nimport objectHash from 'object-hash';\nimport path from 'path';\nimport { performance } from 'perf_hooks';\n\nconst excludeNodeModules = '!**/node_modules/**';\n\nexport async function hashPackage<T extends object>(options: {\n packagePath: string;\n isExternal: boolean;\n additionalProperties: T;\n}): Promise<string> {\n const start = performance.now();\n const { packagePath, isExternal, additionalProperties } = options;\n\n const shouldUseSrc = !isExternal && existsSync(path.join(packagePath, 'src'));\n\n const patterns = shouldUseSrc ? ['src/**', '*.json', excludeNodeModules] : ['**', excludeNodeModules];\n const files = await glob(patterns, {\n cwd: packagePath,\n });\n\n const globHash = hash(files, { cwd: packagePath });\n const result = objectHash({ files: globHash, additionalProperties }, { algorithm: 'md5' });\n\n console.debug(`Hashed ${path.basename(packagePath)} in ${performance.now() - start}ms`);\n return result;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/api-server",
3
- "version": "0.12.1",
3
+ "version": "0.13.0",
4
4
  "description": "An implementation of the API server that does interacts with a task scheduler.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,24 +21,31 @@
21
21
  "@lage-run/scheduler": "^1.0.0",
22
22
  "@lage-run/target-graph": "^0.8.6",
23
23
  "@lage-run/hasher": "^1.0.0",
24
+ "@ms-cloudpack/bundler": "^0.14.6",
24
25
  "@ms-cloudpack/bundler-types": "^0.17.0",
25
26
  "@ms-cloudpack/config": "^0.11.0",
26
27
  "@ms-cloudpack/create-express-app": "^1.3.9",
27
28
  "@ms-cloudpack/data-bus": "^0.4.0",
28
- "@ms-cloudpack/file-watcher": "^0.0.2",
29
+ "@ms-cloudpack/file-watcher": "^0.0.3",
29
30
  "@ms-cloudpack/json-utilities": "^0.0.7",
30
31
  "@ms-cloudpack/package-utilities": "^5.1.0",
31
32
  "@ms-cloudpack/path-string-parsing": "^1.0.3",
32
33
  "@ms-cloudpack/path-utilities": "^2.3.2",
33
- "@ms-cloudpack/task-reporter": "^0.7.0",
34
+ "@ms-cloudpack/task-reporter": "^0.7.1",
34
35
  "@ms-cloudpack/telemetry": "^0.3.6",
36
+ "@ms-cloudpack/remote-cache": "^0.1.0",
35
37
  "@trpc/client": "^10.21.1",
36
38
  "@trpc/server": "^10.21.1",
37
39
  "chokidar": "^3.5.3",
38
40
  "cors": "^2.8.5",
41
+ "es-module-lexer": "^1.0.3",
42
+ "fast-glob": "^3.2.12",
43
+ "filenamify": "^6.0.0",
39
44
  "fs-extra": "^11.0.0",
40
45
  "get-port": "^7.0.0",
46
+ "glob-hasher": "^1.2.1",
41
47
  "p-queue": "^7.3.0",
48
+ "object-hash": "^3.0.0",
42
49
  "semver": "^7.3.7",
43
50
  "ws": "^8.9.0",
44
51
  "zod": "^3.21.4"