@gasboost/fake-core 0.1.0

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.
Files changed (64) hide show
  1. package/dist/blob/InMemoryBlob.d.ts +21 -0
  2. package/dist/blob/InMemoryBlob.js +62 -0
  3. package/dist/blob/InMemoryBlob.js.map +1 -0
  4. package/dist/cache/InMemoryCache.d.ts +13 -0
  5. package/dist/cache/InMemoryCache.js +68 -0
  6. package/dist/cache/InMemoryCache.js.map +1 -0
  7. package/dist/cache/InMemoryCacheService.d.ts +7 -0
  8. package/dist/cache/InMemoryCacheService.js +14 -0
  9. package/dist/cache/InMemoryCacheService.js.map +1 -0
  10. package/dist/cache/index.d.ts +2 -0
  11. package/dist/cache/index.js +3 -0
  12. package/dist/cache/index.js.map +1 -0
  13. package/dist/index.d.ts +5 -0
  14. package/dist/index.js +6 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/properties-service/InMemoryProperties.d.ts +10 -0
  17. package/dist/properties-service/InMemoryProperties.js +38 -0
  18. package/dist/properties-service/InMemoryProperties.js.map +1 -0
  19. package/dist/properties-service/InMemoryPropertiesService.d.ts +5 -0
  20. package/dist/properties-service/InMemoryPropertiesService.js +13 -0
  21. package/dist/properties-service/InMemoryPropertiesService.js.map +1 -0
  22. package/dist/properties-service/index.d.ts +2 -0
  23. package/dist/properties-service/index.js +3 -0
  24. package/dist/properties-service/index.js.map +1 -0
  25. package/dist/session/InMemoryContext.d.ts +30 -0
  26. package/dist/session/InMemoryContext.js +62 -0
  27. package/dist/session/InMemoryContext.js.map +1 -0
  28. package/dist/session/InMemorySession.d.ts +19 -0
  29. package/dist/session/InMemorySession.js +58 -0
  30. package/dist/session/InMemorySession.js.map +1 -0
  31. package/dist/session/InMemoryUser.d.ts +7 -0
  32. package/dist/session/InMemoryUser.js +20 -0
  33. package/dist/session/InMemoryUser.js.map +1 -0
  34. package/dist/session/SecurityPolicy.d.ts +8 -0
  35. package/dist/session/SecurityPolicy.js +14 -0
  36. package/dist/session/SecurityPolicy.js.map +1 -0
  37. package/dist/session/index.d.ts +3 -0
  38. package/dist/session/index.js +4 -0
  39. package/dist/session/index.js.map +1 -0
  40. package/dist/utilities/AppsScriptByte.d.ts +5 -0
  41. package/dist/utilities/AppsScriptByte.js +10 -0
  42. package/dist/utilities/AppsScriptByte.js.map +1 -0
  43. package/dist/utilities/BinaryData.d.ts +6 -0
  44. package/dist/utilities/BinaryData.js +21 -0
  45. package/dist/utilities/BinaryData.js.map +1 -0
  46. package/dist/utilities/DateFormatPattern.d.ts +7 -0
  47. package/dist/utilities/DateFormatPattern.js +78 -0
  48. package/dist/utilities/DateFormatPattern.js.map +1 -0
  49. package/dist/utilities/DatePatternToken.d.ts +17 -0
  50. package/dist/utilities/DatePatternToken.js +64 -0
  51. package/dist/utilities/DatePatternToken.js.map +1 -0
  52. package/dist/utilities/MD2.d.ts +5 -0
  53. package/dist/utilities/MD2.js +61 -0
  54. package/dist/utilities/MD2.js.map +1 -0
  55. package/dist/utilities/PartedDate.d.ts +11 -0
  56. package/dist/utilities/PartedDate.js +37 -0
  57. package/dist/utilities/PartedDate.js.map +1 -0
  58. package/dist/utilities/StringCode.d.ts +5 -0
  59. package/dist/utilities/StringCode.js +25 -0
  60. package/dist/utilities/StringCode.js.map +1 -0
  61. package/dist/utilities/index.d.ts +6 -0
  62. package/dist/utilities/index.js +7 -0
  63. package/dist/utilities/index.js.map +1 -0
  64. package/package.json +34 -0
