skir-internal 0.0.2 → 0.0.4
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/casing.d.ts +1 -4
- package/dist/casing.d.ts.map +1 -1
- package/dist/casing.js +0 -19
- package/dist/casing.js.map +1 -1
- package/dist/casing.test.js +1 -118
- package/dist/casing.test.js.map +1 -1
- package/dist/encoding.d.ts +2 -0
- package/dist/encoding.d.ts.map +1 -0
- package/dist/encoding.js +38 -0
- package/dist/encoding.js.map +1 -0
- package/dist/encoding.test.d.ts +2 -0
- package/dist/encoding.test.d.ts.map +1 -0
- package/dist/encoding.test.js +23 -0
- package/dist/encoding.test.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/literals.d.ts +2 -0
- package/dist/literals.d.ts.map +1 -0
- package/dist/literals.js +13 -0
- package/dist/literals.js.map +1 -0
- package/dist/literals.test.d.ts +2 -0
- package/dist/literals.test.d.ts.map +1 -0
- package/dist/literals.test.js +9 -0
- package/dist/literals.test.js.map +1 -0
- package/dist/simple_hash.d.ts +3 -0
- package/dist/simple_hash.d.ts.map +1 -0
- package/dist/simple_hash.js +13 -0
- package/dist/simple_hash.js.map +1 -0
- package/dist/simple_hash.test.d.ts +2 -0
- package/dist/simple_hash.test.d.ts.map +1 -0
- package/dist/simple_hash.test.js +11 -0
- package/dist/simple_hash.test.js.map +1 -0
- package/package.json +1 -1
- package/src/casing.ts +1 -29
- package/src/encoding.ts +32 -0
- package/src/index.ts +6 -0
- package/src/literals.ts +12 -0
- package/src/simple_hash.ts +12 -0
package/dist/casing.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type { Casing
|
|
2
|
-
/** Registers an error if the given token does not match the expected casing. */
|
|
3
|
-
export declare function validate(name: Token, expected: "lower_underscore" | "UpperCamel" | "UPPER_UNDERSCORE", errors: ErrorSink): void;
|
|
1
|
+
import type { Casing } from "./types.js";
|
|
4
2
|
export declare function convertCase(text: string, target: Casing): string;
|
|
5
3
|
/** Returns a new string with the first letter of `name` capitalized. */
|
|
6
4
|
export declare function capitalize(name: string): string;
|
|
7
|
-
export declare function caseMatches(name: string, expected: "lower_underscore" | "UpperCamel" | "UPPER_UNDERSCORE"): boolean;
|
|
8
5
|
//# sourceMappingURL=casing.d.ts.map
|
package/dist/casing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBhE;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/dist/casing.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/** Registers an error if the given token does not match the expected casing. */
|
|
2
|
-
export function validate(name, expected, errors) {
|
|
3
|
-
if (!caseMatches(name.text, expected)) {
|
|
4
|
-
errors.push({
|
|
5
|
-
token: name,
|
|
6
|
-
expected: expected,
|
|
7
|
-
});
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
1
|
export function convertCase(text, target) {
|
|
11
2
|
let words;
|
|
12
3
|
if (text.includes("_")) {
|
|
@@ -30,14 +21,4 @@ export function convertCase(text, target) {
|
|
|
30
21
|
export function capitalize(name) {
|
|
31
22
|
return name[0].toUpperCase() + name.slice(1);
|
|
32
23
|
}
|
|
33
|
-
export function caseMatches(name, expected) {
|
|
34
|
-
switch (expected) {
|
|
35
|
-
case "lower_underscore":
|
|
36
|
-
return /^[a-z][0-9a-z]*(_[a-z][0-9a-z]*)*$/.test(name);
|
|
37
|
-
case "UpperCamel":
|
|
38
|
-
return /^[A-Z][0-9A-Za-z]*$/.test(name);
|
|
39
|
-
case "UPPER_UNDERSCORE":
|
|
40
|
-
return /^[A-Z][0-9A-Z]*(_[A-Z][0-9A-Z]*)*$/.test(name);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
24
|
//# sourceMappingURL=casing.js.map
|
package/dist/casing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casing.js","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"casing.js","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,IAAI,KAAwB,CAAC;IAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,kBAAkB;YACrB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/casing.test.js
CHANGED
|
@@ -1,124 +1,7 @@
|
|
|
1
1
|
import { expect } from "buckwheat";
|
|
2
2
|
import { describe, it } from "mocha";
|
|
3
|
-
import { capitalize, convertCase
|
|
4
|
-
function makeToken(text) {
|
|
5
|
-
return {
|
|
6
|
-
text: text,
|
|
7
|
-
originalText: text,
|
|
8
|
-
colNumber: 0,
|
|
9
|
-
line: {
|
|
10
|
-
line: "",
|
|
11
|
-
lineNumber: 0,
|
|
12
|
-
modulePath: "",
|
|
13
|
-
position: 0,
|
|
14
|
-
},
|
|
15
|
-
position: 0,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function doValidate(text, casing) {
|
|
19
|
-
const errors = [];
|
|
20
|
-
validate(makeToken(text), casing, errors);
|
|
21
|
-
return errors;
|
|
22
|
-
}
|
|
3
|
+
import { capitalize, convertCase } from "./casing.js";
|
|
23
4
|
describe("casing", () => {
|
|
24
|
-
describe("validate", () => {
|
|
25
|
-
it("is lower_underscore", () => {
|
|
26
|
-
expect(doValidate("foo", "lower_underscore")).toMatch([]);
|
|
27
|
-
expect(doValidate("foo_bar", "lower_underscore")).toMatch([]);
|
|
28
|
-
expect(doValidate("f00", "lower_underscore")).toMatch([]);
|
|
29
|
-
expect(doValidate("f00_bar", "lower_underscore")).toMatch([]);
|
|
30
|
-
});
|
|
31
|
-
it("is not lower_underscore", () => {
|
|
32
|
-
expect(doValidate("Foo", "lower_underscore")).toMatch([
|
|
33
|
-
{
|
|
34
|
-
token: {
|
|
35
|
-
text: "Foo",
|
|
36
|
-
},
|
|
37
|
-
expected: "lower_underscore",
|
|
38
|
-
},
|
|
39
|
-
]);
|
|
40
|
-
expect(doValidate("foo__bar", "lower_underscore")).toMatch([
|
|
41
|
-
{
|
|
42
|
-
token: {
|
|
43
|
-
text: "foo__bar",
|
|
44
|
-
},
|
|
45
|
-
expected: "lower_underscore",
|
|
46
|
-
},
|
|
47
|
-
]);
|
|
48
|
-
expect(doValidate("foo_", "lower_underscore")).toMatch([
|
|
49
|
-
{
|
|
50
|
-
token: {
|
|
51
|
-
text: "foo_",
|
|
52
|
-
},
|
|
53
|
-
expected: "lower_underscore",
|
|
54
|
-
},
|
|
55
|
-
]);
|
|
56
|
-
expect(doValidate("fOO", "lower_underscore")).toMatch([
|
|
57
|
-
{
|
|
58
|
-
token: {
|
|
59
|
-
text: "fOO",
|
|
60
|
-
},
|
|
61
|
-
expected: "lower_underscore",
|
|
62
|
-
},
|
|
63
|
-
]);
|
|
64
|
-
expect(doValidate("foo_7", "lower_underscore")).toMatch([
|
|
65
|
-
{
|
|
66
|
-
token: {
|
|
67
|
-
text: "foo_7",
|
|
68
|
-
},
|
|
69
|
-
expected: "lower_underscore",
|
|
70
|
-
},
|
|
71
|
-
]);
|
|
72
|
-
});
|
|
73
|
-
it("is UPPER_UNDERSCORE", () => {
|
|
74
|
-
expect(doValidate("FOO", "UPPER_UNDERSCORE")).toMatch([]);
|
|
75
|
-
expect(doValidate("FOO_BAR", "UPPER_UNDERSCORE")).toMatch([]);
|
|
76
|
-
expect(doValidate("F00", "UPPER_UNDERSCORE")).toMatch([]);
|
|
77
|
-
expect(doValidate("F00_BAR", "UPPER_UNDERSCORE")).toMatch([]);
|
|
78
|
-
});
|
|
79
|
-
it("is not UPPER_UNDERSCORE", () => {
|
|
80
|
-
expect(doValidate("fOO", "UPPER_UNDERSCORE")).toMatch([
|
|
81
|
-
{
|
|
82
|
-
token: {
|
|
83
|
-
text: "fOO",
|
|
84
|
-
},
|
|
85
|
-
expected: "UPPER_UNDERSCORE",
|
|
86
|
-
},
|
|
87
|
-
]);
|
|
88
|
-
expect(doValidate("FOO__BAR", "UPPER_UNDERSCORE")).toMatch([
|
|
89
|
-
{
|
|
90
|
-
token: {
|
|
91
|
-
text: "FOO__BAR",
|
|
92
|
-
},
|
|
93
|
-
expected: "UPPER_UNDERSCORE",
|
|
94
|
-
},
|
|
95
|
-
]);
|
|
96
|
-
expect(doValidate("FOO_", "UPPER_UNDERSCORE")).toMatch([
|
|
97
|
-
{
|
|
98
|
-
token: {
|
|
99
|
-
text: "FOO_",
|
|
100
|
-
},
|
|
101
|
-
expected: "UPPER_UNDERSCORE",
|
|
102
|
-
},
|
|
103
|
-
]);
|
|
104
|
-
expect(doValidate("fOO", "UPPER_UNDERSCORE")).toMatch([
|
|
105
|
-
{
|
|
106
|
-
token: {
|
|
107
|
-
text: "fOO",
|
|
108
|
-
},
|
|
109
|
-
expected: "UPPER_UNDERSCORE",
|
|
110
|
-
},
|
|
111
|
-
]);
|
|
112
|
-
expect(doValidate("FOO_7", "UPPER_UNDERSCORE")).toMatch([
|
|
113
|
-
{
|
|
114
|
-
token: {
|
|
115
|
-
text: "FOO_7",
|
|
116
|
-
},
|
|
117
|
-
expected: "UPPER_UNDERSCORE",
|
|
118
|
-
},
|
|
119
|
-
]);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
5
|
it("convert", () => {
|
|
123
6
|
expect(convertCase("FOO_BAR", "UPPER_UNDERSCORE")).toBe("FOO_BAR");
|
|
124
7
|
expect(convertCase("FOO_BAR", "UpperCamel")).toBe("FooBar");
|
package/dist/casing.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casing.test.js","sourceRoot":"","sources":["../src/casing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"casing.test.js","sourceRoot":"","sources":["../src/casing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACjB,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACpB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CA+BjD"}
|
package/dist/encoding.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function encodeInt32(i) {
|
|
2
|
+
const buffer = new ArrayBuffer(5);
|
|
3
|
+
const dataView = new DataView(buffer);
|
|
4
|
+
let n;
|
|
5
|
+
if (i < 0) {
|
|
6
|
+
if (i >= -256) {
|
|
7
|
+
dataView.setUint8(0, 235);
|
|
8
|
+
dataView.setUint8(1, i + 256);
|
|
9
|
+
n = 2;
|
|
10
|
+
}
|
|
11
|
+
else if (i >= -65536) {
|
|
12
|
+
dataView.setUint8(0, 236);
|
|
13
|
+
dataView.setUint16(1, i + 65536, true);
|
|
14
|
+
n = 3;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
dataView.setUint8(0, 237);
|
|
18
|
+
dataView.setInt32(1, i, true);
|
|
19
|
+
n = 5;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else if (i < 232) {
|
|
23
|
+
dataView.setUint8(0, i);
|
|
24
|
+
n = 1;
|
|
25
|
+
}
|
|
26
|
+
else if (i < 65536) {
|
|
27
|
+
dataView.setUint8(0, 232);
|
|
28
|
+
dataView.setUint16(1, i, true);
|
|
29
|
+
n = 3;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
dataView.setUint8(0, 233);
|
|
33
|
+
dataView.setInt32(1, i, true);
|
|
34
|
+
n = 5;
|
|
35
|
+
}
|
|
36
|
+
return new Uint8Array(buffer, 0, n);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=encoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAS,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YAC9B,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1B,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACnB,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;SAAM,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;QACrB,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.test.d.ts","sourceRoot":"","sources":["../src/encoding.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { expect } from "buckwheat";
|
|
2
|
+
import { describe, it } from "mocha";
|
|
3
|
+
import { encodeInt32 } from "./encoding.js";
|
|
4
|
+
function toHexString(a) {
|
|
5
|
+
return [...a].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
6
|
+
}
|
|
7
|
+
describe("encoding", () => {
|
|
8
|
+
it("encodeInt32 works", () => {
|
|
9
|
+
expect(toHexString(encodeInt32(4))).toMatch("04");
|
|
10
|
+
expect(toHexString(encodeInt32(231))).toMatch("e7");
|
|
11
|
+
expect(toHexString(encodeInt32(232))).toMatch("e8e800");
|
|
12
|
+
expect(toHexString(encodeInt32(65535))).toMatch("e8ffff");
|
|
13
|
+
expect(toHexString(encodeInt32(65536))).toMatch("e900000100");
|
|
14
|
+
expect(toHexString(encodeInt32(2147483647))).toMatch("e9ffffff7f");
|
|
15
|
+
expect(toHexString(encodeInt32(-255))).toMatch("eb01");
|
|
16
|
+
expect(toHexString(encodeInt32(-256))).toMatch("eb00");
|
|
17
|
+
expect(toHexString(encodeInt32(-257))).toMatch("ecfffe");
|
|
18
|
+
expect(toHexString(encodeInt32(-65536))).toMatch("ec0000");
|
|
19
|
+
expect(toHexString(encodeInt32(-65537))).toMatch("edfffffeff");
|
|
20
|
+
expect(toHexString(encodeInt32(-2147483648))).toMatch("ed00000080");
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=encoding.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.test.js","sourceRoot":"","sources":["../src/encoding.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,SAAS,WAAW,CAAC,CAAa;IAChC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type * from "./types.js";
|
|
2
|
+
export { capitalize, convertCase } from "./casing.js";
|
|
3
|
+
export { encodeInt32 } from "./encoding.js";
|
|
4
|
+
export { unquoteAndUnescape } from "./literals.js";
|
|
5
|
+
export { simpleHash } from "./simple_hash.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../src/literals.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAWhE"}
|
package/dist/literals.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function unquoteAndUnescape(stringLiteral) {
|
|
2
|
+
const unquoted = stringLiteral.slice(1, -1);
|
|
3
|
+
const parts = unquoted.split("\\\\");
|
|
4
|
+
for (let i = 0; i < parts.length; ++i) {
|
|
5
|
+
const part = parts[i].replace(/\\(\r\n|\n|\r)/g, "\\n")
|
|
6
|
+
// Escape unescaped double quotes which can appear in a single-quoted
|
|
7
|
+
// string literal.
|
|
8
|
+
.replace(/(?<=^|[^\\])"/g, '\\"');
|
|
9
|
+
parts[i] = JSON.parse(`"${part}"`);
|
|
10
|
+
}
|
|
11
|
+
return parts.join("\\");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=literals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literals.js","sourceRoot":"","sources":["../src/literals.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;YACtD,qEAAqE;YACrE,kBAAkB;aACjB,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literals.test.d.ts","sourceRoot":"","sources":["../src/literals.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { expect } from "buckwheat";
|
|
2
|
+
import { describe, it } from "mocha";
|
|
3
|
+
import { unquoteAndUnescape } from "./literals.js";
|
|
4
|
+
describe("literals", () => {
|
|
5
|
+
it("#unquoteAndUnescape() works", () => {
|
|
6
|
+
expect(unquoteAndUnescape('"foo\\\r\n\\\n\\\r\\tbar\\\\t"')).toBe(["foo", "", "", "\tbar\\t"].join("\n"));
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=literals.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literals.test.js","sourceRoot":"","sources":["../src/literals.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,kBAAkB,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAC/D,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_hash.d.ts","sourceRoot":"","sources":["../src/simple_hash.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Returns a uint32 hash of the given string. */
|
|
2
|
+
export function simpleHash(input) {
|
|
3
|
+
// From https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
|
|
4
|
+
let hash = 0;
|
|
5
|
+
for (let i = 0; i < input.length; i++) {
|
|
6
|
+
const char = input.charCodeAt(i);
|
|
7
|
+
hash = (hash << 5) - hash + char;
|
|
8
|
+
hash |= 0;
|
|
9
|
+
}
|
|
10
|
+
// Signed int32 to unsigned int32.
|
|
11
|
+
return hash >>> 0;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=simple_hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_hash.js","sourceRoot":"","sources":["../src/simple_hash.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,kGAAkG;IAClG,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,CAAC;IACZ,CAAC;IACD,kCAAkC;IAClC,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_hash.test.d.ts","sourceRoot":"","sources":["../src/simple_hash.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { expect } from "buckwheat";
|
|
2
|
+
import { describe, it } from "mocha";
|
|
3
|
+
import { simpleHash } from "./simple_hash.js";
|
|
4
|
+
describe("simple hash", () => {
|
|
5
|
+
it("works", () => {
|
|
6
|
+
expect(simpleHash("")).toBe(0);
|
|
7
|
+
expect(simpleHash("hello")).toBe(99162322);
|
|
8
|
+
expect(simpleHash("world")).toBe(113318802);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=simple_hash.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple_hash.test.js","sourceRoot":"","sources":["../src/simple_hash.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACf,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/casing.ts
CHANGED
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
import type { Casing
|
|
2
|
-
|
|
3
|
-
/** Registers an error if the given token does not match the expected casing. */
|
|
4
|
-
export function validate(
|
|
5
|
-
name: Token,
|
|
6
|
-
expected: "lower_underscore" | "UpperCamel" | "UPPER_UNDERSCORE",
|
|
7
|
-
errors: ErrorSink,
|
|
8
|
-
): void {
|
|
9
|
-
if (!caseMatches(name.text, expected)) {
|
|
10
|
-
errors.push({
|
|
11
|
-
token: name,
|
|
12
|
-
expected: expected,
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
import type { Casing } from "./types.js";
|
|
16
2
|
|
|
17
3
|
export function convertCase(text: string, target: Casing): string {
|
|
18
4
|
let words: readonly string[];
|
|
@@ -37,17 +23,3 @@ export function convertCase(text: string, target: Casing): string {
|
|
|
37
23
|
export function capitalize(name: string): string {
|
|
38
24
|
return name[0]!.toUpperCase() + name.slice(1);
|
|
39
25
|
}
|
|
40
|
-
|
|
41
|
-
export function caseMatches(
|
|
42
|
-
name: string,
|
|
43
|
-
expected: "lower_underscore" | "UpperCamel" | "UPPER_UNDERSCORE",
|
|
44
|
-
): boolean {
|
|
45
|
-
switch (expected) {
|
|
46
|
-
case "lower_underscore":
|
|
47
|
-
return /^[a-z][0-9a-z]*(_[a-z][0-9a-z]*)*$/.test(name);
|
|
48
|
-
case "UpperCamel":
|
|
49
|
-
return /^[A-Z][0-9A-Za-z]*$/.test(name);
|
|
50
|
-
case "UPPER_UNDERSCORE":
|
|
51
|
-
return /^[A-Z][0-9A-Z]*(_[A-Z][0-9A-Z]*)*$/.test(name);
|
|
52
|
-
}
|
|
53
|
-
}
|
package/src/encoding.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function encodeInt32(i: number): Uint8Array {
|
|
2
|
+
const buffer = new ArrayBuffer(5);
|
|
3
|
+
const dataView = new DataView(buffer);
|
|
4
|
+
let n: number;
|
|
5
|
+
if (i < 0) {
|
|
6
|
+
if (i >= -256) {
|
|
7
|
+
dataView.setUint8(0, 235);
|
|
8
|
+
dataView.setUint8(1, i + 256);
|
|
9
|
+
n = 2;
|
|
10
|
+
} else if (i >= -65536) {
|
|
11
|
+
dataView.setUint8(0, 236);
|
|
12
|
+
dataView.setUint16(1, i + 65536, true);
|
|
13
|
+
n = 3;
|
|
14
|
+
} else {
|
|
15
|
+
dataView.setUint8(0, 237);
|
|
16
|
+
dataView.setInt32(1, i, true);
|
|
17
|
+
n = 5;
|
|
18
|
+
}
|
|
19
|
+
} else if (i < 232) {
|
|
20
|
+
dataView.setUint8(0, i);
|
|
21
|
+
n = 1;
|
|
22
|
+
} else if (i < 65536) {
|
|
23
|
+
dataView.setUint8(0, 232);
|
|
24
|
+
dataView.setUint16(1, i, true);
|
|
25
|
+
n = 3;
|
|
26
|
+
} else {
|
|
27
|
+
dataView.setUint8(0, 233);
|
|
28
|
+
dataView.setInt32(1, i, true);
|
|
29
|
+
n = 5;
|
|
30
|
+
}
|
|
31
|
+
return new Uint8Array(buffer, 0, n);
|
|
32
|
+
}
|
package/src/index.ts
ADDED
package/src/literals.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function unquoteAndUnescape(stringLiteral: string): string {
|
|
2
|
+
const unquoted = stringLiteral.slice(1, -1);
|
|
3
|
+
const parts = unquoted.split("\\\\");
|
|
4
|
+
for (let i = 0; i < parts.length; ++i) {
|
|
5
|
+
const part = parts[i]!.replace(/\\(\r\n|\n|\r)/g, "\\n")
|
|
6
|
+
// Escape unescaped double quotes which can appear in a single-quoted
|
|
7
|
+
// string literal.
|
|
8
|
+
.replace(/(?<=^|[^\\])"/g, '\\"');
|
|
9
|
+
parts[i] = JSON.parse(`"${part}"`);
|
|
10
|
+
}
|
|
11
|
+
return parts.join("\\");
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Returns a uint32 hash of the given string. */
|
|
2
|
+
export function simpleHash(input: string): number {
|
|
3
|
+
// From https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
|
|
4
|
+
let hash = 0;
|
|
5
|
+
for (let i = 0; i < input.length; i++) {
|
|
6
|
+
const char = input.charCodeAt(i);
|
|
7
|
+
hash = (hash << 5) - hash + char;
|
|
8
|
+
hash |= 0;
|
|
9
|
+
}
|
|
10
|
+
// Signed int32 to unsigned int32.
|
|
11
|
+
return hash >>> 0;
|
|
12
|
+
}
|