adofai 2.9.12 → 2.9.14

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 (59) hide show
  1. package/README.md +186 -1
  2. package/dist/src/effectProcessor.d.ts +32 -0
  3. package/dist/src/effectProcessor.js +90 -0
  4. package/dist/src/effectProcessor.js.map +1 -0
  5. package/dist/src/format.d.ts +8 -0
  6. package/dist/src/format.js +47 -0
  7. package/dist/src/format.js.map +1 -0
  8. package/dist/src/index.d.ts +5 -0
  9. package/dist/src/index.js +49 -0
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/parser/ArrayBufferParser.d.ts +9 -0
  12. package/dist/src/parser/ArrayBufferParser.js +109 -0
  13. package/dist/src/parser/ArrayBufferParser.js.map +1 -0
  14. package/dist/src/parser/BufferParser.d.ts +9 -0
  15. package/dist/src/parser/BufferParser.js +103 -0
  16. package/dist/src/parser/BufferParser.js.map +1 -0
  17. package/{src/parser/Parser.ts → dist/src/parser/Parser.d.ts} +5 -6
  18. package/dist/src/parser/Parser.js +6 -0
  19. package/dist/src/parser/Parser.js.map +1 -0
  20. package/dist/src/parser/StringParser.d.ts +7 -0
  21. package/{src/parser/StringParser.ts → dist/src/parser/StringParser.js} +449 -438
  22. package/dist/src/parser/StringParser.js.map +1 -0
  23. package/dist/src/parser/index.d.ts +16 -0
  24. package/dist/src/parser/index.js +29 -0
  25. package/dist/src/parser/index.js.map +1 -0
  26. package/{src/parser.ts → dist/src/parser.d.ts} +1 -2
  27. package/dist/src/parser.js +15 -0
  28. package/dist/src/parser.js.map +1 -0
  29. package/dist/src/pathdata.d.ts +13 -0
  30. package/dist/src/pathdata.js +17 -0
  31. package/dist/src/pathdata.js.map +1 -0
  32. package/dist/src/presets.d.ts +10 -0
  33. package/{src/presets.ts → dist/src/presets.js} +13 -19
  34. package/dist/src/presets.js.map +1 -0
  35. package/dist/src/structure/Level.d.ts +54 -0
  36. package/dist/src/structure/Level.js +388 -0
  37. package/dist/src/structure/Level.js.map +1 -0
  38. package/{src/structure/interfaces.ts → dist/src/structure/interfaces.d.ts} +33 -38
  39. package/dist/src/structure/interfaces.js +3 -0
  40. package/dist/src/structure/interfaces.js.map +1 -0
  41. package/{src/structure.ts → dist/src/structure.d.ts} +4 -6
  42. package/dist/src/structure.js +5 -0
  43. package/dist/src/structure.js.map +1 -0
  44. package/package.json +12 -4
  45. package/.babelrc +0 -5
  46. package/index.ts +0 -12
  47. package/src/effectProcessor.ts +0 -82
  48. package/src/format.ts +0 -69
  49. package/src/parser/ArrayBufferParser.ts +0 -101
  50. package/src/parser/BufferParser.ts +0 -93
  51. package/src/parser/index.ts +0 -28
  52. package/src/pathdata.ts +0 -20
  53. package/src/structure/Level.ts +0 -351
  54. package/src/structure.ts.bak +0 -412
  55. package/test/Buffer.js +0 -2030
  56. package/test/editor.html +0 -501
  57. package/test/index.html +0 -31
  58. package/tsconfig.json +0 -17
  59. package/webpack.config.mjs +0 -35
package/README.md CHANGED
@@ -17,4 +17,189 @@ yarn add adofai
17
17
  pnpm install adofai
