@ms-cloudpack/path-utilities 0.1.0 → 0.3.1

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 (46) hide show
  1. package/CHANGELOG.json +61 -1
  2. package/CHANGELOG.md +26 -2
  3. package/lib/findPackageRoot.d.ts +5 -0
  4. package/lib/findPackageRoot.js +13 -0
  5. package/lib/findPackageRoot.js.map +1 -0
  6. package/lib/findPackageRoot.test.d.ts +1 -0
  7. package/lib/findPackageRoot.test.js +11 -0
  8. package/lib/findPackageRoot.test.js.map +1 -0
  9. package/lib/index.d.ts +6 -0
  10. package/lib/index.js +7 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/intermediateToSourcePath.d.ts +5 -0
  13. package/lib/intermediateToSourcePath.js +42 -0
  14. package/lib/intermediateToSourcePath.js.map +1 -0
  15. package/lib/intermediateToSourcePath.test.d.ts +1 -0
  16. package/lib/intermediateToSourcePath.test.js +37 -0
  17. package/lib/intermediateToSourcePath.test.js.map +1 -0
  18. package/lib/isFile.d.ts +1 -0
  19. package/lib/isFile.js +12 -0
  20. package/lib/isFile.js.map +1 -0
  21. package/lib/isFile.test.d.ts +1 -0
  22. package/lib/isFile.test.js +15 -0
  23. package/lib/isFile.test.js.map +1 -0
  24. package/lib/isFolder.d.ts +1 -0
  25. package/lib/isFolder.js +11 -0
  26. package/lib/isFolder.js.map +1 -0
  27. package/lib/isFolder.test.d.ts +1 -0
  28. package/lib/isFolder.test.js +15 -0
  29. package/lib/isFolder.test.js.map +1 -0
  30. package/lib/slash.d.ts +1 -0
  31. package/lib/slash.js +4 -0
  32. package/lib/slash.js.map +1 -0
  33. package/lib/slash.test.d.ts +1 -0
  34. package/lib/slash.test.js +7 -0
  35. package/lib/slash.test.js.map +1 -0
  36. package/lib/sourceToIntermediatePath.d.ts +5 -0
  37. package/lib/sourceToIntermediatePath.js +27 -0
  38. package/lib/sourceToIntermediatePath.js.map +1 -0
  39. package/lib/sourceToIntermediatePath.test.d.ts +1 -0
  40. package/lib/sourceToIntermediatePath.test.js +28 -0
  41. package/lib/sourceToIntermediatePath.test.js.map +1 -0
  42. package/lib/testPaths.d.ts +3 -0
  43. package/lib/testPaths.js +6 -0
  44. package/lib/testPaths.js.map +1 -0
  45. package/lib/tsdoc-metadata.json +11 -0
  46. package/package.json +12 -8
package/CHANGELOG.json CHANGED
@@ -2,7 +2,67 @@
2
2
  "name": "@ms-cloudpack/path-utilities",
