@ms-cloudpack/path-utilities 0.1.0 → 0.2.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 (45) hide show
  1. package/CHANGELOG.json +31 -1
  2. package/CHANGELOG.md +10 -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 +36 -0
  14. package/lib/intermediateToSourcePath.js.map +1 -0
  15. package/lib/intermediateToSourcePath.test.d.ts +1 -0
  16. package/lib/intermediateToSourcePath.test.js +34 -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/package.json +12 -8
package/CHANGELOG.json CHANGED
@@ -2,7 +2,37 @@
2
2
  "name": "@ms-cloudpack/path-utilities",
3
3
  "entries": [
4
4
  {
5
- "date": "Thu, 03 Mar 2022 23:25:53 GMT",
5
+ "date": "Fri, 20 May 2022 04:25:53 GMT",
6
+ "tag": "@ms-cloudpack/path-utilities_v0.2.0",
7
+ "version": "0.2.0",
8
+ "comments": {
9
+ "minor": [
10
+ {
11
+ "author": "dzearing@microsoft.com",
12
+ "package": "@ms-cloudpack/path-utilities",
13
+ "commit": "b39bb143fc53e622c39f9e9fd349f71c9ebadd77",
14
+ "comment": "Adding findPackageRoot helper."
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Sat, 14 May 2022 04:36:11 GMT",
21
+ "tag": "@ms-cloudpack/path-utilities_v0.1.0",
22
+ "version": "0.1.0",
23
+ "comments": {
24
+ "none": [
25
+ {
26
+ "author": "dzearing@microsoft.com",
27
+ "package": "@ms-cloudpack/path-utilities",
28
+ "commit": "cc0844a7d18790d69e59b16dbd6eef8fab5bc4e0",
29
+ "comment": "Updating the build."
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "date": "Thu, 03 Mar 2022 23:26:03 GMT",
6
36
  "tag": "@ms-cloudpack/path-utilities_v0.1.0",
7
37
  "version": "0.1.0",
8
38
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,20 @@
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 Fri, 20 May 2022 04:25:53 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.2.0
8
+
9
+ Fri, 20 May 2022 04:25:53 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - Adding findPackageRoot helper. (dzearing@microsoft.com)
14
+
7
15
  ## 0.1.0
8
16
 
9
- Thu, 03 Mar 2022 23:25:53 GMT
17
+ Thu, 03 Mar 2022 23:26:03 GMT
10
18
 
11
19
  ### Minor changes
12
20
 
@@ -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,36 @@
1
+ import { existsSync } from 'fs';
2
+ import path from 'path';
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
+ (!parts[firstFolderIndex] || parts[firstFolderIndex] === '.' || parts[firstFolderIndex] === '..')) {
15
+ firstFolderIndex++;
16
+ }
17
+ // If there is at least 1 folder and 1 filename in the path, add source candidates.
18
+ if (parts.length - firstFolderIndex > 1) {
19
+ const isIntermediatePath = ['lib', 'lib-amd', 'lib-esm', 'lib-commonjs', 'dist'].indexOf(parts[firstFolderIndex]) >= 0;
20
+ const sourcePath = isIntermediatePath
21
+ ? path.dirname(parts.map((v, i) => (i === firstFolderIndex ? 'src' : v)).join('/'))
22
+ : path.dirname(relativeIntermediatePath);
23
+ const ext = path.extname(relativeIntermediatePath);
24
+ const basename = path.basename(relativeIntermediatePath, ext);
25
+ if (!ext || ext === '.js' || ext === '.mjs') {
26
+ ['.tsx', '.ts', '.mtsx', '.mts', '.jsx', '.js', ''].forEach((newExt) => candidates.unshift(slash(path.join(sourcePath, basename + newExt))));
27
+ }
28
+ candidates.push(slash(path.join(sourcePath, basename + ext)));
29
+ candidates.push(slash(relativeIntermediatePath));
30
+ }
31
+ return candidates.find((candidate) => {
32
+ const resolvedPath = path.resolve(rootPath, candidate);
33
+ return existsSync(resolvedPath);
34
+ });
35
+ }
36
+ //# sourceMappingURL=intermediateToSourcePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intermediateToSourcePath.js","sourceRoot":"","sources":["../src/intermediateToSourcePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,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,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,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACnC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
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 resolve a .tsx', () => {
19
+ expect(intermediateToSourcePath('lib/tsx.js', testPath)).toEqual('src/tsx.tsx');
20
+ });
21
+ it('can resolve a .mts', () => {
22
+ expect(intermediateToSourcePath('lib/mts.mjs', testPath)).toEqual('src/mts.mts');
23
+ });
24
+ it('can resolve .scss files', () => {
25
+ expect(intermediateToSourcePath('lib/scss.scss.js', testPath)).toEqual('src/scss.scss');
26
+ });
27
+ it('can resolve non-js files', () => {
28
+ expect(intermediateToSourcePath('lib/png.png', testPath)).toEqual('src/png.png');
29
+ });
30
+ it('returns undefined for missing source files', () => {
31
+ expect(intermediateToSourcePath('lib/dne.mjs', testPath)).toBeUndefined();
32
+ });
33
+ });
34
+ //# 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,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"}
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.2.0",
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": "*",