@qodalis/cli-guid 1.0.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.
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # Guid
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project guid` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project guid`.
8
+ > Note: Don't forget to add `--project guid` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build guid` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build guid`, go to the dist folder `cd dist/guid` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test guid` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CliGuidCommandProcessor } from './processors/cli-guid-command-processor';
3
+ import * as i0 from "@angular/core";
4
+ export class GuidModule {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuidModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GuidModule }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuidModule, providers: [CliGuidCommandProcessor] }); }
8
+ }
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuidModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ declarations: [],
13
+ imports: [],
14
+ exports: [],
15
+ providers: [CliGuidCommandProcessor],
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWlkL3NyYy9saWIvZ3VpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFRbEYsTUFBTSxPQUFPLFVBQVU7K0dBQVYsVUFBVTtnSEFBVixVQUFVO2dIQUFWLFVBQVUsYUFGUixDQUFDLHVCQUF1QixDQUFDOzs0RkFFM0IsVUFBVTtrQkFOdEIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsaUd1aWRDb21tYW5kUHJvY2Vzc29yIH0gZnJvbSAnLi9wcm9jZXNzb3JzL2NsaS1ndWlkLWNvbW1hbmQtcHJvY2Vzc29yJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxuICAgIHByb3ZpZGVyczogW0NsaUd1aWRDb21tYW5kUHJvY2Vzc29yXSxcbn0pXG5leHBvcnQgY2xhc3MgR3VpZE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,81 @@
1
+ /**
2
+ * A command processor for generating and validating GUIDs.
3
+ */
4
+ export class CliGuidCommandProcessor {
5
+ constructor() {
6
+ this.command = 'guid';
7
+ this.description = 'Generate and validate GUIDs';
8
+ this.author = {
9
+ name: 'Nicolae Lupei',
10
+ email: 'nicolae.lupei@qodalis.com',
11
+ };
12
+ this.processors = [];
13
+ this.processors = [
14
+ {
15
+ command: 'new',
16
+ description: 'Generate a new GUID',
17
+ parameters: [
18
+ {
19
+ name: 'copy',
20
+ aliases: ['c'],
21
+ description: 'Copy the GUID to the clipboard',
22
+ required: false,
23
+ type: 'boolean',
24
+ },
25
+ ],
26
+ processCommand: async (command, context) => {
27
+ const copyToClipboard = command.args['copy'] || command.args['c'];
28
+ const guid = CliGuidCommandProcessor.generateGUID();
29
+ context.writer.writeln(guid);
30
+ if (copyToClipboard) {
31
+ await context.clipboard.write(guid);
32
+ context.writer.writeInfo('The GUID has been copied to the clipboard');
33
+ }
34
+ },
35
+ },
36
+ {
37
+ command: 'validate',
38
+ allowUnlistedCommands: true,
39
+ description: 'Validate a GUID',
40
+ processCommand: async (command, context) => {
41
+ if (!command.value) {
42
+ context.writer.writeError('Please specify a GUID to validate');
43
+ return;
44
+ }
45
+ const isValid = CliGuidCommandProcessor.validateGUID(command.value);
46
+ if (isValid) {
47
+ context.writer.writeSuccess('Yes, that is GUID!');
48
+ }
49
+ else {
50
+ context.writer.writeError(`The GUID <${command.value}> is not valid`);
51
+ }
52
+ },
53
+ },
54
+ ];
55
+ }
56
+ async processCommand(command, context) {
57
+ context.writer.writeln('Please specify a subcommand');
58
+ }
59
+ writeDescription(context) {
60
+ context.writer.writeln(this.description);
61
+ //examples
62
+ context.writer.writeln('Examples:');
63
+ context.writer.writeln(' guid new');
64
+ context.writer.writeln(' guid new --copy');
65
+ context.writer.writeln(' guid validate 123e4567-e89b-12d3-a456-426614174000');
66
+ }
67
+ static generateGUID() {
68
+ // Generate a GUID in the format of xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
69
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
70
+ const random = (Math.random() * 16) | 0; // Random integer between 0 and 15
71
+ const value = char === 'x' ? random : (random & 0x3) | 0x8; // Ensure 'y' starts with 8, 9, A, or B
72
+ return value.toString(16); // Convert to hexadecimal
73
+ });
74
+ }
75
+ static validateGUID(guid) {
76
+ // Regular expression to match a valid GUID format
77
+ const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
78
+ return guidRegex.test(guid);
79
+ }
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWd1aWQtY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWlkL3NyYy9saWIvcHJvY2Vzc29ycy9jbGktZ3VpZC1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQTs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFVaEM7UUFUQSxZQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLGdCQUFXLEdBQUcsNkJBQTZCLENBQUM7UUFDNUMsV0FBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLGVBQWU7WUFDckIsS0FBSyxFQUFFLDJCQUEyQjtTQUNyQyxDQUFDO1FBRUYsZUFBVSxHQUF3QyxFQUFFLENBQUM7UUFHakQsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNkO2dCQUNJLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFdBQVcsRUFBRSxxQkFBcUI7Z0JBQ2xDLFVBQVUsRUFBRTtvQkFDUjt3QkFDSSxJQUFJLEVBQUUsTUFBTTt3QkFDWixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7d0JBQ2QsV0FBVyxFQUFFLGdDQUFnQzt3QkFDN0MsUUFBUSxFQUFFLEtBQUs7d0JBQ2YsSUFBSSxFQUFFLFNBQVM7cUJBQ2xCO2lCQUNKO2dCQUNELGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUN2QyxNQUFNLGVBQWUsR0FDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxNQUFNLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBRTdCLElBQUksZUFBZSxFQUFFO3dCQUNqQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDcEIsMkNBQTJDLENBQzlDLENBQUM7cUJBQ0w7Z0JBQ0wsQ0FBQzthQUNKO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLHFCQUFxQixFQUFFLElBQUk7Z0JBQzNCLFdBQVcsRUFBRSxpQkFBaUI7Z0JBQzlCLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO29CQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ3JCLG1DQUFtQyxDQUN0QyxDQUFDO3dCQUNGLE9BQU87cUJBQ1Y7b0JBRUQsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUNoRCxPQUFPLENBQUMsS0FBSyxDQUNoQixDQUFDO29CQUVGLElBQUksT0FBTyxFQUFFO3dCQUNULE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ3JEO3lCQUFNO3dCQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNyQixhQUFhLE9BQU8sQ0FBQyxLQUFLLGdCQUFnQixDQUM3QyxDQUFDO3FCQUNMO2dCQUNMLENBQUM7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FDaEIsT0FBMEIsRUFDMUIsT0FBNkI7UUFFN0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBNkI7UUFDMUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLFVBQVU7UUFDVixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNsQixzREFBc0QsQ0FDekQsQ0FBQztJQUNOLENBQUM7SUFFTSxNQUFNLENBQUMsWUFBWTtRQUN0Qix3RUFBd0U7UUFDeEUsT0FBTyxzQ0FBc0MsQ0FBQyxPQUFPLENBQ2pELE9BQU8sRUFDUCxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ0wsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1lBQzNFLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsdUNBQXVDO1lBQ25HLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtRQUN4RCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQVk7UUFDbkMsa0RBQWtEO1FBQ2xELE1BQU0sU0FBUyxHQUNYLHdGQUF3RixDQUFDO1FBQzdGLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENsaVByb2Nlc3NDb21tYW5kLFxuICAgIElDbGlDb21tYW5kUHJvY2Vzc29yLFxuICAgIElDbGlFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICdAcW9kYWxpcy9jbGktY29yZSc7XG5cbi8qKlxuICogQSBjb21tYW5kIHByb2Nlc3NvciBmb3IgZ2VuZXJhdGluZyBhbmQgdmFsaWRhdGluZyBHVUlEcy5cbiAqL1xuZXhwb3J0IGNsYXNzIENsaUd1aWRDb21tYW5kUHJvY2Vzc29yIGltcGxlbWVudHMgSUNsaUNvbW1hbmRQcm9jZXNzb3Ige1xuICAgIGNvbW1hbmQgPSAnZ3VpZCc7XG4gICAgZGVzY3JpcHRpb24gPSAnR2VuZXJhdGUgYW5kIHZhbGlkYXRlIEdVSURzJztcbiAgICBhdXRob3IgPSB7XG4gICAgICAgIG5hbWU6ICdOaWNvbGFlIEx1cGVpJyxcbiAgICAgICAgZW1haWw6ICduaWNvbGFlLmx1cGVpQHFvZGFsaXMuY29tJyxcbiAgICB9O1xuXG4gICAgcHJvY2Vzc29ycz86IElDbGlDb21tYW5kUHJvY2Vzc29yW10gfCB1bmRlZmluZWQgPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NvcnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ25ldycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBhIG5ldyBHVUlEJyxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb3B5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IFsnYyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb3B5IHRoZSBHVUlEIHRvIHRoZSBjbGlwYm9hcmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUb0NsaXBib2FyZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmFyZ3NbJ2NvcHknXSB8fCBjb21tYW5kLmFyZ3NbJ2MnXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3VpZCA9IENsaUd1aWRDb21tYW5kUHJvY2Vzc29yLmdlbmVyYXRlR1VJRCgpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKGd1aWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3B5VG9DbGlwYm9hcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpcGJvYXJkLndyaXRlKGd1aWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVJbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgR1VJRCBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ3ZhbGlkYXRlJyxcbiAgICAgICAgICAgICAgICBhbGxvd1VubGlzdGVkQ29tbWFuZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdWYWxpZGF0ZSBhIEdVSUQnLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoY29tbWFuZCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbW1hbmQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBzcGVjaWZ5IGEgR1VJRCB0byB2YWxpZGF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNWYWxpZCA9IENsaUd1aWRDb21tYW5kUHJvY2Vzc29yLnZhbGlkYXRlR1VJRChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcygnWWVzLCB0aGF0IGlzIEdVSUQhJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBUaGUgR1VJRCA8JHtjb21tYW5kLnZhbHVlfT4gaXMgbm90IHZhbGlkYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzQ29tbWFuZChcbiAgICAgICAgY29tbWFuZDogQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdQbGVhc2Ugc3BlY2lmeSBhIHN1YmNvbW1hbmQnKTtcbiAgICB9XG5cbiAgICB3cml0ZURlc2NyaXB0aW9uKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4odGhpcy5kZXNjcmlwdGlvbik7XG4gICAgICAgIC8vZXhhbXBsZXNcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignRXhhbXBsZXM6Jyk7XG4gICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJyAgZ3VpZCBuZXcnKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbignICBndWlkIG5ldyAtLWNvcHknKTtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICcgIGd1aWQgdmFsaWRhdGUgMTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDAwJyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlR1VJRCgpOiBzdHJpbmcge1xuICAgICAgICAvLyBHZW5lcmF0ZSBhIEdVSUQgaW4gdGhlIGZvcm1hdCBvZiB4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoXG4gICAgICAgICAgICAvW3h5XS9nLFxuICAgICAgICAgICAgKGNoYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5kb20gPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7IC8vIFJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTVcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNoYXIgPT09ICd4JyA/IHJhbmRvbSA6IChyYW5kb20gJiAweDMpIHwgMHg4OyAvLyBFbnN1cmUgJ3knIHN0YXJ0cyB3aXRoIDgsIDksIEEsIG9yIEJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoMTYpOyAvLyBDb252ZXJ0IHRvIGhleGFkZWNpbWFsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVHVUlEKGd1aWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYSB2YWxpZCBHVUlEIGZvcm1hdFxuICAgICAgICBjb25zdCBndWlkUmVnZXggPVxuICAgICAgICAgICAgL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS00WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0kLztcbiAgICAgICAgcmV0dXJuIGd1aWRSZWdleC50ZXN0KGd1aWQpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of guid
3
+ */
4
+ export * from './lib/guid.module';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2d1aWQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBndWlkXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3VpZC5tb2R1bGUnO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW9kYWxpcy1jbGktZ3VpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2d1aWQvc3JjL3FvZGFsaXMtY2xpLWd1aWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,109 @@
1
+ import * as i0 from '@angular/core';
2
+ import { NgModule } from '@angular/core';
3
+
4
+ /**
5
+ * A command processor for generating and validating GUIDs.
6
+ */
7
+ class CliGuidCommandProcessor {
8
+ constructor() {
9
+ this.command = 'guid';
10
+ this.description = 'Generate and validate GUIDs';
11
+ this.author = {
12
+ name: 'Nicolae Lupei',
13
+ email: 'nicolae.lupei@qodalis.com',
14
+ };
15
+ this.processors = [];
16
+ this.processors = [
17
+ {
18
+ command: 'new',
19
+ description: 'Generate a new GUID',
20
+ parameters: [
21
+ {
22
+ name: 'copy',
23
+ aliases: ['c'],
24
+ description: 'Copy the GUID to the clipboard',
25
+ required: false,
26
+ type: 'boolean',
27
+ },
28
+ ],
29
+ processCommand: async (command, context) => {
30
+ const copyToClipboard = command.args['copy'] || command.args['c'];
31
+ const guid = CliGuidCommandProcessor.generateGUID();
32
+ context.writer.writeln(guid);
33
+ if (copyToClipboard) {
34
+ await context.clipboard.write(guid);
35
+ context.writer.writeInfo('The GUID has been copied to the clipboard');
36
+ }
37
+ },
38
+ },
39
+ {
40
+ command: 'validate',
41
+ allowUnlistedCommands: true,
42
+ description: 'Validate a GUID',
43
+ processCommand: async (command, context) => {
44
+ if (!command.value) {
45
+ context.writer.writeError('Please specify a GUID to validate');
46
+ return;
47
+ }
48
+ const isValid = CliGuidCommandProcessor.validateGUID(command.value);
49
+ if (isValid) {
50
+ context.writer.writeSuccess('Yes, that is GUID!');
51
+ }
52
+ else {
53
+ context.writer.writeError(`The GUID <${command.value}> is not valid`);
54
+ }
55
+ },
56
+ },
57
+ ];
58
+ }
59
+ async processCommand(command, context) {
60
+ context.writer.writeln('Please specify a subcommand');
61
+ }
62
+ writeDescription(context) {
63
+ context.writer.writeln(this.description);
64
+ //examples
65
+ context.writer.writeln('Examples:');
66
+ context.writer.writeln(' guid new');
67
+ context.writer.writeln(' guid new --copy');
68
+ context.writer.writeln(' guid validate 123e4567-e89b-12d3-a456-426614174000');
69
+ }
70
+ static generateGUID() {
71
+ // Generate a GUID in the format of xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
72
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
73
+ const random = (Math.random() * 16) | 0; // Random integer between 0 and 15
74
+ const value = char === 'x' ? random : (random & 0x3) | 0x8; // Ensure 'y' starts with 8, 9, A, or B
75
+ return value.toString(16); // Convert to hexadecimal
76
+ });
77
+ }
78
+ static validateGUID(guid) {
79
+ // Regular expression to match a valid GUID format
80
+ const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
81
+ return guidRegex.test(guid);
82
+ }
83
+ }
84
+
85
+ class GuidModule {
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuidModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
87
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GuidModule }); }
88
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuidModule, providers: [CliGuidCommandProcessor] }); }
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GuidModule, decorators: [{
91
+ type: NgModule,
92
+ args: [{
93
+ declarations: [],
94
+ imports: [],
95
+ exports: [],
96
+ providers: [CliGuidCommandProcessor],
97
+ }]
98
+ }] });
99
+
100
+ /*
101
+ * Public API Surface of guid
102
+ */
103
+
104
+ /**
105
+ * Generated bundle index. Do not edit.
106
+ */
107
+
108
+ export { GuidModule };
109
+ //# sourceMappingURL=qodalis-cli-guid.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qodalis-cli-guid.mjs","sources":["../../../projects/guid/src/lib/processors/cli-guid-command-processor.ts","../../../projects/guid/src/lib/guid.module.ts","../../../projects/guid/src/public-api.ts","../../../projects/guid/src/qodalis-cli-guid.ts"],"sourcesContent":["import {\n CliProcessCommand,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\n/**\n * A command processor for generating and validating GUIDs.\n */\nexport class CliGuidCommandProcessor implements ICliCommandProcessor {\n command = 'guid';\n description = 'Generate and validate GUIDs';\n author = {\n name: 'Nicolae Lupei',\n email: 'nicolae.lupei@qodalis.com',\n };\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n constructor() {\n this.processors = [\n {\n command: 'new',\n description: 'Generate a new GUID',\n parameters: [\n {\n name: 'copy',\n aliases: ['c'],\n description: 'Copy the GUID to the clipboard',\n required: false,\n type: 'boolean',\n },\n ],\n processCommand: async (command, context) => {\n const copyToClipboard =\n command.args['copy'] || command.args['c'];\n const guid = CliGuidCommandProcessor.generateGUID();\n context.writer.writeln(guid);\n\n if (copyToClipboard) {\n await context.clipboard.write(guid);\n context.writer.writeInfo(\n 'The GUID has been copied to the clipboard',\n );\n }\n },\n },\n {\n command: 'validate',\n allowUnlistedCommands: true,\n description: 'Validate a GUID',\n processCommand: async (command, context) => {\n if (!command.value) {\n context.writer.writeError(\n 'Please specify a GUID to validate',\n );\n return;\n }\n\n const isValid = CliGuidCommandProcessor.validateGUID(\n command.value,\n );\n\n if (isValid) {\n context.writer.writeSuccess('Yes, that is GUID!');\n } else {\n context.writer.writeError(\n `The GUID <${command.value}> is not valid`,\n );\n }\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.writer.writeln('Please specify a subcommand');\n }\n\n writeDescription(context: ICliExecutionContext): void {\n context.writer.writeln(this.description);\n //examples\n context.writer.writeln('Examples:');\n context.writer.writeln(' guid new');\n context.writer.writeln(' guid new --copy');\n context.writer.writeln(\n ' guid validate 123e4567-e89b-12d3-a456-426614174000',\n );\n }\n\n public static generateGUID(): string {\n // Generate a GUID in the format of xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\n /[xy]/g,\n (char) => {\n const random = (Math.random() * 16) | 0; // Random integer between 0 and 15\n const value = char === 'x' ? random : (random & 0x3) | 0x8; // Ensure 'y' starts with 8, 9, A, or B\n return value.toString(16); // Convert to hexadecimal\n },\n );\n }\n\n public static validateGUID(guid: string): boolean {\n // Regular expression to match a valid GUID format\n const guidRegex =\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;\n return guidRegex.test(guid);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CliGuidCommandProcessor } from './processors/cli-guid-command-processor';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [CliGuidCommandProcessor],\n})\nexport class GuidModule {}\n","/*\n * Public API Surface of guid\n */\n\nexport * from './lib/guid.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@qodalis/cli-guid" />
5
+ export * from './public-api';
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class GuidModule {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<GuidModule, never>;
4
+ static ɵmod: i0.ɵɵNgModuleDeclaration<GuidModule, never, never, never>;
5
+ static ɵinj: i0.ɵɵInjectorDeclaration<GuidModule>;
6
+ }
@@ -0,0 +1,18 @@
1
+ import { CliProcessCommand, ICliCommandProcessor, ICliExecutionContext } from '@qodalis/cli-core';
2
+ /**
3
+ * A command processor for generating and validating GUIDs.
4
+ */
5
+ export declare class CliGuidCommandProcessor implements ICliCommandProcessor {
6
+ command: string;
7
+ description: string;
8
+ author: {
9
+ name: string;
10
+ email: string;
11
+ };
12
+ processors?: ICliCommandProcessor[] | undefined;
13
+ constructor();
14
+ processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void>;
15
+ writeDescription(context: ICliExecutionContext): void;
16
+ static generateGUID(): string;
17
+ static validateGUID(guid: string): boolean;
18
+ }
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@qodalis/cli-guid",
3
+ "version": "1.0.1",
4
+ "description": "An Angular CLI extension for generating and validating GUIDs.",
5
+ "author": "Nicolae Lupei, Qodalis Solutions",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/qodalis-solutions/qodalis-angular-cli"
10
+ },
11
+ "homepage": "https://qodalis.com",
12
+ "keywords": [
13
+ "angular",
14
+ "cli",
15
+ "qodalis",
16
+ "terminal"
17
+ ],
18
+ "umd": "./umd/index.js",
19
+ "unpkg": "./umd/index.js",
20
+ "peerDependencies": {
21
+ "@angular/common": "^16.2.0",
22
+ "@angular/core": "^16.2.0"
23
+ },
24
+ "dependencies": {
25
+ "tslib": "^2.3.0",
26
+ "@qodalis/cli-core": "^0.0.2",
27
+ "@qodalis/angular-cli": "^1.0.10"
28
+ },
29
+ "sideEffects": false,
30
+ "module": "fesm2022/qodalis-cli-guid.mjs",
31
+ "typings": "index.d.ts",
32
+ "exports": {
33
+ "./package.json": {
34
+ "default": "./package.json"
35
+ },
36
+ ".": {
37
+ "types": "./index.d.ts",
38
+ "esm2022": "./esm2022/qodalis-cli-guid.mjs",
39
+ "esm": "./esm2022/qodalis-cli-guid.mjs",
40
+ "default": "./fesm2022/qodalis-cli-guid.mjs"
41
+ }
42
+ }
43
+ }
@@ -0,0 +1 @@
1
+ export * from './lib/guid.module';
package/umd/index.js ADDED
@@ -0,0 +1,97 @@
1
+ (function (factory) {
2
+ typeof define === 'function' && define.amd ? define(factory) :
3
+ factory();
4
+ })((function () { 'use strict';
5
+
6
+ /**
7
+ * A command processor for generating and validating GUIDs.
8
+ */
9
+ class CliGuidCommandProcessor {
10
+ constructor() {
11
+ this.command = 'guid';
12
+ this.description = 'Generate and validate GUIDs';
13
+ this.author = {
14
+ name: 'Nicolae Lupei',
15
+ email: 'nicolae.lupei@qodalis.com',
16
+ };
17
+ this.processors = [];
18
+ this.processors = [
19
+ {
20
+ command: 'new',
21
+ description: 'Generate a new GUID',
22
+ parameters: [
23
+ {
24
+ name: 'copy',
25
+ aliases: ['c'],
26
+ description: 'Copy the GUID to the clipboard',
27
+ required: false,
28
+ type: 'boolean',
29
+ },
30
+ ],
31
+ processCommand: async (command, context) => {
32
+ const copyToClipboard = command.args['copy'] || command.args['c'];
33
+ const guid = CliGuidCommandProcessor.generateGUID();
34
+ context.writer.writeln(guid);
35
+ if (copyToClipboard) {
36
+ await context.clipboard.write(guid);
37
+ context.writer.writeInfo('The GUID has been copied to the clipboard');
38
+ }
39
+ },
40
+ },
41
+ {
42
+ command: 'validate',
43
+ allowUnlistedCommands: true,
44
+ description: 'Validate a GUID',
45
+ processCommand: async (command, context) => {
46
+ if (!command.value) {
47
+ context.writer.writeError('Please specify a GUID to validate');
48
+ return;
49
+ }
50
+ const isValid = CliGuidCommandProcessor.validateGUID(command.value);
51
+ if (isValid) {
52
+ context.writer.writeSuccess('Yes, that is GUID!');
53
+ }
54
+ else {
55
+ context.writer.writeError(`The GUID <${command.value}> is not valid`);
56
+ }
57
+ },
58
+ },
59
+ ];
60
+ }
61
+ async processCommand(command, context) {
62
+ context.writer.writeln('Please specify a subcommand');
63
+ }
64
+ writeDescription(context) {
65
+ context.writer.writeln(this.description);
66
+ //examples
67
+ context.writer.writeln('Examples:');
68
+ context.writer.writeln(' guid new');
69
+ context.writer.writeln(' guid new --copy');
70
+ context.writer.writeln(' guid validate 123e4567-e89b-12d3-a456-426614174000');
71
+ }
72
+ static generateGUID() {
73
+ // Generate a GUID in the format of xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
74
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
75
+ const random = (Math.random() * 16) | 0; // Random integer between 0 and 15
76
+ const value = char === 'x' ? random : (random & 0x3) | 0x8; // Ensure 'y' starts with 8, 9, A, or B
77
+ return value.toString(16); // Convert to hexadecimal
78
+ });
79
+ }
80
+ static validateGUID(guid) {
81
+ // Regular expression to match a valid GUID format
82
+ const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
83
+ return guidRegex.test(guid);
84
+ }
85
+ }
86
+
87
+ if (typeof window !== 'undefined') {
88
+ const module = {
89
+ processors: [new CliGuidCommandProcessor()],
90
+ };
91
+ window.guid = module;
92
+ }
93
+ else {
94
+ console.log('window is undefined');
95
+ }
96
+
97
+ }));