3
3
  "entries": [
4
4
  {
5
- "date": "Thu, 03 Mar 2022 23:25:53 GMT",
5
+ "date": "Wed, 08 Jun 2022 20:06:34 GMT",
6
+ "tag": "@ms-cloudpack/path-utilities_v0.3.1",
7
+ "version": "0.3.1",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "dzearing@microsoft.com",
12
+ "package": "@ms-cloudpack/path-utilities",
13
+ "commit": "0e78dd2f1cf4d366f04d52d54996418c4febcfb6",
14
+ "comment": "Fixed an infinite loop resolving source paths from intermediate."
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Wed, 25 May 2022 21:40:45 GMT",
21
+ "tag": "@ms-cloudpack/path-utilities_v0.3.0",
22
+ "version": "0.3.0",
23
+ "comments": {
24
+ "minor": [
25
+ {
26
+ "author": "dzearing@microsoft.com",
27
+ "package": "@ms-cloudpack/path-utilities",
28
+ "commit": "c81fea1af8bedcd81366fbddb199dd2c0e6cbaa7",
29
+ "comment": "Ensuring intermediatToSourcePath returns paths that are existing files, not existing folders."
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "date": "Fri, 20 May 2022 04:26:15 GMT",
36
+ "tag": "@ms-cloudpack/path-utilities_v0.2.0",
37
+ "version": "0.2.0",
38
+ "comments": {
39
+ "minor": [
40
+ {
41
+ "author": "dzearing@microsoft.com",
42
+ "package": "@ms-cloudpack/path-utilities",
43
+ "commit": "b39bb143fc53e622c39f9e9fd349f71c9ebadd77",
44
+ "comment": "Adding findPackageRoot helper."
45
+ }
46
+ ]
47
+ }
48
+ },
49
+ {
50
+ "date": "Sat, 14 May 2022 04:36:11 GMT",
51
+ "tag": "@ms-cloudpack/path-utilities_v0.1.0",
52
+ "version": "0.1.0",
53
+ "comments": {
54
+ "none": [
55
+ {
56
+ "author": "dzearing@microsoft.com",
57
+ "package": "@ms-cloudpack/path-utilities",
58
+ "commit": "cc0844a7d18790d69e59b16dbd6eef8fab5bc4e0",
59
+ "comment": "Updating the build."
60
+ }
61
+ ]
62
+ }
63
+ },
64
+ {
65
+ "date": "Thu, 03 Mar 2022 23:26:03 GMT",
6
66
  "tag": "@ms-cloudpack/path-utilities_v0.1.0",
7
67
  "version": "0.1.0",
8
68
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,36 @@
1
1
  # Change Log - @ms-cloudpack/path-utilities
2
2
 
3
- This log was last generated on Thu, 03 Mar 2022 23:25:53 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 08 Jun 2022 20:06:34 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.3.1
8
+
9
+ Wed, 08 Jun 2022 20:06:34 GMT
10
+
11
+ ### Patches
12
+
13
+ - Fixed an infinite loop resolving source paths from intermediate. (dzearing@microsoft.com)
14
+
15
+ ## 0.3.0
16
+
17
+ Wed, 25 May 2022 21:40:45 GMT
18
+
19
+ ### Minor changes
20
+
21
+ - Ensuring intermediatToSourcePath returns paths that are existing files, not existing folders. (dzearing@microsoft.com)
22
+
23
+ ## 0.2.0
24
+
25
+ Fri, 20 May 2022 04:26:15 GMT
26
+
27
+ ### Minor changes
28
+
29
+ - Adding findPackageRoot helper. (dzearing@microsoft.com)
30
+
7
31
  ## 0.1.0
8
32
 
9
- Thu, 03 Mar 2022 23:25:53 GMT
33
+ Thu, 03 Mar 2022 23:26:03 GMT
10
34
 
11
35
  ### Minor changes
12
36
 
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Given an absolute folder path into a package, traverse up the paths
3
+ * until the root has been found (containing the package.json file.)
4
+ */
5
+ export declare function findPackageRoot(currentPath: string): string;
@@ -0,0 +1,13 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ /**
4
+ * Given an absolute folder path into a package, traverse up the paths
5
+ * until the root has been found (containing the package.json file.)
6
+ */
7
+ export function findPackageRoot(currentPath) {
8
+ while (currentPath && !fs.existsSync(path.join(currentPath, 'package.json'))) {
9
+ currentPath = path.join(currentPath, '..');
10
+ }
11
+ return currentPath;
12
+ }
13
+ //# sourceMappingURL=findPackageRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findPackageRoot.js","sourceRoot":"","sources":["../src/findPackageRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,WAAW,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,EAAE;QAC5E,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC5C;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { findPackageRoot } from './findPackageRoot.js';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const currentPath = path.dirname(fileURLToPath(import.meta.url));
5
+ describe('findPackageRoot', () => {
6
+ it('can find the package root', () => {
7
+ const packagePath = findPackageRoot(currentPath);
8
+ expect(path.relative(currentPath, packagePath)).toEqual('..');
9
+ });
10
+ });
11
+ //# sourceMappingURL=findPackageRoot.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findPackageRoot.test.js","sourceRoot":"","sources":["../src/findPackageRoot.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAEjD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { intermediateToSourcePath } from './intermediateToSourcePath.js';
2
+ export { isFile } from './isFile.js';
3
+ export { isFolder } from './isFolder.js';
4
+ export { slash } from './slash.js';
5
+ export { sourceToIntermediatePath } from './sourceToIntermediatePath.js';
6
+ export { findPackageRoot } from './findPackageRoot.js';
package/lib/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { intermediateToSourcePath } from './intermediateToSourcePath.js';
2
+ export { isFile } from './isFile.js';
3
+ export { isFolder } from './isFolder.js';
4
+ export { slash } from './slash.js';
5
+ export { sourceToIntermediatePath } from './sourceToIntermediatePath.js';
6
+ export { findPackageRoot } from './findPackageRoot.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Takes a relative intermediate content path (e.g. "lib/foo/bar.js") and resolves it to a source content path
3
+ * (e.g. "/src/foo/foo.tsx"). Note: source files must exist so that the utility can resolve the source.
4
+ */
5
+ export declare function intermediateToSourcePath(relativeIntermediatePath: string, rootPath: string): string | undefined;
@@ -0,0 +1,42 @@
1
+ import path from 'path';
2
+ import { isFile } from './isFile.js';
3
+ import { slash } from './slash.js';
4
+ /**
5
+ * Takes a relative intermediate content path (e.g. "lib/foo/bar.js") and resolves it to a source content path
6
+ * (e.g. "/src/foo/foo.tsx"). Note: source files must exist so that the utility can resolve the source.
7
+ */
8
+ export function intermediateToSourcePath(relativeIntermediatePath, rootPath) {
9
+ const candidates = [];
10
+ const parts = slash(relativeIntermediatePath).split('/');
11
+ let firstFolderIndex = 0;
12
+ // Find first folder in relative path
13
+ while (parts.length &&
14
+ firstFolderIndex < parts.length &&
15
+ (!parts[firstFolderIndex] || parts[firstFolderIndex] === '.' || parts[firstFolderIndex] === '..')) {
16
+ firstFolderIndex++;
17
+ }
18
+ // If there is at least 1 folder and 1 filename in the path, add source candidates.
19
+ if (parts.length - firstFolderIndex > 1) {
20
+ const isIntermediatePath = ['lib', 'lib-amd', 'lib-esm', 'lib-commonjs', 'dist'].indexOf(parts[firstFolderIndex]) >= 0;
21
+ const sourcePath = isIntermediatePath
22
+ ? path.dirname(parts.map((v, i) => (i === firstFolderIndex ? 'src' : v)).join('/'))
23
+ : path.dirname(relativeIntermediatePath);
24
+ const ext = path.extname(relativeIntermediatePath);
25
+ const basename = path.basename(relativeIntermediatePath, ext);
26
+ if (!ext || ext === '.js' || ext === '.mjs') {
27
+ ['.tsx', '.ts', '.mtsx', '.mts', '.jsx', '.js', ''].forEach((newExt) => candidates.unshift(slash(path.join(sourcePath, basename + newExt))));
28
+ }
29
+ candidates.push(slash(path.join(sourcePath, basename + ext)));
30
+ candidates.push(slash(relativeIntermediatePath));
31
+ }
32
+ let match = candidates.find((candidate) => {
33
+ const resolvedPath = path.resolve(rootPath, candidate);
34
+ return isFile(resolvedPath);
35
+ });
36
+ // Re-add the leading period.
37
+ if (match && parts[0] === '.' && !match.startsWith('./')) {
38
+ match = './' + match;
39
+ }
40
+ return match;
41
+ }
42
+ //# sourceMappingURL=intermediateToSourcePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intermediateToSourcePath.js","sourceRoot":"","sources":["../src/intermediateToSourcePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,wBAAgC,EAAE,QAAgB;IACzF,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,qCAAqC;IACrC,OACE,KAAK,CAAC,MAAM;QACZ,gBAAgB,GAAG,KAAK,CAAC,MAAM;QAC/B,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,EACjG;QACA,gBAAgB,EAAE,CAAC;KACpB;IAED,mFAAmF;IACnF,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,GAAG,CAAC,EAAE;QACvC,MAAM,kBAAkB,GACtB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,UAAU,GAAG,kBAAkB;YACnC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAE9D,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE;YAC3C,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACrE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CACpE,CAAC;SACH;QAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9D,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;KAClD;IAED,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACxD,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;KACtB;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { fileURLToPath } from 'url';
2
+ import { intermediateToSourcePath } from './intermediateToSourcePath.js';
3
+ import path from 'path';
4
+ const testPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../test-scenarios');
5
+ describe('intermediateToSourcePath', () => {
6
+ it('can resolve a .js', () => {
7
+ expect(intermediateToSourcePath('lib/js.js', testPath)).toEqual('src/js.js');
8
+ });
9
+ it('can resolve a .jsx', () => {
10
+ expect(intermediateToSourcePath('lib/jsx.js', testPath)).toEqual('src/jsx.jsx');
11
+ });
12
+ it('can resolve a .ts', () => {
13
+ expect(intermediateToSourcePath('lib/ts.js', testPath)).toEqual('src/ts.ts');
14
+ });
15
+ it('can resolve a .ts from the src path', () => {
16
+ expect(intermediateToSourcePath('src/ts', testPath)).toEqual('src/ts.ts');
17
+ });
18
+ it('can preserve a leading period when translating to a .ts from the src path', () => {
19
+ expect(intermediateToSourcePath('./lib/ts.js', testPath)).toEqual('./src/ts.ts');
20
+ });
21
+ it('can resolve a .tsx', () => {
22
+ expect(intermediateToSourcePath('lib/tsx.js', testPath)).toEqual('src/tsx.tsx');
23
+ });
24
+ it('can resolve a .mts', () => {
25
+ expect(intermediateToSourcePath('lib/mts.mjs', testPath)).toEqual('src/mts.mts');
26
+ });
27
+ it('can resolve .scss files', () => {
28
+ expect(intermediateToSourcePath('lib/scss.scss.js', testPath)).toEqual('src/scss.scss');
29
+ });
30
+ it('can resolve non-js files', () => {
31
+ expect(intermediateToSourcePath('lib/png.png', testPath)).toEqual('src/png.png');
32
+ });
33
+ it('returns undefined for missing source files', () => {
34
+ expect(intermediateToSourcePath('lib/dne.mjs', testPath)).toBeUndefined();
35
+ });
36
+ });
37
+ //# sourceMappingURL=intermediateToSourcePath.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intermediateToSourcePath.test.js","sourceRoot":"","sources":["../src/intermediateToSourcePath.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAE9F,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,CAAC,wBAAwB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,wBAAwB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,wBAAwB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,wBAAwB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,wBAAwB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isFile(filePath: string): boolean;
package/lib/isFile.js ADDED
@@ -0,0 +1,12 @@
1
+ import { lstatSync } from 'fs';
2
+ export function isFile(filePath) {
3
+ try {
4
+ const stat = lstatSync(filePath);
5
+ return stat.isFile();
6
+ }
7
+ catch {
8
+ /* */
9
+ }
10
+ return false;
11
+ }
12
+ //# sourceMappingURL=isFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFile.js","sourceRoot":"","sources":["../src/isFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,UAAU,MAAM,CAAC,QAAgB;IACrC,IAAI;QACF,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;KACtB;IAAC,MAAM;QACN,KAAK;KACN;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import path from 'path';
2
+ import { isFile } from './isFile.js';
3
+ import { filePath, folderPath } from './testPaths.js';
4
+ describe('isFile', () => {
5
+ it('returns true on a file', () => {
6
+ expect(isFile(filePath)).toBeTruthy();
7
+ });
8
+ it('returns false on a folder', () => {
9
+ expect(isFile(folderPath)).toBeFalsy();
10
+ });
11
+ it('returns false on a missing file', () => {
12
+ expect(isFile(path.join(folderPath, 'does-not-exist.txt'))).toBeFalsy();
13
+ });
14
+ });
15
+ //# sourceMappingURL=isFile.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFile.test.js","sourceRoot":"","sources":["../src/isFile.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isFolder(itemPath: string): boolean;
@@ -0,0 +1,11 @@
1
+ import fs from 'fs';
2
+ export function isFolder(itemPath) {
3
+ try {
4
+ return fs.lstatSync(itemPath)?.isDirectory();
5
+ }
6
+ catch (e) {
7
+ /* no-op */
8
+ }
9
+ return false;
10
+ }
11
+ //# sourceMappingURL=isFolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFolder.js","sourceRoot":"","sources":["../src/isFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,IAAI;QACF,OAAO,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;KAC9C;IAAC,OAAO,CAAC,EAAE;QACV,WAAW;KACZ;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import path from 'path';
2
+ import { isFolder } from './isFolder.js';
3
+ import { folderPath, filePath } from './testPaths.js';
4
+ describe('isFolder', () => {
5
+ it('returns true on a folder', () => {
6
+ expect(isFolder(folderPath)).toBeTruthy();
7
+ });
8
+ it('returns false on a file', () => {
9
+ expect(isFolder(path.join(filePath, '../package.json'))).toBeFalsy();
10
+ });
11
+ it('returns false on a missing file', () => {
12
+ expect(isFolder(path.join(folderPath, 'does-not-exist.txt'))).toBeFalsy();
13
+ });
14
+ });
15
+ //# sourceMappingURL=isFolder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFolder.test.js","sourceRoot":"","sources":["../src/isFolder.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEtD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/lib/slash.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function slash(str: string): string;
package/lib/slash.js ADDED
@@ -0,0 +1,4 @@
1
+ export function slash(str) {
2
+ return str.replace(/\\/g, '/');
3
+ }
4
+ //# sourceMappingURL=slash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash.js","sourceRoot":"","sources":["../src/slash.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { slash } from './slash.js';
2
+ describe('slash', () => {
3
+ it('can reverse slashes', () => {
4
+ expect(slash('\\asdf\\asdf/asdf')).toEqual('/asdf/asdf/asdf');
5
+ });
6
+ });
7
+ //# sourceMappingURL=slash.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash.test.js","sourceRoot":"","sources":["../src/slash.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Takes a relative source path (e.g. "src/foo/bar.ts") and resolves it to an intermediate content path
3
+ * (e.g. "/lib/foo/bar.js").
4
+ */
5
+ export declare function sourceToIntermediatePath(sourcePath: string): string;
@@ -0,0 +1,27 @@
1
+ import path from 'path';
2
+ import { slash } from './slash.js';
3
+ /**
4
+ * Takes a relative source path (e.g. "src/foo/bar.ts") and resolves it to an intermediate content path
5
+ * (e.g. "/lib/foo/bar.js").
6
+ */
7
+ export function sourceToIntermediatePath(sourcePath) {
8
+ let ext = path.extname(sourcePath);
9
+ const basename = path.basename(sourcePath, ext);
10
+ const pathParts = slash(path.dirname(sourcePath)).split('/');
11
+ if (pathParts[0] === 'src') {
12
+ pathParts[0] = 'lib';
13
+ }
14
+ if (['.ts', '.tsx', '.jsx'].indexOf(ext) >= 0) {
15
+ // Handle js replacement extensions
16
+ ext = '.js';
17
+ }
18
+ else if (['.mts'].indexOf(ext) >= 0) {
19
+ ext = '.mjs';
20
+ }
21
+ else if (['.scss'].indexOf(ext) >= 0) {
22
+ // Handle js appends
23
+ ext += '.js';
24
+ }
25
+ return slash(path.join(...pathParts, basename + ext));
26
+ }
27
+ //# sourceMappingURL=sourceToIntermediatePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceToIntermediatePath.js","sourceRoot":"","sources":["../src/sourceToIntermediatePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAkB;IACzD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7D,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;QAC1B,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;KACtB;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC7C,mCAAmC;QACnC,GAAG,GAAG,KAAK,CAAC;KACb;SAAM,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACrC,GAAG,GAAG,MAAM,CAAC;KACd;SAAM,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtC,oBAAoB;QACpB,GAAG,IAAI,KAAK,CAAC;KACd;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { sourceToIntermediatePath } from './sourceToIntermediatePath.js';
2
+ describe('sourceToIntermediatePath', () => {
3
+ it('can resolve a .js', () => {
4
+ expect(sourceToIntermediatePath('src/js.js')).toEqual('lib/js.js');
5
+ });
6
+ it('can resolve a .jsx', () => {
7
+ expect(sourceToIntermediatePath('src/jsx.jsx')).toEqual('lib/jsx.js');
8
+ });
9
+ it('can resolve a .ts', () => {
10
+ expect(sourceToIntermediatePath('src/ts.ts')).toEqual('lib/ts.js');
11
+ });
12
+ it('can resolve a .tsx', () => {
13
+ expect(sourceToIntermediatePath('src/tsx.tsx')).toEqual('lib/tsx.js');
14
+ });
15
+ it('can resolve a .mts', () => {
16
+ expect(sourceToIntermediatePath('src/mts.mts')).toEqual('lib/mts.mjs');
17
+ });
18
+ it('can resolve .mjs files', () => {
19
+ expect(sourceToIntermediatePath('src/mjs.mjs')).toEqual('lib/mjs.mjs');
20
+ });
21
+ it('can resolve non-js files', () => {
22
+ expect(sourceToIntermediatePath('src/png.png')).toEqual('lib/png.png');
23
+ });
24
+ it('can fall back tot he original path', () => {
25
+ expect(sourceToIntermediatePath('lib/dne.mjs')).toEqual('lib/dne.mjs');
26
+ });
27
+ });
28
+ //# sourceMappingURL=sourceToIntermediatePath.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourceToIntermediatePath.test.js","sourceRoot":"","sources":["../src/sourceToIntermediatePath.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const testScenariosPath: string;
2
+ export declare const folderPath: string;
3
+ export declare const filePath: string;
@@ -0,0 +1,6 @@
1
+ import { fileURLToPath } from 'url';
2
+ import path from 'path';
3
+ export const testScenariosPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../test-scenarios');
4
+ export const folderPath = testScenariosPath;
5
+ export const filePath = path.join(testScenariosPath, 'src/js.js');
6
+ //# sourceMappingURL=testPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testPaths.js","sourceRoot":"","sources":["../src/testPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AACjH,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.25.0"
9
+ }
10
+ ]
11
+ }
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/path-utilities",
3
- "version": "0.1.0",
4
- "description": "Utilities for resolving paths between source/itermediate/output locations in Cloudpack.",
3
+ "version": "0.3.1",
4
+ "description": "Utilities for resolving paths between source/intermediate/output locations in Cloudpack.",
5
+ "license": "MIT",
5
6
  "type": "module",
6
7
  "types": "./lib/index.d.ts",
7
8
  "sideEffects": false,
@@ -12,12 +13,15 @@
12
13
  }
13
14
  },
14
15
  "scripts": {
15
- "build": "just-scripts build",
16
- "build:watch": "just-scripts build:watch",
17
- "lint": "just-scripts lint",
18
- "lint:fix": "just-scripts lint:fix",
19
- "test": "just-scripts test",
20
- "test:watch": "just-scripts test:watch"
16
+ "api:update": "cloudpack-scripts api-update",
17
+ "api": "cloudpack-scripts api",
18
+ "build:watch": "cloudpack-scripts build-watch",
19
+ "build": "cloudpack-scripts build",
20
+ "lint:update": "cloudpack-scripts lint-update",
21
+ "lint": "cloudpack-scripts lint",
22
+ "test:update": "cloudpack-scripts test-update",
23
+ "test:watch": "cloudpack-scripts test-watch",
24
+ "test": "cloudpack-scripts test"
21
25
  },
22
26
  "devDependencies": {
23
27
  "@ms-cloudpack/scripts": "*",