Compare commits

..

7 Commits

Author SHA1 Message Date
e23624a93f 5.0.2 2022-03-14 13:39:01 +01:00
7183fcc00a fix(core): update 2022-03-14 13:39:01 +01:00
9fad6100f0 5.0.1 2022-03-14 13:38:32 +01:00
d0e3065d12 fix(core): update 2022-03-14 13:38:32 +01:00
5245e50f3d 5.0.0 2022-03-14 13:27:15 +01:00
00bb39b8fe 4.0.4 2022-03-14 13:26:48 +01:00
ddfae30a18 fix(core): update 2022-03-14 13:26:48 +01:00
16 changed files with 17594 additions and 778 deletions

View File

@ -12,6 +12,9 @@ stages:
- release - release
- metadata - metadata
before_script:
- npm install -g @shipzone/npmci
# ==================== # ====================
# security stage # security stage
# ==================== # ====================
@ -19,23 +22,36 @@ mirror:
stage: security stage: security
script: script:
- npmci git mirror - npmci git mirror
only:
- tags
tags: tags:
- lossless - lossless
- docker - docker
- notpriv - notpriv
audit: auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --production --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=prod --production
tags:
- docker
allow_failure: true
auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security stage: security
script: script:
- npmci npm prepare - npmci npm prepare
- npmci command npm install --ignore-scripts - npmci command npm install --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org - npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high - npmci command npm audit --audit-level=high --only=dev
tags: tags:
- lossless
- docker - docker
- notpriv allow_failure: true
# ==================== # ====================
# test stage # test stage
@ -50,9 +66,7 @@ testStable:
- npmci npm test - npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- lossless
- docker - docker
- priv
testBuild: testBuild:
stage: test stage: test
@ -63,9 +77,7 @@ testBuild:
- npmci command npm run build - npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- lossless
- docker - docker
- notpriv
release: release:
stage: release stage: release
@ -85,6 +97,8 @@ release:
codequality: codequality:
stage: metadata stage: metadata
allow_failure: true allow_failure: true
only:
- tags
script: script:
- npmci command npm install -g tslint typescript - npmci command npm install -g tslint typescript
- npmci npm prepare - npmci npm prepare

24
.vscode/launch.json vendored
View File

@ -2,28 +2,10 @@
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"name": "current file", "command": "npm test",
"type": "node", "name": "Run npm test",
"request": "launch", "request": "launch",
"args": [ "type": "node-terminal"
"${relativeFile}"
],
"runtimeArgs": ["-r", "@gitzone/tsrun"],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": "test.ts",
"type": "node",
"request": "launch",
"args": [
"test/test.ts"
],
"runtimeArgs": ["-r", "@gitzone/tsrun"],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart"
} }
] ]
} }

View File

@ -15,7 +15,7 @@
"properties": { "properties": {
"projectType": { "projectType": {
"type": "string", "type": "string",
"enum": ["website", "element", "service", "npm"] "enum": ["website", "element", "service", "npm", "wcc"]
} }
} }
} }

22
LICENSE
View File

