@w5s/dev 1.4.0 → 1.5.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/dist/block.d.ts CHANGED
@@ -16,7 +16,7 @@ export interface BlockOptions {
16
16
  /**
17
17
  * Insert position
18
18
  */
19
- insertPosition?: ['before', 'BeginningOfFile'] | ['after', 'EndOfFile'];
19
+ insertPosition?: ['before', 'BeginningOfFile' | RegExp] | ['after', 'EndOfFile' | RegExp];
20
20
  /**
21
21
  * Block target state
22
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC;IAC3C;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACxE;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B;AA0ED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,iBAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,QAE9C"}
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC;IAC3C;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;IAC1F;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B;AAmGD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,iBAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,QAE9C"}
package/dist/block.js CHANGED
@@ -4,6 +4,23 @@ exports.blockSync = exports.block = void 0;
4
4
  const file_js_1 = require("./file.js");
5
5
  const EOF = 'EndOfFile';
6
6
  const BOF = 'BeginningOfFile';
7
+ const insertAt = (str, index, toInsert) => str.slice(0, index) + toInsert + str.slice(index);
8
+ const matchLast = (string, regexp) => {
9
+ const matcher = new RegExp(regexp.source, `${regexp.flags}g`);
10
+ let firstIndex = -1;
11
+ let lastIndex = -1;
12
+ let matches;
13
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
14
+ while (true) {
15
+ matches = matcher.exec(string);
16
+ if (matches == null) {
17
+ break;
18
+ }
19
+ firstIndex = matches.index;
20
+ lastIndex = matcher.lastIndex;
21
+ }
22
+ return { firstIndex, lastIndex };
23
+ };
7
24
  function toFileOptions(options) {
8
25
  const { marker = (mark) => `# ${mark.toUpperCase()} MANAGED BLOCK`, path, block: blockName, insertPosition = ['after', EOF], state = 'present', } = options;
9
26
  const EOL = '\n';
@@ -33,20 +50,26 @@ function toFileOptions(options) {
33
50
  return fullContent;
34
51
  }
35
52
  switch (positionDirection) {
36
- case 'after': {
37
- // insert
38
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
39
- if (positionAnchor === EOF) {
40
- return fullContent + EOL + replaceBlock;
53
+ case 'before': {
54
+ if (positionAnchor !== BOF) {
55
+ const { firstIndex } = matchLast(fullContent, positionAnchor);
56
+ if (firstIndex >= 0) {
57
+ return insertAt(fullContent, firstIndex, replaceBlock + EOL);
58
+ }
41
59
  }
42
- return fullContent;
60
+ // Beginning of file
61
+ return replaceBlock + EOL + fullContent;
43
62
  }
44
- case 'before': {
45
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
46
- if (positionAnchor === BOF) {
47
- return replaceBlock + EOL + fullContent;
63
+ case 'after': {
64
+ // insert
65
+ if (positionAnchor !== EOF) {
66
+ const { lastIndex } = matchLast(fullContent, positionAnchor);
67
+ if (lastIndex >= 0) {
68
+ return insertAt(fullContent, lastIndex, EOL + replaceBlock);
69
+ }
48
70
  }
49
- return fullContent;
71
+ // end of file
72
+ return fullContent + EOL + replaceBlock;
50
73
  }
51
74
  default: {
52
75
  throw new Error(`Unsupported position ${String(positionDirection)}`);
package/dist/block.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"block.js","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}
package/dist/project.d.ts CHANGED
@@ -11,6 +11,7 @@ export declare namespace Project {
11
11
  javascriptreact: readonly Extension[];
12
12
  typescript: readonly Extension[];
13
13
  typescriptreact: readonly Extension[];
14
+ yaml: readonly Extension[];
14
15
  }
15
16
  /**
16
17
  * A list of "vscode-like" language identifiers (i.e. "javascript", "javascriptreact")
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAIA,yBAAiB,OAAO,CAAC;IACvB;;OAEG;IACH,KAAY,SAAS,GAAG,IAAI,MAAM,EAAE,CAAC;IAErC;;OAEG;IACH,UAAiB,iBAAiB;QAChC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;QACjC,eAAe,EAAE,SAAS,SAAS,EAAE,CAAC;QACtC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;QACjC,eAAe,EAAE,SAAS,SAAS,EAAE,CAAC;KACvC;IAED;;OAEG;IACH,KAAY,UAAU,GAAG,MAAM,iBAAiB,CAAC;IAEjD;;;;;;;OAOG;IACH,SAAgB,WAAW,SAE1B;IASD;;;;;;;;;;OAUG;IACH,SAAgB,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,SAAS,EAAE,CAO7E;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB,4BAE/B;IAkBD;;;;;;;OAOG;IACH,SAAgB,kBAAkB,4BAEjC;IAeD;;;;;;;OAOG;IACH,SAAgB,OAAO,sBAEtB;IAED;;;;;;;OAOG;IACH,SAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAE5E;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAEzE;CACF"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAIA,yBAAiB,OAAO,CAAC;IACvB;;OAEG;IACH,KAAY,SAAS,GAAG,IAAI,MAAM,EAAE,CAAC;IAErC;;OAEG;IACH,UAAiB,iBAAiB;QAChC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;QACjC,eAAe,EAAE,SAAS,SAAS,EAAE,CAAC;QACtC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;QACjC,eAAe,EAAE,SAAS,SAAS,EAAE,CAAC;QACtC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;KAC5B;IAED;;OAEG;IACH,KAAY,UAAU,GAAG,MAAM,iBAAiB,CAAC;IAEjD;;;;;;;OAOG;IACH,SAAgB,WAAW,SAE1B;IAUD;;;;;;;;;;OAUG;IACH,SAAgB,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,SAAS,EAAE,CAO7E;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB,4BAE/B;IAiBD;;;;;;;OAOG;IACH,SAAgB,kBAAkB,4BAEjC;IAeD;;;;;;;OAOG;IACH,SAAgB,OAAO,sBAEtB;IAED;;;;;;;OAOG;IACH,SAAgB,mBAAmB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAE5E;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,CAEzE;CACF"}
package/dist/project.js CHANGED
@@ -23,6 +23,7 @@ var Project;
23
23
  javascriptreact: ['.jsx'],
24
24
  typescript: ['.ts', '.cts', '.mts'],
25
25
  typescriptreact: ['.tsx'],
26
+ yaml: ['.yaml', '.yml'],
26
27
  };
27
28
  /**
28
29
  * Return a list of extensions
@@ -65,8 +66,7 @@ var Project;
65
66
  '.svg',
66
67
  '.gql',
67
68
  '.graphql',
68
- '.yml',
69
- '.yaml',
69
+ ...queryExtensions(['yaml']),
70
70
  ]);
71
71
  /**
72
72
  * Resource file extensions
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":";;;AAAA,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;AAC9F,CAAC;AAED,IAAiB,OAAO,CAoJvB;AApJD,WAAiB,OAAO;IAqBtB;;;;;;;OAOG;IACH,SAAgB,WAAW;QACzB,OAAO,IAAa,CAAC;IACvB,CAAC;IAFe,mBAAW,cAE1B,CAAA;IAED,MAAM,QAAQ,GAA4C;QACxD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QACnC,eAAe,EAAE,CAAC,MAAM,CAAC;QACzB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QACnC,eAAe,EAAE,CAAC,MAAM,CAAC;KAC1B,CAAC;IAEF;;;;;;;;;;OAUG;IACH,SAAgB,eAAe,CAAC,SAAuB;QACrD,OAAO,SAAS;aACb,MAAM,CACL,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAK,EAAkB,CAAC,EACpG,EAAE,CACH;aACA,IAAI,EAAE,CAAC;IACZ,CAAC;IAPe,uBAAe,kBAO9B,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB;QAC9B,OAAO,eAAe,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAFe,wBAAgB,mBAE/B,CAAA;IAED,MAAM,mBAAmB,GAAyB,MAAM,CAAC,MAAM,CAAC;QAC9D,MAAM;QACN,OAAO;QACP,OAAO;QACP,OAAO;QACP,MAAM;QACN,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;KACR,CAAC,CAAC;IAEH;;;;;;;OAOG;IACH,SAAgB,kBAAkB;QAChC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAFe,0BAAkB,qBAEjC,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,eAAe;QACf,QAAQ;QACR,MAAM;QACN,WAAW;QACX,OAAO;QACP,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IAEH;;;;;;;OAOG;IACH,SAAgB,OAAO;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAFe,eAAO,UAEtB,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,mBAAmB,CAAC,UAAgC;QAClE,OAAO,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAFe,2BAAmB,sBAElC,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB,CAAC,UAAgC;QAC/D,OAAO,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACzE,CAAC;IAFe,wBAAgB,mBAE/B,CAAA;AACH,CAAC,EApJgB,OAAO,uBAAP,OAAO,QAoJvB"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":";;;AAAA,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,oCAAoC;AAC9F,CAAC;AAED,IAAiB,OAAO,CAqJvB;AArJD,WAAiB,OAAO;IAsBtB;;;;;;;OAOG;IACH,SAAgB,WAAW;QACzB,OAAO,IAAa,CAAC;IACvB,CAAC;IAFe,mBAAW,cAE1B,CAAA;IAED,MAAM,QAAQ,GAA4C;QACxD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QACnC,eAAe,EAAE,CAAC,MAAM,CAAC;QACzB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QACnC,eAAe,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;KACxB,CAAC;IAEF;;;;;;;;;;OAUG;IACH,SAAgB,eAAe,CAAC,SAAuB;QACrD,OAAO,SAAS;aACb,MAAM,CACL,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAK,EAAkB,CAAC,EACpG,EAAE,CACH;aACA,IAAI,EAAE,CAAC;IACZ,CAAC;IAPe,uBAAe,kBAO9B,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB;QAC9B,OAAO,eAAe,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAFe,wBAAgB,mBAE/B,CAAA;IAED,MAAM,mBAAmB,GAAyB,MAAM,CAAC,MAAM,CAAC;QAC9D,MAAM;QACN,OAAO;QACP,OAAO;QACP,OAAO;QACP,MAAM;QACN,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,UAAU;QACV,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;KAC7B,CAAC,CAAC;IAEH;;;;;;;OAOG;IACH,SAAgB,kBAAkB;QAChC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAFe,0BAAkB,qBAEjC,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,eAAe;QACf,QAAQ;QACR,MAAM;QACN,WAAW;QACX,OAAO;QACP,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IAEH;;;;;;;OAOG;IACH,SAAgB,OAAO;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAFe,eAAO,UAEtB,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,mBAAmB,CAAC,UAAgC;QAClE,OAAO,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAFe,2BAAmB,sBAElC,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,gBAAgB,CAAC,UAAgC;QAC/D,OAAO,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACzE,CAAC;IAFe,wBAAgB,mBAE/B,CAAA;AACH,CAAC,EArJgB,OAAO,uBAAP,OAAO,QAqJvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@w5s/dev",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "description": "Shared development constants and functions",
5
5
  "keywords": [
6
6
  "config",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "40aa9e728c83ee50a5a381817c59df91458cf6a0"
46
+ "gitHead": "7ab5287bc67b525c4bcfe83456c642c5226d900f"
47
47
  }
package/src/block.ts CHANGED
@@ -18,7 +18,7 @@ export interface BlockOptions {
18
18
  /**
19
19
  * Insert position
20
20
  */
21
- insertPosition?: ['before', 'BeginningOfFile'] | ['after', 'EndOfFile'];
21
+ insertPosition?: ['before', 'BeginningOfFile' | RegExp] | ['after', 'EndOfFile' | RegExp];
22
22
  /**
23
23
  * Block target state
24
24
  */
@@ -27,6 +27,23 @@ export interface BlockOptions {
27
27
 
28
28
  const EOF = 'EndOfFile';
29
29
  const BOF = 'BeginningOfFile';
30
+ const insertAt = (str: string, index: number, toInsert: string) => str.slice(0, index) + toInsert + str.slice(index);
31
+ const matchLast = (string: string, regexp: RegExp) => {
32
+ const matcher = new RegExp(regexp.source, `${regexp.flags}g`);
33
+ let firstIndex = -1;
34
+ let lastIndex = -1;
35
+ let matches;
36
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
37
+ while (true) {
38
+ matches = matcher.exec(string);
39
+ if (matches == null) {
40
+ break;
41
+ }
42
+ firstIndex = matches.index;
43
+ lastIndex = matcher.lastIndex;
44
+ }
45
+ return { firstIndex, lastIndex };
46
+ };
30
47
 
31
48
  function toFileOptions(options: BlockOptions): FileOptions {
32
49
  const {
@@ -68,22 +85,30 @@ function toFileOptions(options: BlockOptions): FileOptions {
68
85
  return fullContent;
69
86
  }
70
87
  switch (positionDirection) {
71
- case 'after': {
72
- // insert
73
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
74
- if (positionAnchor === EOF) {
75
- return fullContent + EOL + replaceBlock;
88
+ case 'before': {
89
+ if (positionAnchor !== BOF) {
90
+ const { firstIndex } = matchLast(fullContent, positionAnchor);
91
+ if (firstIndex >= 0) {
92
+ return insertAt(fullContent, firstIndex, replaceBlock + EOL);
93
+ }
76
94
  }
77
95
 
78
- return fullContent;
96
+ // Beginning of file
97
+ return replaceBlock + EOL + fullContent;
79
98
  }
80
- case 'before': {
81
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
82
- if (positionAnchor === BOF) {
83
- return replaceBlock + EOL + fullContent;
99
+ case 'after': {
100
+ // insert
101
+ if (positionAnchor !== EOF) {
102
+ const { lastIndex } = matchLast(fullContent, positionAnchor);
103
+ if (lastIndex >= 0) {
104
+ return insertAt(fullContent, lastIndex, EOL + replaceBlock);
105
+ }
84
106
  }
85
- return fullContent;
107
+
108
+ // end of file
109
+ return fullContent + EOL + replaceBlock;
86
110
  }
111
+
87
112
  default: {
88
113
  throw new Error(`Unsupported position ${String(positionDirection)}`);
89
114
  }
package/src/project.ts CHANGED
@@ -16,6 +16,7 @@ export namespace Project {
16
16
  javascriptreact: readonly Extension[];
17
17
  typescript: readonly Extension[];
18
18
  typescriptreact: readonly Extension[];
19
+ yaml: readonly Extension[];
19
20
  }
20
21
 
21
22
  /**
@@ -40,6 +41,7 @@ export namespace Project {
40
41
  javascriptreact: ['.jsx'],
41
42
  typescript: ['.ts', '.cts', '.mts'],
42
43
  typescriptreact: ['.tsx'],
44
+ yaml: ['.yaml', '.yml'],
43
45
  };
44
46
 
45
47
  /**
@@ -86,8 +88,7 @@ export namespace Project {
86
88
  '.svg',
87
89
  '.gql',
88
90
  '.graphql',
89
- '.yml',
90
- '.yaml',
91
+ ...queryExtensions(['yaml']),
91
92
  ]);
92
93
 
93
94
  /**