├── .gitignore ├── .vscode └── launch.json ├── README.md ├── lib └── guid.ts ├── package-lock.json ├── package.json ├── tests └── guid.spec.ts ├── tsconfig.json └── tslint.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Test", 9 | "type": "node", 10 | "request": "launch", 11 | "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", 12 | "stopOnEntry": false, 13 | "args": [ 14 | "--require", 15 | "ts-node/register", 16 | "tests/*.spec.ts" 17 | ], 18 | "cwd": "${workspaceRoot}", 19 | "preLaunchTask": null, 20 | "runtimeExecutable": null, 21 | "runtimeArgs": [ 22 | "--nolazy" 23 | ], 24 | "env": { 25 | "NODE_ENV": "development" 26 | }, 27 | "externalConsole": false, 28 | "sourceMaps": true, 29 | "outDir": null 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Guid Typescript 2 | 3 | Guid Typescript is a library that lets you generate guid code 4 | 5 | ## Installation and usage 6 | ### Installation 7 | 8 | ``` 9 | npm i guid-typescript --save 10 | ``` 11 | 12 | ### Basic usage 13 | 14 | ```typescript 15 | import { Guid } from "guid-typescript"; 16 | 17 | export class Example { 18 | public id: Guid; 19 | constructor() { 20 | this.id = Guid.create(); // ==> b77d409a-10cd-4a47-8e94-b0cd0ab50aa1 21 | } 22 | } 23 | ``` 24 | 25 | ## Props and Methods 26 | 27 | | Method/Prop | Description | Test | Status | 28 | |---|---|---|---| 29 | | static isGuid (guid: any): boolean | Check if value is a guid code | OK | Ready | 30 | | static create ( ): Guid | Create a new guid | OK | Ready | 31 | | static createEmpty ( ): Guid | Create an empty guid | OK | Ready | 32 | | static parse (guid: string): Guid | Creates a guid instance from a given guid as string | OK | Ready | 33 | | static raw ( ): string | Create a guid code in string format | OK | Ready | 34 | | equals (other: Guid): boolean | Compare a guid code | OK | Ready | 35 | | isEmpty ( ): boolean | Validate if a guid is empty | OK | Ready | 36 | | toString ( ): string | Parse a guid instance to string format | OK | Ready | 37 | | toJSON ( ): any | Parse to JSON format | OK | Ready | 38 | 39 | 40 | -------------------------------------------------------------------------------- /lib/guid.ts: -------------------------------------------------------------------------------- 1 | export class Guid { 2 | 3 | public static validator = new RegExp("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$", "i"); 4 | 5 | public static EMPTY = "00000000-0000-0000-0000-000000000000"; 6 | 7 | public static isGuid(guid: any) { 8 | const value: string = guid.toString(); 9 | return guid && (guid instanceof Guid || Guid.validator.test(value)); 10 | } 11 | 12 | public static create(): Guid { 13 | return new Guid([Guid.gen(2), Guid.gen(1), Guid.gen(1), Guid.gen(1), Guid.gen(3)].join("-")); 14 | } 15 | 16 | public static createEmpty(): Guid { 17 | return new Guid("emptyguid"); 18 | } 19 | 20 | public static parse(guid: string): Guid { 21 | return new Guid(guid); 22 | } 23 | 24 | public static raw(): string { 25 | return [Guid.gen(2), Guid.gen(1), Guid.gen(1), Guid.gen(1), Guid.gen(3)].join("-"); 26 | } 27 | 28 | private static gen(count: number) { 29 | let out: string = ""; 30 | for (let i: number = 0; i < count; i++) { 31 | // tslint:disable-next-line:no-bitwise 32 | out += (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); 33 | } 34 | return out; 35 | } 36 | 37 | private value: string; 38 | 39 | private constructor(guid: string) { 40 | if (!guid) { throw new TypeError("Invalid argument; `value` has no value."); } 41 | 42 | this.value = Guid.EMPTY; 43 | 44 | if (guid && Guid.isGuid(guid)) { 45 | this.value = guid; 46 | } 47 | } 48 | 49 | public equals(other: Guid): boolean { 50 | // Comparing string `value` against provided `guid` will auto-call 51 | // toString on `guid` for comparison 52 | return Guid.isGuid(other) && this.value === other.toString(); 53 | } 54 | 55 | public isEmpty(): boolean { 56 | return this.value === Guid.EMPTY; 57 | } 58 | 59 | public toString(): string { 60 | return this.value; 61 | } 62 | 63 | public toJSON(): any { 64 | return { 65 | value: this.value, 66 | }; 67 | } 68 | } 69 | 70 | 71 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "guid-typescript", 3 | "version": "1.0.7", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/chai": { 8 | "version": "4.1.0", 9 | "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.0.tgz", 10 | "integrity": "sha512-OuYBlXWHYthxIudMXMeQr92f6D97YoT9CUYCRb0BEP4OavC95jNcczjjr4Ob3H5E1IqlWqwj+leUZPSeth27Qw==", 11 | "dev": true 12 | }, 13 | "@types/mocha": { 14 | "version": "2.2.46", 15 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.46.tgz", 16 | "integrity": "sha512-fwTTP5QLf4xHMkv7ovcKvmlLWX3GrxCa5DRQDOilVyYGCp+arZTAQJCy7/4GKezzYJjfWMpB/Cy4e8nrc9XioA==", 17 | "dev": true 18 | }, 19 | "@types/node": { 20 | "version": "9.3.0", 21 | "resolved": "https://registry.npmjs.org/@types/node/-/node-9.3.0.tgz", 22 | "integrity": "sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw==", 23 | "dev": true 24 | }, 25 | "ansi-regex": { 26 | "version": "2.1.1", 27 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 28 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 29 | "dev": true 30 | }, 31 | "ansi-styles": { 32 | "version": "3.2.0", 33 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 34 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 35 | "dev": true, 36 | "requires": { 37 | "color-convert": "1.9.1" 38 | } 39 | }, 40 | "argparse": { 41 | "version": "1.0.9", 42 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 43 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 44 | "dev": true, 45 | "requires": { 46 | "sprintf-js": "1.0.3" 47 | } 48 | }, 49 | "arrify": { 50 | "version": "1.0.1", 51 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 52 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 53 | "dev": true 54 | }, 55 | "assertion-error": { 56 | "version": "1.1.0", 57 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 58 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 59 | "dev": true 60 | }, 61 | "babel-code-frame": { 62 | "version": "6.26.0", 63 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 64 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 65 | "dev": true, 66 | "requires": { 67 | "chalk": "1.1.3", 68 | "esutils": "2.0.2", 69 | "js-tokens": "3.0.2" 70 | }, 71 | "dependencies": { 72 | "ansi-styles": { 73 | "version": "2.2.1", 74 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 75 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 76 | "dev": true 77 | }, 78 | "chalk": { 79 | "version": "1.1.3", 80 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 81 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 82 | "dev": true, 83 | "requires": { 84 | "ansi-styles": "2.2.1", 85 | "escape-string-regexp": "1.0.5", 86 | "has-ansi": "2.0.0", 87 | "strip-ansi": "3.0.1", 88 | "supports-color": "2.0.0" 89 | } 90 | }, 91 | "supports-color": { 92 | "version": "2.0.0", 93 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 94 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 95 | "dev": true 96 | } 97 | } 98 | }, 99 | "balanced-match": { 100 | "version": "1.0.0", 101 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 102 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 103 | "dev": true 104 | }, 105 | "brace-expansion": { 106 | "version": "1.1.8", 107 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 108 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 109 | "dev": true, 110 | "requires": { 111 | "balanced-match": "1.0.0", 112 | "concat-map": "0.0.1" 113 | } 114 | }, 115 | "browser-stdout": { 116 | "version": "1.3.0", 117 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 118 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 119 | "dev": true 120 | }, 121 | "buffer-from": { 122 | "version": "1.1.1", 123 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 124 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 125 | "dev": true 126 | }, 127 | "builtin-modules": { 128 | "version": "1.1.1", 129 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 130 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 131 | "dev": true 132 | }, 133 | "chai": { 134 | "version": "4.1.2", 135 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", 136 | "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", 137 | "dev": true, 138 | "requires": { 139 | "assertion-error": "1.1.0", 140 | "check-error": "1.0.2", 141 | "deep-eql": "3.0.1", 142 | "get-func-name": "2.0.0", 143 | "pathval": "1.1.0", 144 | "type-detect": "4.0.5" 145 | } 146 | }, 147 | "chalk": { 148 | "version": "2.3.0", 149 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 150 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 151 | "dev": true, 152 | "requires": { 153 | "ansi-styles": "3.2.0", 154 | "escape-string-regexp": "1.0.5", 155 | "supports-color": "4.4.0" 156 | } 157 | }, 158 | "check-error": { 159 | "version": "1.0.2", 160 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 161 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 162 | "dev": true 163 | }, 164 | "color-convert": { 165 | "version": "1.9.1", 166 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 167 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 168 | "dev": true, 169 | "requires": { 170 | "color-name": "1.1.3" 171 | } 172 | }, 173 | "color-name": { 174 | "version": "1.1.3", 175 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 176 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 177 | "dev": true 178 | }, 179 | "commander": { 180 | "version": "2.11.0", 181 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 182 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 183 | "dev": true 184 | }, 185 | "concat-map": { 186 | "version": "0.0.1", 187 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 188 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 189 | "dev": true 190 | }, 191 | "debug": { 192 | "version": "3.1.0", 193 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 194 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 195 | "dev": true, 196 | "requires": { 197 | "ms": "2.0.0" 198 | } 199 | }, 200 | "deep-eql": { 201 | "version": "3.0.1", 202 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 203 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 204 | "dev": true, 205 | "requires": { 206 | "type-detect": "4.0.5" 207 | } 208 | }, 209 | "diff": { 210 | "version": "3.3.1", 211 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", 212 | "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", 213 | "dev": true 214 | }, 215 | "escape-string-regexp": { 216 | "version": "1.0.5", 217 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 218 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 219 | "dev": true 220 | }, 221 | "esprima": { 222 | "version": "4.0.0", 223 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 224 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 225 | "dev": true 226 | }, 227 | "esutils": { 228 | "version": "2.0.2", 229 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 230 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 231 | "dev": true 232 | }, 233 | "fs.realpath": { 234 | "version": "1.0.0", 235 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 236 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 237 | "dev": true 238 | }, 239 | "get-func-name": { 240 | "version": "2.0.0", 241 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 242 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 243 | "dev": true 244 | }, 245 | "glob": { 246 | "version": "7.1.2", 247 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 248 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 249 | "dev": true, 250 | "requires": { 251 | "fs.realpath": "1.0.0", 252 | "inflight": "1.0.6", 253 | "inherits": "2.0.3", 254 | "minimatch": "3.0.4", 255 | "once": "1.4.0", 256 | "path-is-absolute": "1.0.1" 257 | } 258 | }, 259 | "growl": { 260 | "version": "1.10.3", 261 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 262 | "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", 263 | "dev": true 264 | }, 265 | "has-ansi": { 266 | "version": "2.0.0", 267 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 268 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 269 | "dev": true, 270 | "requires": { 271 | "ansi-regex": "2.1.1" 272 | } 273 | }, 274 | "has-flag": { 275 | "version": "2.0.0", 276 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 277 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 278 | "dev": true 279 | }, 280 | "he": { 281 | "version": "1.1.1", 282 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 283 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 284 | "dev": true 285 | }, 286 | "inflight": { 287 | "version": "1.0.6", 288 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 289 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 290 | "dev": true, 291 | "requires": { 292 | "once": "1.4.0", 293 | "wrappy": "1.0.2" 294 | } 295 | }, 296 | "inherits": { 297 | "version": "2.0.3", 298 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 299 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 300 | "dev": true 301 | }, 302 | "js-tokens": { 303 | "version": "3.0.2", 304 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 305 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 306 | "dev": true 307 | }, 308 | "js-yaml": { 309 | "version": "3.10.0", 310 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", 311 | "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", 312 | "dev": true, 313 | "requires": { 314 | "argparse": "1.0.9", 315 | "esprima": "4.0.0" 316 | } 317 | }, 318 | "make-error": { 319 | "version": "1.3.5", 320 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", 321 | "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", 322 | "dev": true 323 | }, 324 | "minimatch": { 325 | "version": "3.0.4", 326 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 327 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 328 | "dev": true, 329 | "requires": { 330 | "brace-expansion": "1.1.8" 331 | } 332 | }, 333 | "minimist": { 334 | "version": "0.0.8", 335 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 336 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 337 | "dev": true 338 | }, 339 | "mkdirp": { 340 | "version": "0.5.1", 341 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 342 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 343 | "dev": true, 344 | "requires": { 345 | "minimist": "0.0.8" 346 | } 347 | }, 348 | "mocha": { 349 | "version": "4.1.0", 350 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", 351 | "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", 352 | "dev": true, 353 | "requires": { 354 | "browser-stdout": "1.3.0", 355 | "commander": "2.11.0", 356 | "debug": "3.1.0", 357 | "diff": "3.3.1", 358 | "escape-string-regexp": "1.0.5", 359 | "glob": "7.1.2", 360 | "growl": "1.10.3", 361 | "he": "1.1.1", 362 | "mkdirp": "0.5.1", 363 | "supports-color": "4.4.0" 364 | } 365 | }, 366 | "ms": { 367 | "version": "2.0.0", 368 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 369 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 370 | "dev": true 371 | }, 372 | "once": { 373 | "version": "1.4.0", 374 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 375 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 376 | "dev": true, 377 | "requires": { 378 | "wrappy": "1.0.2" 379 | } 380 | }, 381 | "path-is-absolute": { 382 | "version": "1.0.1", 383 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 384 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 385 | "dev": true 386 | }, 387 | "path-parse": { 388 | "version": "1.0.5", 389 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 390 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 391 | "dev": true 392 | }, 393 | "pathval": { 394 | "version": "1.1.0", 395 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", 396 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", 397 | "dev": true 398 | }, 399 | "resolve": { 400 | "version": "1.5.0", 401 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", 402 | "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", 403 | "dev": true, 404 | "requires": { 405 | "path-parse": "1.0.5" 406 | } 407 | }, 408 | "semver": { 409 | "version": "5.4.1", 410 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 411 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 412 | "dev": true 413 | }, 414 | "source-map": { 415 | "version": "0.6.1", 416 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 417 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 418 | "dev": true 419 | }, 420 | "source-map-support": { 421 | "version": "0.5.9", 422 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", 423 | "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", 424 | "dev": true, 425 | "requires": { 426 | "buffer-from": "1.1.1", 427 | "source-map": "0.6.1" 428 | } 429 | }, 430 | "sprintf-js": { 431 | "version": "1.0.3", 432 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 433 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 434 | "dev": true 435 | }, 436 | "strip-ansi": { 437 | "version": "3.0.1", 438 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 439 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 440 | "dev": true, 441 | "requires": { 442 | "ansi-regex": "2.1.1" 443 | } 444 | }, 445 | "supports-color": { 446 | "version": "4.4.0", 447 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 448 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 449 | "dev": true, 450 | "requires": { 451 | "has-flag": "2.0.0" 452 | } 453 | }, 454 | "ts-node": { 455 | "version": "7.0.1", 456 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", 457 | "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", 458 | "dev": true, 459 | "requires": { 460 | "arrify": "1.0.1", 461 | "buffer-from": "1.1.1", 462 | "diff": "3.3.1", 463 | "make-error": "1.3.5", 464 | "minimist": "1.2.0", 465 | "mkdirp": "0.5.1", 466 | "source-map-support": "0.5.9", 467 | "yn": "2.0.0" 468 | }, 469 | "dependencies": { 470 | "minimist": { 471 | "version": "1.2.0", 472 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 473 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 474 | "dev": true 475 | } 476 | } 477 | }, 478 | "tslib": { 479 | "version": "1.8.1", 480 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", 481 | "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", 482 | "dev": true 483 | }, 484 | "tslint": { 485 | "version": "5.9.1", 486 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", 487 | "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", 488 | "dev": true, 489 | "requires": { 490 | "babel-code-frame": "6.26.0", 491 | "builtin-modules": "1.1.1", 492 | "chalk": "2.3.0", 493 | "commander": "2.13.0", 494 | "diff": "3.3.1", 495 | "glob": "7.1.2", 496 | "js-yaml": "3.10.0", 497 | "minimatch": "3.0.4", 498 | "resolve": "1.5.0", 499 | "semver": "5.4.1", 500 | "tslib": "1.8.1", 501 | "tsutils": "2.16.0" 502 | }, 503 | "dependencies": { 504 | "commander": { 505 | "version": "2.13.0", 506 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", 507 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", 508 | "dev": true 509 | } 510 | } 511 | }, 512 | "tsutils": { 513 | "version": "2.16.0", 514 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.16.0.tgz", 515 | "integrity": "sha512-9Ier/60O7OZRNPiw+or5QAtAY4kQA+WDiO/r6xOYATEyefH9bdfvTRLCxrYnFhQlZfET2vYXKfpr3Vw2BiArZw==", 516 | "dev": true, 517 | "requires": { 518 | "tslib": "1.8.1" 519 | } 520 | }, 521 | "type-detect": { 522 | "version": "4.0.5", 523 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", 524 | "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==", 525 | "dev": true 526 | }, 527 | "typescript": { 528 | "version": "3.1.3", 529 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.3.tgz", 530 | "integrity": "sha512-+81MUSyX+BaSo+u2RbozuQk/UWx6hfG0a5gHu4ANEM4sU96XbuIyAB+rWBW1u70c6a5QuZfuYICn3s2UjuHUpA==", 531 | "dev": true 532 | }, 533 | "wrappy": { 534 | "version": "1.0.2", 535 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 536 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 537 | "dev": true 538 | }, 539 | "yn": { 540 | "version": "2.0.0", 541 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", 542 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", 543 | "dev": true 544 | } 545 | } 546 | } 547 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "guid-typescript", 3 | "version": "1.0.8", 4 | "description": "Guid generator to typescript", 5 | "scripts": { 6 | "verify": ".\\node_modules\\.bin\\tslint .\\lib\\**", 7 | "test": "npm run verify && mocha -r ts-node/register tests/*.spec.ts", 8 | "build": ".\\node_modules\\.bin\\tsc lib/guid -t es3 -m commonjs -d --outDir dist" 9 | }, 10 | "author": "nicolas", 11 | "license": "ISC", 12 | "keywords": [ 13 | "typescript", 14 | "guid", 15 | "identifier" 16 | ], 17 | "main": "./dist/guid.js", 18 | "types": "./dist/guid.d.ts", 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/NicolasDeveloper/guid-typescript" 22 | }, 23 | "devDependencies": { 24 | "@types/chai": "^4.1.0", 25 | "@types/mocha": "^2.2.46", 26 | "@types/node": "^9.3.0", 27 | "chai": "^4.1.2", 28 | "mocha": "^4.1.0", 29 | "ts-node": "^7.0.1", 30 | "tslint": "^5.8.0", 31 | "typescript": "^3.1.3" 32 | }, 33 | "dependencies": {}, 34 | "files": [ 35 | "/dist/" 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /tests/guid.spec.ts: -------------------------------------------------------------------------------- 1 | import { assert, expect } from "chai"; 2 | import "mocha"; 3 | import { Guid } from "../lib/guid"; 4 | 5 | describe("Guid test", () => { 6 | 7 | it("Should create a guid", () => { 8 | const wrong = "wrongguid"; 9 | expect(Guid.isGuid(wrong)).equal(false); 10 | 11 | const right = Guid.create(); 12 | expect(Guid.isGuid(right)).equal(true); 13 | }); 14 | 15 | it("Should raw a guid", () => { 16 | const wrong = "wrongguid"; 17 | expect(Guid.isGuid(wrong)).equal(false); 18 | 19 | const right = Guid.raw(); 20 | expect(Guid.isGuid(right)).equal(true); 21 | }); 22 | 23 | it("Should compare another guid", () => { 24 | const wrong = Guid.create(); 25 | expect(wrong.equals(Guid.create())).equal(false); 26 | 27 | const right = Guid.create(); 28 | expect(right.equals(right)).equal(true); 29 | }); 30 | 31 | it("Should compare another guid empty", () => { 32 | const wrong = Guid.createEmpty(); 33 | expect(wrong.equals(Guid.create())).equal(false); 34 | 35 | const right = Guid.createEmpty(); 36 | expect(right.equals(Guid.createEmpty())).equal(true); 37 | }); 38 | 39 | it("Should verify if is guid", () => { 40 | const wrong = "wrong guid"; 41 | expect(Guid.isGuid(wrong)).equal(false); 42 | 43 | const right = Guid.create(); 44 | expect(Guid.isGuid(right)).equal(true); 45 | }); 46 | 47 | it("Should parse a guid", () => { 48 | const wrong = Guid.raw(); 49 | expect(Guid.parse(wrong).equals(Guid.create())).equal(false); 50 | 51 | const right = Guid.raw(); 52 | expect(Guid.parse(right).equals(Guid.parse(right))).equal(true); 53 | }); 54 | 55 | it("Should be unique value", () => { 56 | const guids = []; 57 | for (let index = 0; index < 3000; index++) { 58 | guids.push(Guid.create()); 59 | } 60 | expect(guids.indexOf(guids[0]) < 0).equal(false); 61 | 62 | expect(guids.indexOf(Guid.create()) < 0).equal(true); 63 | }); 64 | 65 | }); -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2015", 4 | "module": "commonjs", 5 | "outDir": "dist", 6 | "declaration": true, 7 | "declarationMap": true, 8 | "sourceMap": true, 9 | "strict": true, 10 | "esModuleInterop": true 11 | } 12 | } -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rules": { 4 | "max-line-length": { 5 | "options": [400] 6 | }, 7 | "new-parens": true, 8 | "no-arg": true, 9 | "eofline": false, 10 | "no-trailing-whitespace": false, 11 | "no-bitwise": true, 12 | "no-empty-interface": false, 13 | "no-conditional-assignment": true, 14 | "no-consecutive-blank-lines": false, 15 | "variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"], 16 | "no-console": { 17 | "severity": "warning", 18 | "options": [ 19 | "debug", 20 | "info", 21 | "log", 22 | "time", 23 | "timeEnd", 24 | "trace" 25 | ] 26 | } 27 | }, 28 | "jsRules": { 29 | "max-line-length": { 30 | "options": [120] 31 | } 32 | } 33 | } --------------------------------------------------------------------------------