@@ -0,0 +1,21 @@
1
+ export declare class InMemoryBlob implements GoogleAppsScript.Base.Blob {
2
+ private bytes;
3
+ private contentType;
4
+ private name;
5
+ constructor(data: string | ArrayLike<number>, contentType?: string | null, name?: string | null, charset?: string);
6
+ copyBlob(): GoogleAppsScript.Base.Blob;
7
+ getBlob(): GoogleAppsScript.Base.Blob;
8
+ getAs(contentType: string): GoogleAppsScript.Base.Blob;
9
+ getBytes(): number[];
10
+ getContentType(): string | null;
11
+ getDataAsString(charset?: string): string;
12
+ getName(): string | null;
13
+ isGoogleType(): boolean;
14
+ setBytes(data: number[]): GoogleAppsScript.Base.Blob;
15
+ setContentType(contentType: string | null): GoogleAppsScript.Base.Blob;
16
+ setContentTypeFromExtension(): GoogleAppsScript.Base.Blob;
17
+ setDataFromString(value: string, charset?: string): GoogleAppsScript.Base.Blob;
18
+ setName(name: string): GoogleAppsScript.Base.Blob;
19
+ /** @deprecated DO NOT USE */
20
+ getAllBlobs(): GoogleAppsScript.Base.Blob[];
21
+ }
@@ -0,0 +1,62 @@
1
+ import { AppsScriptByte } from "../utilities/AppsScriptByte";
2
+ import { BinaryData } from "../utilities/BinaryData";
3
+ export class InMemoryBlob {
4
+ bytes;
5
+ contentType;
6
+ name;
7
+ constructor(data, contentType = null, name = null, charset) {
8
+ const binaryData = new BinaryData(data, charset ?? "UTF_8");
9
+ this.bytes = Uint8Array.from(binaryData.bytes);
10
+ this.contentType = contentType;
11
+ this.name = name;
12
+ }
13
+ copyBlob() {
14
+ return new InMemoryBlob(this.bytes, this.contentType, this.name);
15
+ }
16
+ getBlob() {
17
+ return this.copyBlob();
18
+ }
19
+ getAs(contentType) {
20
+ return new InMemoryBlob(this.bytes, contentType, this.name);
21
+ }
22
+ getBytes() {
23
+ const appsScriptByte = new AppsScriptByte(this.bytes);
24
+ return appsScriptByte.sign();
25
+ }
26
+ getContentType() {
27
+ return this.contentType;
28
+ }
29
+ getDataAsString(charset) {
30
+ return new BinaryData(this.bytes, charset ?? "UTF_8").decode();
31
+ }
32
+ getName() {
33
+ return this.name;
34
+ }
35
+ isGoogleType() {
36
+ return false;
37
+ }
38
+ setBytes(data) {
39
+ this.bytes = Uint8Array.from(data);
40
+ return this;
41
+ }
42
+ setContentType(contentType) {
43
+ this.contentType = contentType;
44
+ return this;
45
+ }
46
+ setContentTypeFromExtension() {
47
+ return this;
48
+ }
49
+ setDataFromString(value, charset) {
50
+ this.bytes = new BinaryData(value, charset ?? "UTF_8").bytes;
51
+ return this;
52
+ }
53
+ setName(name) {
54
+ this.name = name;
55
+ return this;
56
+ }
57
+ /** @deprecated DO NOT USE */
58
+ getAllBlobs() {
59
+ return [this.copyBlob()];
60
+ }
61
+ }
62
+ //# sourceMappingURL=InMemoryBlob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryBlob.js","sourceRoot":"","sources":["../../src/blob/InMemoryBlob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,OAAO,YAAY;IACf,KAAK,CAAa;IAClB,WAAW,CAAgB;IAC3B,IAAI,CAAgB;IAE5B,YACE,IAAgC,EAChC,cAA6B,IAAI,EACjC,OAAsB,IAAI,EAC1B,OAAgB;QAEhB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,WAAmB;QACvB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ;QACN,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,IAAc;QACrB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,WAA0B;QACvC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAA2B;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CACf,KAAa,EACb,OAAgB;QAEhB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,WAAW;QACT,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ export declare class InMemoryCache implements GoogleAppsScript.Cache.Cache {
2
+ private date;
3
+ private storage;
4
+ constructor(date?: {
5
+ now: () => number;
6
+ });
7
+ put(key: string, value: string, expirationInSeconds?: number): void;
8
+ putAll(values: Record<string, string>, expirationInSeconds?: number): void;
9
+ get(key: string): string | null;
10
+ getAll(keys: string[]): Record<string, string>;
11
+ remove(key: string): void;
12
+ removeAll(keys: string[]): void;
13
+ }
@@ -0,0 +1,68 @@
1
+ export class InMemoryCache {
2
+ date;
3
+ storage = new Map();
4
+ constructor(date = Date) {
5
+ this.date = date;
6
+ }
7
+ put(key, value, expirationInSeconds = 600) {
8
+ if (key.length > 250) {
9
+ throw new Error("Argument too large: key");
10
+ }
11
+ const valueSize = new TextEncoder().encode(value).length;
12
+ if (valueSize > 100 * 1024) {
13
+ throw new Error("Argument too large: value");
14
+ }
15
+ if (expirationInSeconds < 1 || expirationInSeconds > 21600) {
16
+ throw new Error("Argument out of range: expirationInSeconds");
17
+ }
18
+ const expirationTime = this.date.now() + expirationInSeconds * 1000;
19
+ // キャッシュのアイテム数が1000を超える場合、新しいアイテムを追加する前に、期限が近い100個が削除され、900個だけ残る
20
+ if (this.storage.size >= 1000) {
21
+ const entries = Array.from(this.storage.entries());
22
+ entries.sort((a, b) => a[1].expirationTime - b[1].expirationTime);
23
+ const nearlyExpirationTimeKeys = entries
24
+ .slice(0, 101)
25
+ .map(([key]) => key);
26
+ for (const expiringKey of nearlyExpirationTimeKeys) {
27
+ this.storage.delete(expiringKey);
28
+ }
29
+ }
30
+ this.storage.set(key, { value, expirationTime });
31
+ }
32
+ putAll(values, expirationInSeconds = 600) {
33
+ for (const [key, value] of Object.entries(values)) {
34
+ this.put(key, value, expirationInSeconds);
35
+ }
36
+ }
37
+ get(key) {
38
+ const cacheValue = this.storage.get(key);
39
+ if (!cacheValue) {
40
+ return null;
41
+ }
42
+ const now = this.date.now();
43
+ if (cacheValue.expirationTime < now) {
44
+ this.storage.delete(key);
45
+ return null;
46
+ }
47
+ return cacheValue.value;
48
+ }
49
+ getAll(keys) {
50
+ const values = {};
51
+ for (const key of keys) {
52
+ const value = this.get(key);
53
+ if (value !== null) {
54
+ values[key] = value;
55
+ }
56
+ }
57
+ return values;
58
+ }
59
+ remove(key) {
60
+ this.storage.delete(key);
61
+ }
62
+ removeAll(keys) {
63
+ for (const key of keys) {
64
+ this.remove(key);
65
+ }
66
+ }
67
+ }
68
+ //# sourceMappingURL=InMemoryCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryCache.js","sourceRoot":"","sources":["../../src/cache/InMemoryCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { InMemoryCache } from "./InMemoryCache";
2
+ export declare class InMemoryCacheService implements GoogleAppsScript.Cache.CacheService {
3
+ constructor();
4
+ getDocumentCache(): InMemoryCache | null;
5
+ getUserCache(): InMemoryCache;
6
+ getScriptCache(): InMemoryCache;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { InMemoryCache } from "./InMemoryCache";
2
+ export class InMemoryCacheService {
3
+ constructor() { }
4
+ getDocumentCache() {
5
+ return new InMemoryCache();
6
+ }
7
+ getUserCache() {
8
+ return new InMemoryCache();
9
+ }
10
+ getScriptCache() {
11
+ return new InMemoryCache();
12
+ }
13
+ }
14
+ //# sourceMappingURL=InMemoryCacheService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryCacheService.js","sourceRoot":"","sources":["../../src/cache/InMemoryCacheService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,OAAO,oBAAoB;IAG/B,gBAAe,CAAC;IAChB,gBAAgB;QACd,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IACD,YAAY;QACV,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IACD,cAAc;QACZ,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { InMemoryCache } from "./InMemoryCache";
2
+ export { InMemoryCacheService } from "./InMemoryCacheService";
@@ -0,0 +1,3 @@
1
+ export { InMemoryCache } from "./InMemoryCache";
2
+ export { InMemoryCacheService } from "./InMemoryCacheService";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./blob/InMemoryBlob";
2
+ export * from "./cache";
3
+ export * from "./properties-service";
4
+ export * from "./session";
5
+ export * from "./utilities";
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./blob/InMemoryBlob";
2
+ export * from "./cache";
3
+ export * from "./properties-service";
4
+ export * from "./session";
5
+ export * from "./utilities";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare class InMemoryProperties implements GoogleAppsScript.Properties.Properties {
2
+ private storage;
3
+ deleteAllProperties(): GoogleAppsScript.Properties.Properties;
4
+ deleteProperty(key: string): GoogleAppsScript.Properties.Properties;
5
+ getKeys(): string[];
6
+ getProperties(): Record<string, string>;
7
+ getProperty(key: string): string | null;
8
+ setProperties(properties: Record<string, string>, deleteAll?: boolean): GoogleAppsScript.Properties.Properties;
9
+ setProperty(key: string, value: string): GoogleAppsScript.Properties.Properties;
10
+ }
@@ -0,0 +1,38 @@
1
+ export class InMemoryProperties {
2
+ storage = new Map();
3
+ deleteAllProperties() {
4
+ this.storage.clear();
5
+ return this;
6
+ }
7
+ deleteProperty(key) {
8
+ this.storage.delete(key);
9
+ return this;
10
+ }
11
+ getKeys() {
12
+ return Array.from(this.storage.keys());
13
+ }
14
+ getProperties() {
15
+ const result = {};
16
+ this.storage.forEach((value, key) => {
17
+ result[key] = value;
18
+ });
19
+ return result;
20
+ }
21
+ getProperty(key) {
22
+ return this.storage.get(key) ?? null;
23
+ }
24
+ setProperties(properties, deleteAll) {
25
+ if (deleteAll) {
26
+ this.deleteAllProperties();
27
+ }
28
+ Object.entries(properties).forEach(([key, value]) => {
29
+ this.storage.set(key, value);
30
+ });
31
+ return this;
32
+ }
33
+ setProperty(key, value) {
34
+ this.storage.set(key, value);
35
+ return this;
36
+ }
37
+ }
38
+ //# sourceMappingURL=InMemoryProperties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryProperties.js","sourceRoot":"","sources":["../../src/properties-service/InMemoryProperties.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IAGrB,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEjD,mBAAmB;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,aAAa;QACX,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,aAAa,CACX,UAAkC,EAClC,SAAmB;QAEnB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CACT,GAAW,EACX,KAAa;QAEb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare class InMemoryPropertiesService implements GoogleAppsScript.Properties.PropertiesService {
2
+ getDocumentProperties(): GoogleAppsScript.Properties.Properties;
3
+ getUserProperties(): GoogleAppsScript.Properties.Properties;
4
+ getScriptProperties(): GoogleAppsScript.Properties.Properties;
5
+ }
@@ -0,0 +1,13 @@
1
+ import { InMemoryProperties } from "./InMemoryProperties";
2
+ export class InMemoryPropertiesService {
3
+ getDocumentProperties() {
4
+ return new InMemoryProperties();
5
+ }
6
+ getUserProperties() {
7
+ return new InMemoryProperties();
8
+ }
9
+ getScriptProperties() {
10
+ return new InMemoryProperties();
11
+ }
12
+ }
13
+ //# sourceMappingURL=InMemoryPropertiesService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryPropertiesService.js","sourceRoot":"","sources":["../../src/properties-service/InMemoryPropertiesService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,yBAAyB;IAGpC,qBAAqB;QACnB,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from "./InMemoryProperties";
2
+ export * from "./InMemoryPropertiesService";
@@ -0,0 +1,3 @@
1
+ export * from "./InMemoryProperties";
2
+ export * from "./InMemoryPropertiesService";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/properties-service/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { InMemoryUser } from "./InMemoryUser";
2
+ import { SecurityPolicy } from "./SecurityPolicy";
3
+ type Execution = {
4
+ type: "WEB_APP";
5
+ executeAs: "OWNER" | "USER";
6
+ } | {
7
+ type: "TRIGGER";
8
+ triggerType: "SIMPLE" | "INSTALLABLE";
9
+ triggerOwner: string;
10
+ } | {
11
+ type: "CUSTOM_FUNCTION";
12
+ };
13
+ export declare class InMemoryContext {
14
+ readonly execution: Execution;
15
+ readonly securityPolicy: SecurityPolicy;
16
+ readonly locale: string;
17
+ readonly timezone: string;
18
+ readonly owner: InMemoryUser;
19
+ readonly activeUser: InMemoryUser;
20
+ readonly triggerdBy: InMemoryUser | undefined;
21
+ constructor(ownerEmail: string, activeUserEmail: string, execution: Execution, securityPolicy: SecurityPolicy, locale: string, timezone: string);
22
+ canAccessUserEmail(): boolean;
23
+ isRestricted(): boolean;
24
+ isExecutingAsOwner(): boolean;
25
+ isSameDomain(): boolean;
26
+ isWebAppExecutingAsOwner(): boolean;
27
+ isInstallableTrigger(): boolean;
28
+ getTriggerSetupUserEmail(): string;
29
+ }
30
+ export {};
@@ -0,0 +1,62 @@
1
+ import { InMemoryUser } from "./InMemoryUser";
2
+ import { OAuthScope } from "./SecurityPolicy";
3
+ export class InMemoryContext {
4
+ execution;
5
+ securityPolicy;
6
+ locale;
7
+ timezone;
8
+ owner;
9
+ activeUser;
10
+ triggerdBy;
11
+ constructor(ownerEmail, activeUserEmail, execution, securityPolicy, locale, timezone) {
12
+ this.execution = execution;
13
+ this.securityPolicy = securityPolicy;
14
+ this.locale = locale;
15
+ this.timezone = timezone;
16
+ this.owner = new InMemoryUser(ownerEmail);
17
+ this.activeUser = new InMemoryUser(activeUserEmail);
18
+ this.triggerdBy =
19
+ execution.type === "TRIGGER"
20
+ ? new InMemoryUser(execution.triggerOwner)
21
+ : undefined;
22
+ }
23
+ canAccessUserEmail() {
24
+ // OAuth未承認
25
+ if (!this.securityPolicy.hasPermission(OAuthScope.USERINFO_EMAIL)) {
26
+ return false;
27
+ }
28
+ return true;
29
+ }
30
+ isRestricted() {
31
+ if (this.execution.type === "TRIGGER") {
32
+ return this.execution.triggerType === "SIMPLE";
33
+ }
34
+ if (this.execution.type === "CUSTOM_FUNCTION") {
35
+ return true;
36
+ }
37
+ if (this.execution.type === "WEB_APP") {
38
+ return this.execution.executeAs === "OWNER";
39
+ }
40
+ return false;
41
+ }
42
+ isExecutingAsOwner() {
43
+ return this.activeUser.getEmail() === this.owner.getEmail();
44
+ }
45
+ isSameDomain() {
46
+ return this.owner.getDomain() === this.activeUser.getDomain();
47
+ }
48
+ isWebAppExecutingAsOwner() {
49
+ return (this.execution.type === "WEB_APP" && this.execution.executeAs === "OWNER");
50
+ }
51
+ isInstallableTrigger() {
52
+ return (this.execution.type === "TRIGGER" &&
53
+ this.execution.triggerType === "INSTALLABLE");
54
+ }
55
+ getTriggerSetupUserEmail() {
56
+ if (this.execution.type === "TRIGGER") {
57
+ return this.execution.triggerOwner;
58
+ }
59
+ return "";
60
+ }
61
+ }
62
+ //# sourceMappingURL=InMemoryContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryContext.js","sourceRoot":"","sources":["../../src/session/InMemoryContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAgB9D,MAAM,OAAO,eAAe;IAQR;IACA;IACA;IACA;IAVF,KAAK,CAAe;IACpB,UAAU,CAAe;IACzB,UAAU,CAA2B;IAErD,YACE,UAAkB,EAClB,eAAuB,EACP,SAAoB,EACpB,cAA8B,EAC9B,MAAc,EACd,QAAgB;QAHhB,cAAS,GAAT,SAAS,CAAW;QACpB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;QAEhC,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU;YACb,SAAS,CAAC,IAAI,KAAK,SAAS;gBAC1B,CAAC,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;gBAC1C,CAAC,CAAC,SAAS,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,QAAQ,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IAChE,CAAC;IAED,wBAAwB;QACtB,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAC1E,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,OAAO,CACL,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS;YACjC,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,aAAa,CAC7C,CAAC;IACJ,CAAC;IAED,wBAAwB;QACtB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { InMemoryContext } from "./InMemoryContext";
2
+ import { InMemoryUser } from "./InMemoryUser";
3
+ export declare enum Context {
4
+ SIMPLE_TRIGGER = "SIMPLE_TRIGGER",
5
+ CUSTOM_FUNCTION = "CUSTOM_FUNCTION",
6
+ WEB_APP_SELF = "WEB_APP_SELF",
7
+ OTHER = "OTHER"
8
+ }
9
+ export declare class InMemorySession implements GoogleAppsScript.Base.Session {
10
+ private readonly context;
11
+ constructor(context: InMemoryContext);
12
+ getActiveUser(): InMemoryUser;
13
+ getActiveUserLocale(): string;
14
+ getEffectiveUser(): GoogleAppsScript.Base.User;
15
+ getScriptTimeZone(): string;
16
+ getTemporaryActiveUserKey(): string;
17
+ getTimeZone(): string;
18
+ getUser(): GoogleAppsScript.Base.User;
19
+ }
@@ -0,0 +1,58 @@
1
+ import { InMemoryUser } from "./InMemoryUser";
2
+ export var Context;
3
+ (function (Context) {
4
+ Context["SIMPLE_TRIGGER"] = "SIMPLE_TRIGGER";
5
+ Context["CUSTOM_FUNCTION"] = "CUSTOM_FUNCTION";
6
+ Context["WEB_APP_SELF"] = "WEB_APP_SELF";
7
+ Context["OTHER"] = "OTHER";
8
+ })(Context || (Context = {}));
9
+ export class InMemorySession {
10
+ context;
11
+ constructor(context) {
12
+ this.context = context;
13
+ }
14
+ getActiveUser() {
15
+ // OAuth未承認
16
+ if (!this.context.canAccessUserEmail()) {
17
+ return new InMemoryUser("");
18
+ }
19
+ // 制限があるコンテキストか判定
20
+ const isRestrictedContext = this.context.isRestricted();
21
+ // 実行者がオーナーか判定
22
+ const isOwnerExecuting = this.context.isExecutingAsOwner();
23
+ // ドメインが同じか判定
24
+ const isSameDomain = this.context.isSameDomain();
25
+ // 制限があるコンテキストで、実行者がオーナーでない、かつドメインが同じでない場合は空文字を返す
26
+ if (isRestrictedContext && !isOwnerExecuting && !isSameDomain) {
27
+ return new InMemoryUser("");
28
+ }
29
+ return this.context.activeUser;
30
+ }
31
+ getActiveUserLocale() {
32
+ return this.context.locale;
33
+ }
34
+ getEffectiveUser() {
35
+ const isWebAppExecuteAsOwner = this.context.isWebAppExecutingAsOwner();
36
+ if (isWebAppExecuteAsOwner) {
37
+ return this.context.owner;
38
+ }
39
+ const isInstallableTrigger = this.context.isInstallableTrigger();
40
+ if (isInstallableTrigger) {
41
+ return this.context.triggerdBy;
42
+ }
43
+ return this.getActiveUser();
44
+ }
45
+ getScriptTimeZone() {
46
+ return this.context.timezone;
47
+ }
48
+ getTemporaryActiveUserKey() {
49
+ return "";
50
+ }
51
+ getTimeZone() {
52
+ return this.context.timezone;
53
+ }
54
+ getUser() {
55
+ return new InMemoryUser("");
56
+ }
57
+ }
58
+ //# sourceMappingURL=InMemorySession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemorySession.js","sourceRoot":"","sources":["../../src/session/InMemorySession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAN,IAAY,OAKX;AALD,WAAY,OAAO;IACjB,4CAAiC,CAAA;IACjC,8CAAmC,CAAA;IACnC,wCAA6B,CAAA;IAC7B,0BAAe,CAAA;AACjB,CAAC,EALW,OAAO,KAAP,OAAO,QAKlB;AAED,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;IAAG,CAAC;IAEzD,aAAa;QACX,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACvC,OAAO,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,iBAAiB;QACjB,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAExD,cAAc;QACd,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAE3D,aAAa;QACb,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAEjD,iDAAiD;QACjD,IAAI,mBAAmB,IAAI,CAAC,gBAAgB,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9D,OAAO,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,gBAAgB;QACd,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACvE,IAAI,sBAAsB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACjE,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAW,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,yBAAyB;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export declare class InMemoryUser implements GoogleAppsScript.Base.User {
2
+ private readonly email;
3
+ constructor(email: string);
4
+ getEmail(): string;
5
+ getDomain(): string;
6
+ getUserLoginId(): string;
7
+ }
@@ -0,0 +1,20 @@
1
+ export class InMemoryUser {
2
+ email;
3
+ constructor(email) {
4
+ this.email = email;
5
+ const regex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
6
+ if (!regex.test(email) && email !== "") {
7
+ throw new Error(`Invalid email: ${email}`);
8
+ }
9
+ }
10
+ getEmail() {
11
+ return this.email;
12
+ }
13
+ getDomain() {
14
+ return this.email.split("@")[1] || "";
15
+ }
16
+ getUserLoginId() {
17
+ return this.email.split("@")[0] || "";
18
+ }
19
+ }
20
+ //# sourceMappingURL=InMemoryUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryUser.js","sourceRoot":"","sources":["../../src/session/InMemoryUser.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QACxC,MAAM,KAAK,GACT,sIAAsI,CAAC;QACzI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export declare enum OAuthScope {
2
+ USERINFO_EMAIL = "https://www.googleapis.com/auth/userinfo.email"
3
+ }
4
+ export declare class SecurityPolicy {
5
+ readonly oauthScopes: OAuthScope[];
6
+ constructor(oauthScopes: OAuthScope[]);
7
+ hasPermission(scope: OAuthScope): boolean;
8
+ }
@@ -0,0 +1,14 @@
1
+ export var OAuthScope;
2
+ (function (OAuthScope) {
3
+ OAuthScope["USERINFO_EMAIL"] = "https://www.googleapis.com/auth/userinfo.email";
4
+ })(OAuthScope || (OAuthScope = {}));
5
+ export class SecurityPolicy {
6
+ oauthScopes;
7
+ constructor(oauthScopes) {
8
+ this.oauthScopes = oauthScopes;
9
+ }
10
+ hasPermission(scope) {
11
+ return this.oauthScopes.includes(scope);
12
+ }
13
+ }
14
+ //# sourceMappingURL=SecurityPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityPolicy.js","sourceRoot":"","sources":["../../src/session/SecurityPolicy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,+EAAiE,CAAA;AACnE,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAED,MAAM,OAAO,cAAc;IACG;IAA5B,YAA4B,WAAyB;QAAzB,gBAAW,GAAX,WAAW,CAAc;IAAG,CAAC;IAEzD,aAAa,CAAC,KAAiB;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export * from "./InMemoryContext";
2
+ export * from "./InMemorySession";
3
+ export * from "./SecurityPolicy";
@@ -0,0 +1,4 @@
1
+ export * from "./InMemoryContext";
2
+ export * from "./InMemorySession";
3
+ export * from "./SecurityPolicy";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare class AppsScriptByte {
2
+ readonly bytes: Uint8Array;
3
+ constructor(bytes: Uint8Array);
4
+ sign(): number[];
5
+ }
@@ -0,0 +1,10 @@
1
+ export class AppsScriptByte {
2
+ bytes;
3
+ constructor(bytes) {
4
+ this.bytes = bytes;
5
+ }
6
+ sign() {
7
+ return [...this.bytes].map((byte) => (byte > 127 ? byte - 256 : byte));
8
+ }
9
+ }
10
+ //# sourceMappingURL=AppsScriptByte.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppsScriptByte.js","sourceRoot":"","sources":["../../src/utilities/AppsScriptByte.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IACG;IAA5B,YAA4B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IACjD,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export declare class BinaryData {
2
+ readonly bytes: Uint8Array;
3
+ constructor(value: string | ArrayLike<number>, charset?: string);
4
+ signedBytes(): number[];
5
+ decode(): string;
6
+ }
@@ -0,0 +1,21 @@
1
+ import { AppsScriptByte } from "./AppsScriptByte";
2
+ import { StringCode } from "./StringCode";
3
+ export class BinaryData {
4
+ bytes;
5
+ constructor(value, charset) {
6
+ if (typeof value === "string") {
7
+ const stringCode = new StringCode(charset?.toString());
8
+ const normalized = stringCode.normalized(value);
9
+ this.bytes = new TextEncoder().encode(normalized);
10
+ return;
11
+ }
12
+ this.bytes = Uint8Array.from(value);
13
+ }
14
+ signedBytes() {
15
+ return new AppsScriptByte(this.bytes).sign();
16
+ }
17
+ decode() {
18
+ return new TextDecoder().decode(this.bytes);
19
+ }
20
+ }
21
+ //# sourceMappingURL=BinaryData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BinaryData.js","sourceRoot":"","sources":["../../src/utilities/BinaryData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,OAAO,UAAU;IACL,KAAK,CAAa;IAClC,YAAY,KAAiC,EAAE,OAAgB;QAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,WAAW;QACT,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,MAAM;QACJ,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { DateObject, DatePatternToken } from "./DatePatternToken";
2
+ export declare class DateFormatPattern {
3
+ readonly source: string;
4
+ readonly tokens: DatePatternToken[];
5
+ constructor(source: string, treatAnyLetterAsToken?: boolean);
6
+ parse(value: string, dateObject: DateObject): Date;
7
+ }
@@ -0,0 +1,78 @@
1
+ import { DatePatternToken } from "./DatePatternToken";
2
+ // フォーマットパターン
3
+ export class DateFormatPattern {
4
+ source;
5
+ tokens;
6
+ constructor(source, treatAnyLetterAsToken = false) {
7
+ this.source = source;
8
+ const tokens = [];
9
+ let index = 0;
10
+ while (index < source.length) {
11
+ const character = source[index];
12
+ // クォート文字列
13
+ if (character === "'") {
14
+ let literal = "";
15
+ index += 1;
16
+ while (index < source.length) {
17
+ if (source[index] === "'") {
18
+ if (source[index + 1] === "'") {
19
+ literal += "'";
20
+ index += 2;
21
+ continue;
22
+ }
23
+ index += 1;
24
+ break;
25
+ }
26
+ literal += source[index];
27
+ index += 1;
28
+ }
29
+ tokens.push(new DatePatternToken("literal", literal));
30
+ continue;
31
+ }
32
+ // トークン
33
+ const isToken = treatAnyLetterAsToken
34
+ ? /[A-Za-z]/.test(character)
35
+ : /[yMdHmsS]/.test(character);
36
+ if (isToken) {
37
+ let count = 1;
38
+ while (index + count < source.length &&
39
+ source[index + count] === character) {
40
+ count += 1;
41
+ }
42
+ tokens.push(new DatePatternToken("token", character, count));
43
+ index += count;
44
+ continue;
45
+ }
46
+ // 通常文字
47
+ tokens.push(new DatePatternToken("literal", character));
48
+ index += 1;
49
+ }
50
+ this.tokens = tokens;
51
+ }
52
+ parse(value, dateObject) {
53
+ let cursor = 0;
54
+ for (let index = 0; index < this.tokens.length; index += 1) {
55
+ const token = this.tokens[index];
56
+ if (token.type === "literal") {
57
+ cursor += token.value.length;
58
+ continue;
59
+ }
60
+ const nextLiteral = this.tokens
61
+ .slice(index + 1)
62
+ .find((token) => token.type === "literal");
63
+ let raw;
64
+ if (nextLiteral) {
65
+ const nextIndex = value.indexOf(nextLiteral.value, cursor);
66
+ raw = value.slice(cursor, nextIndex);
67
+ cursor = nextIndex;
68
+ }
69
+ else {
70
+ raw = value.slice(cursor);
71
+ cursor = value.length;
72
+ }
73
+ token.parse(raw, dateObject);
74
+ }
75
+ return new Date(Number(dateObject.year), Number(dateObject.month) - 1, Number(dateObject.day), Number(dateObject.hour), Number(dateObject.minute), Number(dateObject.second), Number(dateObject.millisecond));
76
+ }
77
+ }
78
+ //# sourceMappingURL=DateFormatPattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateFormatPattern.js","sourceRoot":"","sources":["../../src/utilities/DateFormatPattern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface DateObject {
2
+ year: string;
3
+ month: string;
4
+ day: string;
5
+ hour: string;
6
+ minute: string;
7
+ second: string;
8
+ millisecond: string;
9
+ }
10
+ export declare class DatePatternToken {
11
+ readonly type: "token" | "literal";
12
+ readonly value: string;
13
+ readonly count?: number | undefined;
14
+ constructor(type: "token" | "literal", value: string, count?: number | undefined);
15
+ replace(dateObject: DateObject): string;
16
+ parse(value: string, dateObject: DateObject): void;
17
+ }
@@ -0,0 +1,64 @@
1
+ // フォーマットパターンの最小単位
2
+ export class DatePatternToken {
3
+ type;
4
+ value;
5
+ count;
6
+ constructor(type, value, count) {
7
+ this.type = type;
8
+ this.value = value;
9
+ this.count = count;
10
+ }
11
+ replace(dateObject) {
12
+ if (this.type === "literal") {
13
+ return this.value;
14
+ }
15
+ switch (this.value) {
16
+ case "y":
17
+ return this.count === 2 ? dateObject.year.slice(-2) : dateObject.year;
18
+ case "M":
19
+ return dateObject.month.padStart(this.count ?? 2, "0");
20
+ case "d":
21
+ return dateObject.day.padStart(this.count ?? 2, "0");
22
+ case "H":
23
+ return dateObject.hour.padStart(this.count ?? 2, "0");
24
+ case "m":
25
+ return dateObject.minute.padStart(this.count ?? 2, "0");
26
+ case "s":
27
+ return dateObject.second.padStart(this.count ?? 2, "0");
28
+ case "S":
29
+ return dateObject.millisecond.padStart(this.count ?? 3, "0");
30
+ default:
31
+ return this.value;
32
+ }
33
+ }
34
+ parse(value, dateObject) {
35
+ if (this.type === "literal") {
36
+ return;
37
+ }
38
+ const length = this.count ?? 1;
39
+ switch (this.value) {
40
+ case "y":
41
+ dateObject.year = value.slice(0, length);
42
+ break;
43
+ case "M":
44
+ dateObject.month = value.slice(0, length);
45
+ break;
46
+ case "d":
47
+ dateObject.day = value.slice(0, length);
48
+ break;
49
+ case "H":
50
+ dateObject.hour = value.slice(0, length);
51
+ break;
52
+ case "m":
53
+ dateObject.minute = value.slice(0, length);
54
+ break;
55
+ case "s":
56
+ dateObject.second = value.slice(0, length);
57
+ break;
58
+ case "S":
59
+ dateObject.millisecond = value.slice(0, length);
60
+ break;
61
+ }
62
+ }
63
+ }
64
+ //# sourceMappingURL=DatePatternToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePatternToken.js","sourceRoot":"","sources":["../../src/utilities/DatePatternToken.ts"],"names":[],"mappings":"AAUA,kBAAkB;AAClB,MAAM,OAAO,gBAAgB;IAET;IACA;IACA;IAHlB,YACkB,IAAyB,EACzB,KAAa,EACb,KAAc;QAFd,SAAI,GAAJ,IAAI,CAAqB;QACzB,UAAK,GAAL,KAAK,CAAQ;QACb,UAAK,GAAL,KAAK,CAAS;IAC7B,CAAC;IAEJ,OAAO,CAAC,UAAsB;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,GAAG;gBACN,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;YAExE,KAAK,GAAG;gBACN,OAAO,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAEzD,KAAK,GAAG;gBACN,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAEvD,KAAK,GAAG;gBACN,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAExD,KAAK,GAAG;gBACN,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAE1D,KAAK,GAAG;gBACN,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAE1D,KAAK,GAAG;gBACN,OAAO,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAE/D;gBACE,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,UAAsB;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAE/B,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,GAAG;gBACN,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACzC,MAAM;YAER,KAAK,GAAG;gBACN,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC1C,MAAM;YAER,KAAK,GAAG;gBACN,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM;YAER,KAAK,GAAG;gBACN,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACzC,MAAM;YAER,KAAK,GAAG;gBACN,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM;YAER,KAAK,GAAG;gBACN,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM;YAER,KAAK,GAAG;gBACN,UAAU,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChD,MAAM;QACV,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare class Md2 {
2
+ private readonly S;
3
+ readonly digest: Uint8Array;
4
+ constructor(data: Uint8Array);
5
+ }
@@ -0,0 +1,61 @@
1
+ export class Md2 {
2
+ S = [
3
+ 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19, 98,
4
+ 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202, 30,
5
+ 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18, 190, 78,
6
+ 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122, 169,
7
+ 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33, 128, 127,
8
+ 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48,
9
+ 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56,
10
+ 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, 112,
11
+ 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, 96, 37, 173,
12
+ 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, 85, 71, 163, 35, 221,
13
+ 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38, 44, 83, 13, 110, 133, 40,
14
+ 132, 9, 211, 223, 205, 244, 65, 129, 77, 82, 106, 220, 55, 200, 108, 193,
15
+ 171, 250, 36, 225, 123, 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99,
16
+ 232, 109, 233, 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88,
17
+ 208, 228, 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
18
+ 31, 26, 219, 153, 141, 51, 159, 17, 131, 20,
19
+ ];
20
+ digest;
21
+ constructor(data) {
22
+ // 1. Padding
23
+ const paddingLength = 16 - (data.length % 16);
24
+ const padded = new Uint8Array(data.length + paddingLength);
25
+ padded.set(data);
26
+ padded.fill(paddingLength, data.length);
27
+ // 2. Checksum
28
+ const checksum = new Uint8Array(16);
29
+ let L = 0;
30
+ for (let offset = 0; offset < padded.length; offset += 16) {
31
+ for (let j = 0; j < 16; j++) {
32
+ const c = padded[offset + j];
33
+ checksum[j] ^= this.S[c ^ L];
34
+ L = checksum[j];
35
+ }
36
+ }
37
+ // 3. message + checksum
38
+ const finalData = new Uint8Array(padded.length + 16);
39
+ finalData.set(padded);
40
+ finalData.set(checksum, padded.length);
41
+ // 4. Main transform
42
+ const X = new Uint8Array(48);
43
+ for (let offset = 0; offset < finalData.length; offset += 16) {
44
+ // copy block
45
+ for (let j = 0; j < 16; j++) {
46
+ X[16 + j] = finalData[offset + j];
47
+ X[32 + j] = X[16 + j] ^ X[j];
48
+ }
49
+ let t = 0;
50
+ for (let round = 0; round < 18; round++) {
51
+ for (let k = 0; k < 48; k++) {
52
+ X[k] ^= this.S[t];
53
+ t = X[k];
54
+ }
55
+ t = (t + round) % 256;
56
+ }
57
+ }
58
+ this.digest = X.slice(0, 16);
59
+ }
60
+ }
61
+ //# sourceMappingURL=MD2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MD2.js","sourceRoot":"","sources":["../../src/utilities/MD2.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG;IACG,CAAC,GAAG;QACnB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;QACvE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACzE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;QAC3E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QACvE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;QAC1E,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;QACzE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;QACxE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;QAC3E,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;QAC1E,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;QAC1E,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3E,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QACxE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;QACvE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QACzE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;KAC5C,CAAC;IAEc,MAAM,CAAa;IAEnC,YAAY,IAAgB;QAC1B,aAAa;QACb,MAAM,aAAa,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;QAE3D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAExC,cAAc;QACd,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE7B,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE7B,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAErD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvC,oBAAoB;QACpB,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAE7B,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;YAC7D,aAAa;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAElC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;gBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBAED,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { DateObject } from "./DatePatternToken";
2
+ export declare class PartedDate implements DateObject {
3
+ readonly year: string;
4
+ readonly month: string;
5
+ readonly day: string;
6
+ readonly hour: string;
7
+ readonly minute: string;
8
+ readonly second: string;
9
+ readonly millisecond: string;
10
+ constructor(date: Date, timeZone: string);
11
+ }
@@ -0,0 +1,37 @@
1
+ // 分解された日付
2
+ export class PartedDate {
3
+ year;
4
+ month;
5
+ day;
6
+ hour;
7
+ minute;
8
+ second;
9
+ millisecond;
10
+ constructor(date, timeZone) {
11
+ const formatter = new Intl.DateTimeFormat("en-US", {
12
+ timeZone,
13
+ year: "numeric",
14
+ month: "2-digit",
15
+ day: "2-digit",
16
+ hour: "2-digit",
17
+ minute: "2-digit",
18
+ second: "2-digit",
19
+ hour12: false,
20
+ });
21
+ const parts = {};
22
+ for (const part of formatter.formatToParts(date)) {
23
+ if (part.type !== "literal") {
24
+ parts[part.type] = part.value;
25
+ }
26
+ }
27
+ this.year = parts.year;
28
+ this.month = parts.month;
29
+ this.day = parts.day;
30
+ this.hour = parts.hour;
31
+ this.minute = parts.minute;
32
+ this.second = parts.second;
33
+ this.millisecond =
34
+ parts.millisecond || String(date.getMilliseconds()).padStart(3, "0");
35
+ }
36
+ }
37
+ //# sourceMappingURL=PartedDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartedDate.js","sourceRoot":"","sources":["../../src/utilities/PartedDate.ts"],"names":[],"mappings":"AAEA,UAAU;AACV,MAAM,OAAO,UAAU;IACL,IAAI,CAAS;IACb,KAAK,CAAS;IACd,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,MAAM,CAAS;IACf,MAAM,CAAS;IACf,WAAW,CAAS;IAEpC,YAAY,IAAU,EAAE,QAAgB;QACtC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YACjD,QAAQ;YACR,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,WAAW;YACd,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzE,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare class StringCode {
2
+ readonly name: "ascii" | "utf8";
3
+ constructor(charset?: string);
4
+ normalized(data: string): string;
5
+ }
@@ -0,0 +1,25 @@
1
+ export class StringCode {
2
+ name;
3
+ constructor(charset) {
4
+ switch (charset) {
5
+ case "UTF_8":
6
+ this.name = "utf8";
7
+ break;
8
+ case "US_ASCII":
9
+ case undefined:
10
+ this.name = "ascii";
11
+ break;
12
+ default:
13
+ throw new Error(`Unsupported charset: ${charset}`);
14
+ }
15
+ }
16
+ normalized(data) {
17
+ if (this.name !== "ascii") {
18
+ return data;
19
+ }
20
+ return [...data]
21
+ .map((char) => (char.charCodeAt(0) <= 0x7f ? char : "?"))
22
+ .join("");
23
+ }
24
+ }
25
+ //# sourceMappingURL=StringCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringCode.js","sourceRoot":"","sources":["../../src/utilities/StringCode.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IACL,IAAI,CAAmB;IACvC,YAAY,OAAgB;QAC1B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;gBACnB,MAAM;YACR,KAAK,UAAU,CAAC;YAChB,KAAK,SAAS;gBACZ,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;gBACpB,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,UAAU,CAAC,IAAY;QACrB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC;aACb,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACxD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export * from "./AppsScriptByte";
2
+ export * from "./BinaryData";
3
+ export * from "./DateFormatPattern";
4
+ export * from "./MD2";
5
+ export * from "./PartedDate";
6
+ export * from "./StringCode";
@@ -0,0 +1,7 @@
1
+ export * from "./AppsScriptByte";
2
+ export * from "./BinaryData";
3
+ export * from "./DateFormatPattern";
4
+ export * from "./MD2";
5
+ export * from "./PartedDate";
6
+ export * from "./StringCode";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@gasboost/fake-core",
3
+ "version": "0.1.0",
4
+ "description": "This package provides a fake implementation of Google Apps Script built-in services for testing purposes.",
5
+ "license": "MIT",
6
+ "author": "tiger-oshima",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/gasboost/fake.git",
10
+ "directory": "packages/fake-core"
11
+ },
12
+ "type": "module",
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": "./dist/index.js",
17
+ "./internal": "./dist/internal.js"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "scripts": {
26
+ "format": "prettier --ignore-path ../../.prettierignore --write .",
27
+ "formatcheck": "prettier --ignore-path ../../.prettierignore --check .",
28
+ "typecheck": "tsc -p tsconfig.json --noEmit",
29
+ "lint": "eslint . --ext .ts",
30
+ "test": "vitest run",
31
+ "check": "pnpm formatcheck && pnpm lint && pnpm typecheck && pnpm test",
32
+ "build": "rm -rf dist && tsc -p tsconfig.json"
33
+ }
34
+ }