Skip to content

Commit

Permalink
start on compiler
Browse files Browse the repository at this point in the history
  • Loading branch information
eartharoid committed Jul 2, 2024
1 parent a74b6c9 commit 1f75c87
Show file tree
Hide file tree
Showing 15 changed files with 184 additions and 17 deletions.
4 changes: 4 additions & 0 deletions packages/i18nb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,15 @@
"devDependencies": {
"@eartharoid/i18n": "workspace:^",
"@types/node": "^20.11.19",
"@types/varint": "^6.0.3",
"@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.33.0",
"ava": "^5.3.1",
"eslint": "^7.32.0",
"rimraf": "^5.0.7",
"typescript": "^4.9.5"
},
"dependencies": {
"varint": "^6.0.0"
}
}
87 changes: 87 additions & 0 deletions packages/i18nb/src/Compiler.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';
import { encode as encodeVarInt } from 'varint';

// const version = 1;

// const textEncoder = new TextEncoder();
// const encodeText = (text: string) => textEncoder.encode(text); // ? encodeInto

// export default function* compile(messages: Iterable<[string, ParsedMessage]>): Iterable<number> {
// let prefix_parts = [];

// yield version;

// for (const [k, v] of messages) {
// const key_bytes = encodeText(k);
// yield* encodeVarInt(key_bytes.byteLength);
// yield* key_bytes;
// }
// }

// compile.toBuffer = function (messages: Iterable<[string, ParsedMessage]>) {
// return new Uint8Array(this(messages));
// };

// interface Compiler {
// messages: Iterable<[string, ParsedMessage]>;
// compile(messages: Iterable<[string, ParsedMessage]>): this;
// toBuffer(messages: Iterable<[string, ParsedMessage]>): Uint8Array;
// [Symbol.iterator](): Iterable<number>;
// }

// const compiler: Compiler = {
// messages: [],
// compile(messages: Iterable<[string, ParsedMessage]>) {
// this.messages = messages;
// return this;
// },
// toBuffer(): Uint8Array {
// return new Uint8Array(this);
// },
// // [Symbol.iterator]: function* () {},
// *[Symbol.iterator](): Iterable<number> {
// const prefix_parts = [];

// yield version;

// for (const [k, v] of this.messages) {
// const key_bytes = encodeText(k);
// yield* encodeVarInt(key_bytes.byteLength);
// yield* key_bytes;
// }
// },
// };

type ParsedMessages = Iterable<[string, ParsedMessage]>;

export default class Compiler {
#messages: ParsedMessages;
#textEncoder = new TextEncoder();

public version = 1;

constructor(messages: ParsedMessages) {
this.#messages = messages;
return this;
}

#encodeText(text: string): Uint8Array {
return this.#textEncoder.encode(text);
}

public toBuffer(): Uint8Array {
return new Uint8Array(this as unknown as Iterable<number>);
}

public *[Symbol.iterator](): Iterable<number> {
// const prefix_parts = [];

yield this.version;

for (const [k] of this.#messages) {
const key_bytes = this.#encodeText(k);
yield* encodeVarInt(key_bytes.byteLength);
yield* key_bytes;
}
}
}
7 changes: 7 additions & 0 deletions packages/i18nb/src/fromBuffer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';

export default function* fromBuffer(): Iterable<[string, ParsedMessage]> {
// ! ReadableStream.from() is not widely supported -- https://www.npmjs.com/package/@sec-ant/readable-stream

yield;
}
5 changes: 4 additions & 1 deletion packages/i18nb/src/fromStream.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';

export default function* fromStream(): Generator<ParsedMessage> {
export default function* fromStream(): Iterable<[string, ParsedMessage]> {
// ! ReadableStream.@@asyncIterator (check support) -- https://www.npmjs.com/package/@sec-ant/readable-stream
// ! try ReadableStreamBYOBReader else default

yield;
}
3 changes: 1 addition & 2 deletions packages/i18nb/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@
'use strict';

export { default as fromStream } from './fromStream.js';
export { default as toBinary } from './toBinary.js';
export { default as toBuffer } from './toBuffer.js';
export { default as Compiler } from './Compiler.js';
6 changes: 0 additions & 6 deletions packages/i18nb/src/toBinary.ts

This file was deleted.

6 changes: 0 additions & 6 deletions packages/i18nb/src/toBuffer.ts

This file was deleted.

35 changes: 35 additions & 0 deletions packages/i18nb/test/compile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/* eslint-disable no-console */

import { Compiler } from '../dist/index.js';


// const bytes = compile([[1, 2], [2, 3]]);

// for (const byte of bytes) {
// console.log(byte);
// }

// const buffer = compile.toBuffer([[1, 2], [2, 3]]);
// console.log(buffer);




// const bytes = compile.compile([[1, 2], [2, 3]]);

// for (const byte of bytes) {
// console.log(byte);
// }

// const buffer = bytes.toBuffer();
// console.log(buffer);


const bytes = new Compiler([[1, 'A'], [2, 'B']]);

for (const byte of bytes) {
console.log(byte);
}

const buffer = bytes.toBuffer();
console.log(buffer);
4 changes: 2 additions & 2 deletions packages/i18nb/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"compilerOptions": {
"removeComments": true,
"target": "es2020",
"module": "es2020",
"target": "ES2022",
"module": "ES2022",
"outDir": "dist",
"moduleResolution": "node",
"declaration": true,
Expand Down
10 changes: 10 additions & 0 deletions packages/i18nb/types/Compiler.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';
type ParsedMessages = Iterable<[string, ParsedMessage]>;
export default class Compiler {
#private;
version: number;
constructor(messages: ParsedMessages);
toBuffer(): Uint8Array;
[Symbol.iterator](): Iterable<number>;
}
export {};
9 changes: 9 additions & 0 deletions packages/i18nb/types/compile.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';
interface Compiler {
messages: Iterable<[string, ParsedMessage]>;
compile(messages: Iterable<[string, ParsedMessage]>): this;
toBuffer(messages: Iterable<[string, ParsedMessage]>): Uint8Array;
[Symbol.iterator](): Iterable<number>;
}
declare const compiler: Compiler;
export default compiler;
2 changes: 2 additions & 0 deletions packages/i18nb/types/fromBuffer.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';
export default function fromBuffer(): Iterable<[string, ParsedMessage]>;
2 changes: 2 additions & 0 deletions packages/i18nb/types/fromStream.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import type { ParsedMessage } from '@eartharoid/i18n/types';
export default function fromStream(): Iterable<[string, ParsedMessage]>;
2 changes: 2 additions & 0 deletions packages/i18nb/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { default as fromStream } from './fromStream.js';
export { default as Compiler } from './Compiler.js';
19 changes: 19 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 1f75c87

Please sign in to comment.