@ -1,22 +0,0 @@
The MIT License (MIT)
Copyright (c) 2015 Lossless GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,8 +1,5 @@
{ {
"npmci": { "npmci": {
"npmGlobalTools": [
"@gitzone/npmts"
],
"npmAccessLevel": "public" "npmAccessLevel": "public"
}, },
"gitzone": { "gitzone": {
@ -11,7 +8,7 @@
"githost": "gitlab.com", "githost": "gitlab.com",
"gitscope": "pushrocks", "gitscope": "pushrocks",
"gitrepo": "smartpath", "gitrepo": "smartpath",
"shortDescription": "offers smart ways to handle paths", "description": "offers smart ways to handle paths",
"npmPackagename": "@pushrocks/smartpath", "npmPackagename": "@pushrocks/smartpath",
"license": "MIT" "license": "MIT"
} }

18155
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,11 @@
{ {
"name": "@pushrocks/smartpath", "name": "@pushrocks/smartpath",
"version": "4.0.3", "version": "5.0.2",
"private": false, "private": false,
"description": "offers smart ways to handle paths", "description": "offers smart ways to handle paths",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts", "typings": "dist_ts/index.d.ts",
"type": "module",
"scripts": { "scripts": {
"test": "(tstest test)", "test": "(tstest test)",
"build": "(tsbuild)" "build": "(tsbuild)"
@ -24,13 +25,12 @@
"url": "https://github.com/pushrocks/smartpath/issues" "url": "https://github.com/pushrocks/smartpath/issues"
}, },
"homepage": "https://github.com/pushrocks/smartpath", "homepage": "https://github.com/pushrocks/smartpath",
"dependencies": {},
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.1.22", "@gitzone/tsbuild": "^2.1.48",
"@gitzone/tsrun": "^1.2.8", "@gitzone/tsrun": "^1.2.31",
"@gitzone/tstest": "^1.0.28", "@gitzone/tstest": "^1.0.67",
"@pushrocks/tapbundle": "^3.2.1", "@pushrocks/tapbundle": "^5.0.2",
"@types/node": "^13.11.1" "@types/node": "^17.0.21"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",
@ -43,5 +43,8 @@
"cli.js", "cli.js",
"npmextra.json", "npmextra.json",
"readme.md" "readme.md"
],
"browserslist": [
"last 1 chrome versions"
] ]
} }

View File