18
18
  ```
19
19
 
20
- if you want to display highlight of adofai file, you can use `Rhythm Game Syntax Highlighter` vscode extension.
20
+ if you want to display highlight of adofai file, you can use `Rhythm Game Syntax Highlighter` vscode extension.
21
+
22
+ ## Got Started
23
+
24
+ ### Import
25
+
26
+ For Commonjs:
27
+ ```ts
28
+ const adofai = require('adofai');
29
+ ```
30
+
31
+ For ES6 Modules:
32
+ ```ts
33
+ import * as adofai from 'adofai';
34
+ ```
35
+
36
+ ### Create a Level
37
+
38
+ ```ts
39
+ const file = new adofai.Level(adofaiFileContent);
40
+
41
+ //or
42
+
43
+ const parser = new adofai.Parsers.StringParser();
44
+ const file = new adofai.Level(adofaiFileContent,parser);
45
+
46
+ //The advantage of the latter over the former is that it pre-initializes the Parser, avoiding multiple instantiations.
47
+ ```
48
+
49
+ Format:
50
+ ```ts
51
+ class Level {
52
+ constructor(opt: string | LevelOptions, provider?: ParseProvider)
53
+ }
54
+
55
+ ```
56
+ Available ParseProviders:
57
+ `StringParser` `ArrayBufferParser` `BufferParser`
58
+
59
+
60
+ Usually,only `StringParser` is needed.
61
+ but you can use `BufferParser` to parse ADOFAI files in Node environment.
62
+
63
+ On browser, you can also use `ArrayBuffer` to parse ADOFAI files.
64
+ (`BufferParser` is not available in browser,but you can use browserify `Buffer` to polyfill)
65
+
66
+ ### Load Level
67
+ ```ts
68
+ file.on('load'() => {
69
+ //logic...
70
+ })
71
+ file.load()
72
+ ```
73
+
74
+ or you can use `then()`
75
+ ```ts
76
+ file.load().then(() => {
77
+
78
+ })
79
+ ```
80
+
81
+ ### Export Level
82
+ ```ts
83
+ type FileType = 'string'|'object'
84
+
85
+ file.export(type: FileType = 'string',indent?:number,useAdofaiStyle:boolean = true)
86
+ ```
87
+
88
+ method `export()` returns a Object or String.
89
+
90
+ Object: return ADOFAI Object.
91
+ String: return ADOFAI String.
92
+
93
+ ```ts
94
+ import fs from 'fs'
95
+ type FileType = 'string'|'object'
96
+
97
+ const content = file.export('string',null,true);
98
+ fs.writeFileSync('output.adofai',content)
99
+ ```
100
+
101
+
102
+ ## Data Operation
103
+
104
+ See interfaces to see all data.
105
+
106
+ ```ts
107
+ export interface AdofaiEvent {
108
+ eventType: string;
109
+ [key: string]: any;
110
+ }
111
+
112
+ export interface LevelOptions {
113
+ pathData?: string;
114
+ angleData?: number[];
115
+ actions: AdofaiEvent[];
116
+ settings: Record<string, any>;
117
+ decorations: AdofaiEvent[];
118
+ [key: string]: any;
119
+ }
120
+
121
+ export interface EventCallback {
122
+ guid: string;
123
+ callback: Function;
124
+ }
125
+
126
+ export interface GuidCallback {
127
+ eventName: string;
128
+ callback: Function;
129
+ }
130
+
131
+ export interface Tile {
132
+ direction?: number;
133
+ angle?: number;
134
+ actions: AdofaiEvent[];
135
+ addDecorations?: AdofaiEvent[];
136
+ _lastdir?: number;
137
+ twirl?: number;
138
+ position?: number[];
139
+ extraProps?: Record<string, any>;
140
+ }
141
+
142
+ export interface ParseProvider {
143
+ parse(t: string): LevelOptions;
144
+ }
145
+ ```
146
+
147
+ For Level:
148
+
149
+ ```ts
150
+ import { AdofaiEvent, LevelOptions, Tile, ParseProvider } from './interfaces';
151
+ export declare class Level {
152
+ private _events;
153
+ private guidCallbacks;
154
+ private guidCounter;
155
+ private _options;
156
+ private _provider?;
157
+ angleData: number[];
158
+ actions: AdofaiEvent[];
159
+ settings: Record<string, any>;
160
+ __decorations: AdofaiEvent[];
161
+ tiles: Tile[];
162
+ private _angleDir;
163
+ private _twirlCount;
164
+ constructor(opt: string | LevelOptions, provider?: ParseProvider);
165
+ generateGUID(): string;
166
+ load(): Promise<boolean>;
167
+ on(eventName: string, callback: Function): string;
168
+ trigger(eventName: string, data: any): void;
169
+ off(guid: string): void;
170
+ private _createArray;
171
+ private _changeAngle;
172
+ private _parsechangedAngle;
173
+ private _filterByFloor;
174
+ private _flattenAngleDatas;
175
+ private _flattenActionsWithFloor;
176
+ private _filterByFloorwithDeco;
177
+ private _flattenDecorationsWithFloor;
178
+ private _parseAngle;
179
+ filterActionsByEventType(en: string): {
180
+ index: number;
181
+ action: AdofaiEvent;
182
+ }[];
183
+ getActionsByIndex(en: string, index: number): {
184
+ count: number;
185
+ actions: AdofaiEvent[];
186
+ };
187
+ calculateTileCoordinates(): void;
188
+ floorOperation(info?: {
189
+ type: 'append' | 'insert' | 'delete';
190
+ direction: number;
191
+ id?: number;
192
+ }): void;
193
+ appendFloor(args: {
194
+ direction: number;
195
+ }): void;
196
+ clearDeco(): boolean;
197
+ clearEffect(presetName: string): void;
198
+ clearEvent(preset: {
199
+ type: string;
200
+ events: string[];
201
+ }): void;
202
+ export(type: 'string' | 'object', indent?: number, useAdofaiStyle?: boolean): string | Record<string, any>;
203
+ }
204
+
205
+ ```
@@ -0,0 +1,32 @@
1
+ interface Tile {
2
+ addDecorations?: any[];
3
+ actions?: Action[];
4
+ [key: string]: any;
5
+ }
6
+ interface Action {
7
+ eventType: string;
8
+ [key: string]: any;
9
+ }
10
+ /**
11
+ * @param {Array} tiles ADOFAI Tiles from ADOFAI.Level
12
+ * @returns {Array} new Tiles
13
+ */
14
+ declare function clearDecorations(tiles: Tile[]): Tile[];
15
+ /**
16
+ * @param {Array} eventTypes Eventlist to remove
17
+ * @param {Array} tiles ADOFAI Tiles from ADOFAI.Level
18
+ * @returns {Array} new Tiles
19
+ */
20
+ declare function clearEvents(eventTypes: string[], tiles: Tile[]): Tile[];
21
+ /**
22
+ * @param {Array} eventTypes Eventlist to keep
23
+ * @param {Array} tiles ADOFAI Tiles from ADOFAI.Level
24
+ * @returns {Array} new Tiles
25
+ */
26
+ declare function keepEvents(eventTypes: string[], tiles: Tile[]): Tile[];
27
+ declare const effectProcessor: {
28
+ clearDecorations: typeof clearDecorations;
29
+ clearEvents: typeof clearEvents;
30
+ keepEvents: typeof keepEvents;
31
+ };
32
+ export default effectProcessor;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const presets = __importStar(require("./presets"));
37
+ /**
38
+ * @param {Array} tiles ADOFAI Tiles from ADOFAI.Level
39
+ * @returns {Array} new Tiles
40
+ */
41
+ function clearDecorations(tiles) {
42
+ if (!Array.isArray(tiles)) {
43
+ throw new Error('Arguments are not supported.');
44
+ }
45
+ return tiles.map(tile => {
46
+ const newTile = Object.assign({}, tile);
47
+ if (newTile.hasOwnProperty('addDecorations')) {
48
+ newTile.addDecorations = [];
49
+ }
50
+ if (Array.isArray(newTile.actions)) {
51
+ newTile.actions = newTile.actions.filter(action => !presets.preset_inner_no_deco.events.includes(action.eventType));
52
+ }
53
+ return newTile;
54
+ });
55
+ }
56
+ /**
57
+ * @param {Array} eventTypes Eventlist to remove
58
+ * @param {Array} tiles ADOFAI Tiles from ADOFAI.Level
59
+ * @returns {Array} new Tiles
60
+ */
61
+ function clearEvents(eventTypes, tiles) {
62
+ return tiles.map(tile => {
63
+ const newTile = Object.assign({}, tile);
64
+ if (Array.isArray(newTile.actions)) {
65
+ newTile.actions = newTile.actions.filter(action => !eventTypes.includes(action.eventType));
66
+ }
67
+ return newTile;
68
+ });
69
+ }
70
+ /**
71
+ * @param {Array} eventTypes Eventlist to keep
72
+ * @param {Array} tiles ADOFAI Tiles from ADOFAI.Level
73
+ * @returns {Array} new Tiles
74
+ */
75
+ function keepEvents(eventTypes, tiles) {
76
+ return tiles.map(tile => {
77
+ const newTile = Object.assign({}, tile);
78
+ if (Array.isArray(newTile.actions)) {
79
+ newTile.actions = newTile.actions.filter(action => eventTypes.includes(action.eventType));
80
+ }
81
+ return newTile;
82
+ });
83
+ }
84
+ const effectProcessor = {
85
+ clearDecorations,
86
+ clearEvents,
87
+ keepEvents
88
+ };
89
+ exports.default = effectProcessor;
90
+ //# sourceMappingURL=effectProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effectProcessor.js","sourceRoot":"","sources":["../../src/effectProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAoC;AAapC;;;EAGE;AACF,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,OAAO,qBAAQ,IAAI,CAAE,CAAC;QAE5B,IAAI,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAChD,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;EAIE;AACF,SAAS,WAAW,CAAC,UAAoB,EAAE,KAAa;IACtD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,OAAO,qBAAQ,IAAI,CAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAC/C,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CACxC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;EAIE;AACF,SAAS,UAAU,CAAC,UAAoB,EAAE,KAAa;IACrD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,OAAO,qBAAQ,IAAI,CAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAChD,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CACtC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAGD,MAAM,eAAe,GAAG;IACtB,gBAAgB;IAChB,WAAW;IACX,UAAU;CACX,CAAA;AACD,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param {object} obj - JSON Object
3
+ * @param {number} indent - No usage
4
+ * @param {boolean} isRoot - Is JSON the Root?
5
+ * @returns ADOFAI File Content or Object
6
+ */
7
+ declare function exportAsADOFAI(obj: any, indent?: number, isRoot?: boolean): string;
8
+ export default exportAsADOFAI;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * @param {object} obj - JSON Object
5
+ * @param {number} indent - No usage
6
+ * @param {boolean} isRoot - Is JSON the Root?
7
+ * @returns ADOFAI File Content or Object
8
+ */
9
+ function exportAsADOFAI(obj, indent = 0, isRoot = false) {
10
+ if (typeof obj !== 'object' || obj === null) {
11
+ return JSON.stringify(obj);
12
+ }
13
+ if (Array.isArray(obj)) {
14
+ const allPrimitives = obj.every(item => typeof item !== 'object' || item === null);
15
+ if (allPrimitives) {
16
+ return '[' + obj.map(item => exportAsADOFAI(item)).join(',') + ']';
17
+ }
18
+ const spaces = ' '.repeat(indent);
19
+ const arrayItems = obj.map(item => spaces + ' ' + formatAsSingleLine(item)).join(',\n');
20
+ return '[\n' + arrayItems + '\n' + spaces + ']';
21
+ }
22
+ const spaces = ' '.repeat(indent);
23
+ const keys = Object.keys(obj);
24
+ if (isRoot) {
25
+ const objectItems = keys.map(key => ' ' + JSON.stringify(key) + ': ' + exportAsADOFAI(obj[key], 2)).join(',\n');
26
+ return '{\n' + objectItems + '\n}';
27
+ }
28
+ const objectItems = keys.map(key => spaces + ' ' + JSON.stringify(key) + ': ' + exportAsADOFAI(obj[key], indent + 2)).join(',\n');
29
+ return '{\n' + objectItems + '\n' + spaces + '}';
30
+ }
31
+ /**
32
+ * @param {Array} obj Eventlist to keep
33
+ * @returns {string} JSON formated as singleline
34
+ */
35
+ function formatAsSingleLine(obj) {
36
+ if (typeof obj !== 'object' || obj === null) {
37
+ return exportAsADOFAI(obj);
38
+ }
39
+ if (Array.isArray(obj)) {
40
+ return '[' + obj.map(formatAsSingleLine).join(',') + ']';
41
+ }
42
+ const keys = Object.keys(obj);
43
+ const entries = keys.map(key => JSON.stringify(key) + ': ' + formatAsSingleLine(obj[key])).join(', ');
44
+ return '{' + entries + '}';
45
+ }
46
+ exports.default = exportAsADOFAI;
47
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import pathData from './pathdata';
2
+ import * as Parsers from './parser';
3
+ import Level, * as Structure from './structure';
4
+ import * as Presets from './presets';
5
+ export { pathData, Parsers, Level, Structure, Presets };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Presets = exports.Structure = exports.Level = exports.Parsers = exports.pathData = void 0;
40
+ const pathdata_1 = __importDefault(require("./pathdata"));
41
+ exports.pathData = pathdata_1.default;
42
+ const Parsers = __importStar(require("./parser"));
43
+ exports.Parsers = Parsers;
44
+ const structure_1 = __importStar(require("./structure")), Structure = structure_1;
45
+ exports.Level = structure_1.default;
46
+ exports.Structure = Structure;
47
+ const Presets = __importStar(require("./presets"));
48
+ exports.Presets = Presets;
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAAiC;AAM7B,mBANG,kBAAQ,CAMH;AALZ,kDAAmC;AAM/B,0BAAO;AALX,kFAA8C;AAM1C,gBANG,mBAAK,CAMH;AACL,8BAAS;AANb,mDAAoC;AAOhC,0BAAO"}
@@ -0,0 +1,9 @@
1
+ import Parser from "./Parser";
2
+ export declare class ArrayBufferParser extends Parser<ArrayBuffer | string, any> {
3
+ parse(input: ArrayBuffer | string): any;
4
+ stringify(obj: any): string;
5
+ }
6
+ export declare function stripBOM(buffer: ArrayBuffer): ArrayBuffer;
7
+ export declare function normalizeJsonArrayBuffer(buffer: ArrayBuffer): ArrayBuffer;
8
+ export declare function decodeStringFromUTF8BOM(buffer: ArrayBuffer): string;
9
+ export default ArrayBufferParser;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ArrayBufferParser = void 0;
7
+ exports.stripBOM = stripBOM;
8
+ exports.normalizeJsonArrayBuffer = normalizeJsonArrayBuffer;
9
+ exports.decodeStringFromUTF8BOM = decodeStringFromUTF8BOM;
10
+ const Parser_1 = __importDefault(require("./Parser"));
11
+ const StringParser_1 = __importDefault(require("./StringParser"));
12
+ const BOM = new Uint8Array([0xef, 0xbb, 0xbf]);
13
+ const COMMA = new Uint8Array([44]); // ASCII for ','
14
+ class ArrayBufferParser extends Parser_1.default {
15
+ parse(input) {
16
+ if (typeof input === "string") {
17
+ return StringParser_1.default.prototype.parse.call(StringParser_1.default.prototype, input);
18
+ }
19
+ else {
20
+ return StringParser_1.default.prototype.parse.call(StringParser_1.default.prototype, decodeStringFromUTF8BOM(normalizeJsonArrayBuffer(stripBOM(input))));
21
+ }
22
+ }
23
+ stringify(obj) {
24
+ return JSON.stringify(obj);
25
+ }
26
+ }
27
+ exports.ArrayBufferParser = ArrayBufferParser;
28
+ function stripBOM(buffer) {
29
+ const view = new Uint8Array(buffer);
30
+ if (view.length >= 3 && view[0] === BOM[0] && view[1] === BOM[1] && view[2] === BOM[2]) {
31
+ return buffer.slice(3);
32
+ }
33
+ return buffer;
34
+ }
35
+ function normalizeJsonArrayBuffer(buffer) {
36
+ const view = new Uint8Array(buffer);
37
+ let builder = [];
38
+ let last = "other";
39
+ let from = 0;
40
+ for (let i = 0; i < view.length; i++) {
41
+ const charCode = view[i];
42
+ if (last == "escape") {
43
+ last = "string";
44
+ }
45
+ else {
46
+ switch (charCode) {
47
+ case 34: // "
48
+ switch (last) {
49
+ case "string":
50
+ last = "other";
51
+ break;
52
+ case "comma":
53
+ builder.push(COMMA);
54
+ default:
55
+ last = "string";
56
+ break;
57
+ }
58
+ break;
59
+ case 92: // \
60
+ if (last === "string")
61
+ last = "escape";
62
+ break;
63
+ case 44: // ,
64
+ builder.push(view.subarray(from, i));
65
+ from = i + 1;
66
+ if (last === "other")
67
+ last = "comma";
68
+ break;
69
+ case 93: // ]
70
+ case 125: // }
71
+ if (last === "comma")
72
+ last = "other";
73
+ break;
74
+ case 9: // \t
75
+ case 10: // \n
76
+ case 11: // \v
77
+ case 12: // \f
78
+ case 13: // \r
79
+ case 32: // space
80
+ break;
81
+ default:
82
+ if (last === "comma") {
83
+ builder.push(COMMA);
84
+ last = "other";
85
+ }
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ builder.push(view.subarray(from));
91
+ let totalLength = 0;
92
+ for (const arr of builder) {
93
+ totalLength += arr.length;
94
+ }
95
+ const result = new Uint8Array(totalLength);
96
+ let offset = 0;
97
+ for (const arr of builder) {
98
+ result.set(arr, offset);
99
+ offset += arr.length;
100
+ }
101
+ return result.buffer;
102
+ }
103
+ function decodeStringFromUTF8BOM(buffer) {
104
+ const strippedBuffer = stripBOM(buffer);
105
+ const decoder = new TextDecoder('utf-8');
106
+ return decoder.decode(strippedBuffer);
107
+ }
108
+ exports.default = ArrayBufferParser;
109
+ //# sourceMappingURL=ArrayBufferParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrayBufferParser.js","sourceRoot":"","sources":["../../../src/parser/ArrayBufferParser.ts"],"names":[],"mappings":";;;;;;AAmBA,4BAMC;AAED,4DAiEC;AAED,0DAIC;AAlGD,sDAA8B;AAC9B,kEAA0C;AAE1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB;AAEpD,MAAa,iBAAkB,SAAQ,gBAAiC;IACtE,KAAK,CAAC,KAA2B;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,sBAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,OAAO,sBAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAY,CAAC,SAAS,EAAE,uBAAuB,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvI,CAAC;IACH,CAAC;IACD,SAAS,CAAC,GAAQ;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF;AAXD,8CAWC;AAED,SAAgB,QAAQ,CAAC,MAAmB;IAC1C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAmB;IAC1D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,OAAO,GAAiB,EAAE,CAAC;IAC/B,IAAI,IAAI,GAA4C,OAAO,CAAC;IAC5D,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACrB,IAAI,GAAG,QAAQ,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,EAAE,EAAE,IAAI;oBACX,QAAQ,IAAI,EAAE,CAAC;wBACb,KAAK,QAAQ;4BACX,IAAI,GAAG,OAAO,CAAC;4BACf,MAAM;wBACR,KAAK,OAAO;4BACV,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtB;4BACE,IAAI,GAAG,QAAQ,CAAC;4BAChB,MAAM;oBACV,CAAC;oBACD,MAAM;gBACR,KAAK,EAAE,EAAE,IAAI;oBACX,IAAI,IAAI,KAAK,QAAQ;wBAAE,IAAI,GAAG,QAAQ,CAAC;oBACvC,MAAM;gBACR,KAAK,EAAE,EAAE,IAAI;oBACX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;oBACb,IAAI,IAAI,KAAK,OAAO;wBAAE,IAAI,GAAG,OAAO,CAAC;oBACrC,MAAM;gBACR,KAAK,EAAE,CAAC,CAAC,IAAI;gBACb,KAAK,GAAG,EAAE,IAAI;oBACZ,IAAI,IAAI,KAAK,OAAO;wBAAE,IAAI,GAAG,OAAO,CAAC;oBACrC,MAAM;gBACR,KAAK,CAAC,CAAC,CAAC,KAAK;gBACb,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,EAAE,QAAQ;oBACf,MAAM;gBACR;oBACE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;wBACrB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACpB,IAAI,GAAG,OAAO,CAAC;oBACjB,CAAC;oBACD,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAElC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAmB;IACzD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AACxC,CAAC;AAED,kBAAe,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import Parser from "./Parser";
2
+ export declare class BufferParser extends Parser<Buffer | string, any> {
3
+ parse(input: Buffer | string): any;
4
+ stringify(obj: any): string;
5
+ }
6
+ export declare function stripBOM(buffer: Buffer): Buffer;
7
+ export declare function normalizeJsonBuffer(text: Buffer): Buffer;
8
+ export declare function decodeStringFromUTF8BOM(buffer: Buffer): string;
9
+ export default BufferParser;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BufferParser = void 0;
7
+ exports.stripBOM = stripBOM;
8
+ exports.normalizeJsonBuffer = normalizeJsonBuffer;
9
+ exports.decodeStringFromUTF8BOM = decodeStringFromUTF8BOM;
10
+ const Parser_1 = __importDefault(require("./Parser"));
11
+ const StringParser_1 = __importDefault(require("./StringParser"));
12
+ let BOM;
13
+ let COMMA;
14
+ try {
15
+ BOM = Buffer.of(0xef, 0xbb, 0xbf);
16
+ COMMA = Buffer.from(",");
17
+ }
18
+ catch (e) {
19
+ console.warn('Buffer is not available in current environment, try to use ArrayBufferParser');
20
+ BOM = { equals: () => false, subarray: () => null };
21
+ COMMA = { equals: () => false, subarray: () => null };
22
+ }
23
+ class BufferParser extends Parser_1.default {
24
+ parse(input) {
25
+ if (typeof input === "string") {
26
+ return StringParser_1.default.prototype.parse.call(StringParser_1.default.prototype, input);
27
+ }
28
+ else {
29
+ return StringParser_1.default.prototype.parse.call(StringParser_1.default.prototype, decodeStringFromUTF8BOM(normalizeJsonBuffer(stripBOM(input))));
30
+ }
31
+ }
32
+ stringify(obj) {
33
+ return JSON.stringify(obj);
34
+ }
35
+ }
36
+ exports.BufferParser = BufferParser;
37
+ function stripBOM(buffer) {
38
+ if (buffer.length >= 3 && BOM.equals(buffer.subarray(0, 3))) {
39
+ return buffer.subarray(3);
40
+ }
41
+ return buffer;
42
+ }
43
+ function normalizeJsonBuffer(text) {
44
+ let builder = [];
45
+ let last = "other";
46
+ let from = 0;
47
+ text.forEach((charCode, i) => {
48
+ if (last == "escape") {
49
+ last = "string";
50
+ }
51
+ else {
52
+ switch (charCode) {
53
+ case 34:
54
+ switch (last) {
55
+ case "string":
56
+ last = "other";
57
+ break;
58
+ case "comma":
59
+ builder.push(COMMA);
60
+ default:
61
+ last = "string";
62
+ break;
63
+ }
64
+ break;
65
+ case 92:
66
+ if (last === "string")
67
+ last = "escape";
68
+ break;
69
+ case 44:
70
+ builder.push(text.subarray(from, i));
71
+ from = i + 1;
72
+ if (last === "other")
73
+ last = "comma";
74
+ break;
75
+ case 93:
76
+ case 125:
77
+ if (last === "comma")
78
+ last = "other";
79
+ break;
80
+ case 9:
81
+ case 10:
82
+ case 11:
83
+ case 12:
84
+ case 13:
85
+ case 32:
86
+ break;
87
+ default:
88
+ if (last === "comma") {
89
+ builder.push(COMMA);
90
+ last = "other";
91
+ }
92
+ break;
93
+ }
94
+ }
95
+ });
96
+ builder.push(text.subarray(from));
97
+ return Buffer.concat(builder);
98
+ }
99
+ function decodeStringFromUTF8BOM(buffer) {
100
+ return stripBOM(buffer).toString("utf-8");
101
+ }
102
+ exports.default = BufferParser;
103
+ //# sourceMappingURL=BufferParser.js.map