@ -8,13 +8,20 @@ offers smart ways to handle paths
* [docs (typedoc)](https://pushrocks.gitlab.io/smartpath/) * [docs (typedoc)](https://pushrocks.gitlab.io/smartpath/)
## Status for master ## Status for master
[![pipeline status](https://gitlab.com/pushrocks/smartpath/badges/master/pipeline.svg)](https://gitlab.com/pushrocks/smartpath/commits/master)
[![coverage report](https://gitlab.com/pushrocks/smartpath/badges/master/coverage.svg)](https://gitlab.com/pushrocks/smartpath/commits/master) Status Category | Status Badge
[![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartpath.svg)](https://www.npmjs.com/package/@pushrocks/smartpath) -- | --
[![Known Vulnerabilities](https://snyk.io/test/npm/@pushrocks/smartpath/badge.svg)](https://snyk.io/test/npm/@pushrocks/smartpath) GitLab Pipelines | [![pipeline status](https://gitlab.com/pushrocks/smartpath/badges/master/pipeline.svg)](https://lossless.cloud)
[![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/) GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/pushrocks/smartpath/badges/master/coverage.svg)](https://lossless.cloud)
[![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/) npm | [![npm downloads per month](https://badgen.net/npm/dy/@pushrocks/smartpath)](https://lossless.cloud)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/) Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/pushrocks/smartpath)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@pushrocks/smartpath)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@pushrocks/smartpath)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@pushrocks/smartpath)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
## Usage ## Usage

View File

@ -1,11 +1,11 @@
import { tap, expect } from '@pushrocks/tapbundle'; import { tap, expect, expectAsync } from '@pushrocks/tapbundle';
import * as smartpath from '../ts/index'; import * as smartpath from '../ts/index.js';
let mySmartpath: smartpath.Smartpath; let mySmartpath: smartpath.Smartpath;
tap.test('expect create a valid instance', async () => { tap.test('expect create a valid instance', async () => {
mySmartpath = new smartpath.Smartpath('/some/path/to/some.file'); mySmartpath = new smartpath.Smartpath('/some/path/to/some.file');
expect(mySmartpath).to.be.instanceof(smartpath.Smartpath); expect(mySmartpath).toBeInstanceOf(smartpath.Smartpath);
expect(mySmartpath.pathLevelsBackwards).to.be.of.length(5); expect(mySmartpath.pathLevelsBackwards.length === 5).toBeTrue();
}); });
let filePathString = './somedir/somefile.json'; let filePathString = './somedir/somefile.json';
@ -13,21 +13,21 @@ let dirPathString = './somedir/anotherdir';
let dirPathString2 = './somedir/another.dir/'; let dirPathString2 = './somedir/another.dir/';
tap.test('expect be true for a file path', async () => { tap.test('expect be true for a file path', async () => {
expect(smartpath.check.isFile(filePathString)).to.be.true; expect(smartpath.check.isFile(filePathString)).toBeTrue();
}); });
tap.test('expect be false for a directory path', async () => { tap.test('expect be false for a directory path', async () => {
expect(smartpath.check.isFile(dirPathString)).to.be.false; expect(smartpath.check.isFile(dirPathString)).toBeFalse();
expect(smartpath.check.isFile(dirPathString2)).to.be.false; expect(smartpath.check.isFile(dirPathString2)).toBeFalse();
}); });
tap.test('expect be true for a directory path', async () => { tap.test('expect be true for a directory path', async () => {
expect(smartpath.check.isDir(dirPathString)).to.be.true; expect(smartpath.check.isDir(dirPathString)).toBeTrue();
expect(smartpath.check.isDir(dirPathString2)).to.be.true; expect(smartpath.check.isDir(dirPathString2)).toBeTrue();
}); });
tap.test('expect be false for a file path', async () => { tap.test('expect be false for a file path', async () => {
expect(smartpath.check.isDir(filePathString)).to.be.false; expect(smartpath.check.isDir(filePathString)).toBeFalse();
}); });
let baseString = '/basedir'; let baseString = '/basedir';
@ -35,25 +35,25 @@ let relativeString = 'somedir/somefile.txt';
let relativeString2 = 'anotherdir/anotherfile.txt'; let relativeString2 = 'anotherdir/anotherfile.txt';
let relativeArray = [relativeString, relativeString, relativeString2]; let relativeArray = [relativeString, relativeString, relativeString2];
tap.test('expect make a string absolute', async () => { tap.test('expect make a string absolute', async () => {
expect(smartpath.transform.toAbsolute(relativeString)).startWith('/'); expect(smartpath.transform.toAbsolute(relativeString)).toStartWith('/');
expect(smartpath.transform.toAbsolute(relativeString)).endWith(relativeString); expect(smartpath.transform.toAbsolute(relativeString)).toEndWith(relativeString);
expect(smartpath.transform.toAbsolute(relativeString, baseString)).equal( expect(smartpath.transform.toAbsolute(relativeString, baseString)).toEqual(
'/basedir/somedir/somefile.txt' '/basedir/somedir/somefile.txt'
); );
}); });
tap.test('expect make an array of relative Strings an Array of absolute Strings', async () => { tap.test('expect make an array of relative Strings an Array of absolute Strings', async () => {
let absoluteArray = smartpath.transform.toAbsolute(relativeArray, baseString); let absoluteArray = smartpath.transform.toAbsolute(relativeArray, baseString);
expect(absoluteArray[2]).to.startWith('/'); expect(absoluteArray[2]).toStartWith('/');
expect(absoluteArray[2]).endWith(relativeString2); expect(absoluteArray[2]).toEndWith(relativeString2);
}); });
tap.test("expect return 'url' for an URL", async () => { tap.test("expect return 'url' for an URL", async () => {
expect(smartpath.get.type('https://push.rocks/some/url')).equal('url'); expect(smartpath.get.type('https://push.rocks/some/url')).toEqual('url');
expect(smartpath.get.type('https://push.rocks/some/url')).not.equal('local'); expect(smartpath.get.type('https://push.rocks/some/url')).not.toEqual('local');
}); });
tap.test("expect return 'path' for a Path", async () => { tap.test("expect return 'path' for a Path", async () => {
expect(smartpath.get.type('/some/absolute/path/')).equal('local'); expect(smartpath.get.type('/some/absolute/path/')).toEqual('local');
expect(smartpath.get.type('./some/relative/path/')).not.equal('url'); expect(smartpath.get.type('./some/relative/path/')).not.toEqual('url');
}); });
tap.test('expect a absolute path for an home relative URL', async () => { tap.test('expect a absolute path for an home relative URL', async () => {

View File

@ -1,8 +1,8 @@
// import modules // import modules
import * as check from './smartpath.check'; import * as check from './smartpath.check.js';
import * as get from './smartpath.get'; import * as get from './smartpath.get.js';
import * as transform from './smartpath.transform'; import * as transform from './smartpath.transform.js';
export { check, get, transform }; export { check, get, transform };
export * from './smartpath.classes.smartpath'; export * from './smartpath.classes.smartpath.js';

View File

@ -1,4 +1,4 @@
import plugins = require('./smartpath.plugins'); import * as plugins from './smartpath.plugins.js';
export let isDir = function (pathArg: string) { export let isDir = function (pathArg: string) {
return !isFile(pathArg); return !isFile(pathArg);

View File

@ -1,5 +1,5 @@
import * as plugins from './smartpath.plugins'; import * as plugins from './smartpath.plugins.js';
import * as getMod from './smartpath.get'; import * as getMod from './smartpath.get.js';
export class Smartpath { export class Smartpath {
originalPath: string; originalPath: string;

View File

@ -1,11 +1,11 @@
import plugins = require('./smartpath.plugins'); import * as plugins from './smartpath.plugins.js'
export type TPathType = 'url' | 'local'; export type TPathType = 'url' | 'local';
/** /**
* returns the type of the given path. Can be "url" or "local" * returns the type of the given path. Can be "url" or "local"
*/ */
export let type = function(pathStringArg: string): TPathType { export const type = (pathStringArg: string): TPathType => {
let urlRegex = /http[s|\s]:\/\/.*/i; const urlRegex = /http[s|\s]:\/\/.*/i;
if (urlRegex.exec(pathStringArg)) { if (urlRegex.exec(pathStringArg)) {
return 'url'; return 'url';
} else { } else {
@ -13,7 +13,19 @@ export let type = function(pathStringArg: string): TPathType {
} }
}; };
export let home = function(pathArgument?: string) { /**
* gets the dirname from import.meta.url
*/
export const getDirnameFromImportMetaUrl = (importMetaUrlArg: string) => {
return plugins.path.dirname(plugins.url.fileURLToPath(importMetaUrlArg));
}
/**
* returns homedir as absolute path
* @param pathArgument if a pathargument is given, ~ is being replaced with the homedir
* @returns
*/
export const home = (pathArgument?: string) => {
if (pathArgument) { if (pathArgument) {
return pathArgument.replace('~', plugins.os.homedir()); return pathArgument.replace('~', plugins.os.homedir());
} else { } else {
@ -23,7 +35,7 @@ export let home = function(pathArgument?: string) {
export type TSystemArg = 'dynamic' | 'windows' | 'linux' | 'osx'; export type TSystemArg = 'dynamic' | 'windows' | 'linux' | 'osx';
export let pathLevels = (pathArg: string, systemArg: TSystemArg = 'dynamic') => { export const pathLevels = (pathArg: string, systemArg: TSystemArg = 'dynamic') => {
let pathLevelArray: string[]; let pathLevelArray: string[];
if (systemArg === 'dynamic') { if (systemArg === 'dynamic') {
pathLevelArray = pathArg.split(plugins.path.sep); pathLevelArray = pathArg.split(plugins.path.sep);
@ -31,6 +43,6 @@ export let pathLevels = (pathArg: string, systemArg: TSystemArg = 'dynamic') =>
return pathLevelArray; return pathLevelArray;
}; };
export let pathLevelsBackwards = (pathArg: string, systemArg?: TSystemArg) => { export const pathLevelsBackwards = (pathArg: string, systemArg?: TSystemArg) => {
return pathLevels(pathArg, systemArg).reverse(); return pathLevels(pathArg, systemArg).reverse();
}; };

View File

@ -1,4 +1,5 @@
import * as os from 'os'; import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
import * as url from 'url';
export { os, path }; export { os, path, url };

View File

@ -1,4 +1,4 @@
import plugins = require('./smartpath.plugins'); import * as plugins from './smartpath.plugins.js';
/* ------------------------------------------ * /* ------------------------------------------ *
* ------------ helpers --------------------- * * ------------ helpers --------------------- *

View File

@ -1,17 +0,0 @@
{
"extends": ["tslint:latest", "tslint-config-prettier"],
"rules": {
"semicolon": [true, "always"],
"no-console": false,
"ordered-imports": false,
"object-literal-sort-keys": false,
"member-ordering": {
"options":{
"order": [
"static-method"
]
}
}
},
"defaultSeverity": "warning"
}