release
This commit is contained in:
parent
244f5e4c78
commit
cf1472d268
14
.eslintrc.cjs
Normal file
14
.eslintrc.cjs
Normal file
@ -0,0 +1,14 @@
|
||||
module.exports = {
|
||||
env: { browser: true, es2020: true },
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:react-hooks/recommended',
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
|
||||
plugins: ['react-refresh'],
|
||||
rules: {
|
||||
'react-refresh/only-export-components': 'warn',
|
||||
},
|
||||
}
|
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
16
Makefile
Normal file
16
Makefile
Normal file
@ -0,0 +1,16 @@
|
||||
.PHONY: build
|
||||
build:
|
||||
npm run build
|
||||
|
||||
.PHONY: dev
|
||||
dev:
|
||||
npm run dev
|
||||
|
||||
.PHONY: deps
|
||||
deps:
|
||||
# protos
|
||||
deno run -rA misc/otorp.ts > public/protos
|
||||
# src/messages
|
||||
deno run -rA misc/dump_registry.ts /Applications/Numbers.app/Contents/MacOS/Numbers > src/messages/numbers.ts
|
||||
deno run -rA misc/dump_registry.ts /Applications/Keynote.app/Contents/MacOS/Keynote > src/messages/keynote.ts
|
||||
deno run -rA misc/dump_registry.ts /Applications/Pages.app/Contents/MacOS/Pages > src/messages/pages.ts
|
25
README.md
Normal file
25
README.md
Normal file
@ -0,0 +1,25 @@
|
||||
# iwa-inspector
|
||||
|
||||
source for <https://sheetjs.com/tools/iwa-inspector>
|
||||
|
||||
`iwa-inspector` is a tool for inspecting iWork archives.
|
||||
|
||||
When a file is loaded, a table will display the messages in the file.
|
||||
|
||||
When a message is selected, the page will display the Protocol Buffers
|
||||
definition for the message as well as an inspector for the message and metadata.
|
||||
|
||||
Clicking on a `.TSP.Reference` ID will jump to the referenced message.
|
||||
|
||||
Right-clicking a custom message type will show a context menu with options to
|
||||
copy the raw byte representation (array of numbers) or parsed object (JSON).
|
||||
|
||||
## Development
|
||||
|
||||
`make dev` starts the dev server.
|
||||
|
||||
`make build` generates the static site.
|
||||
|
||||
## Refreshing data
|
||||
|
||||
`make deps` requires a SIP-disabled Intel Mac. The last run used v13.0 apps.
|
14
index.html
Normal file
14
index.html
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/png" href="https://sheetjs.com/favico/favicon-196x196.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>SheetJS IWA Inspector</title>
|
||||
<link rel="canonical" href="https://sheetjs.com/tools/iwa-inspector" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
</html>
|
57
misc/dump_registry.ts
Normal file
57
misc/dump_registry.ts
Normal file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env -S deno run -A
|
||||
/*! dump_registry.ts (C) 2022-present SheetJS LLC -- https://sheetjs.com */
|
||||
|
||||
/*
|
||||
NOTE: this script requires an Intel Mac, Numbers, LLDB, and Deno
|
||||
|
||||
USAGE: deno run -A https://oss.sheetjs.com/notes/iwa/dump_registry.ts
|
||||
*/
|
||||
|
||||
if(Deno.build.os != "darwin") throw `Must run in macOS!`;
|
||||
if(Deno.build.arch != "x86_64") throw `Must run on Intel Mac (Apple Silicon currently unsupported)`;
|
||||
|
||||
{
|
||||
const p = Deno.run({cmd:["csrutil","status"],stdin:"piped",stdout:"piped" });
|
||||
const [status, stdout] = await Promise.all([ p.status(), p.output() ]);
|
||||
await p.close();
|
||||
const data = new TextDecoder().decode(stdout);
|
||||
//if(data.includes("enabled")) throw `SIP must be disabled!`;
|
||||
}
|
||||
|
||||
const p = Deno.run({ cmd: `lldb ${Deno?.args?.[0] || "/Applications/Numbers.app/Contents/MacOS/Numbers"} -a x86_64`.split(" "),
|
||||
stdin: "piped", stdout: "piped"
|
||||
});
|
||||
|
||||
const doit = (x: string) => p?.stdin?.write(new TextEncoder().encode(x))
|
||||
|
||||
const cmds = [
|
||||
"b -[NSApplication _sendFinishLaunchingNotification]",
|
||||
"settings set auto-confirm 1",
|
||||
"breakpoint command add 1.1",
|
||||
"po [TSPRegistry sharedRegistry]",
|
||||
"process kill",
|
||||
"exit",
|
||||
"DONE",
|
||||
"run",
|
||||
];
|
||||
for(const cmd of cmds) await doit(cmd + "\n");
|
||||
|
||||
/* LLDB does not exit normally, setTimeout workaround */
|
||||
setTimeout(() => p.kill("SIGKILL"), 15000)
|
||||
|
||||
const [status, stdout] = await Promise.all([ p.status(), p.output() ]);
|
||||
await p.close();
|
||||
|
||||
const data = new TextDecoder().decode(stdout);
|
||||
const res = data.match(/_messageTypeToPrototypeMap = {([^]*?)}/m)?.[1];
|
||||
if(!res) throw `Could not find map!`
|
||||
const rows = res.split(/[\r\n]+/).map(r => r.trim().split(/\s+/)).filter(x => x.length > 1);
|
||||
rows.sort((l, r) => +l[0] - +r[0]);
|
||||
console.log(`export default {`);
|
||||
rows.forEach(r => {
|
||||
if(r[3] == "null") return;
|
||||
console.log(` ${r[0]}: ".${r[3]}",`);
|
||||
});
|
||||
console.log(`} as {[key: number]: string};`);
|
||||
|
||||
//console.log(Object.fromEntries(rows.map(r => [r[0], r[3]]).filter(r => r[1] != "null")));
|
625
misc/otorp.ts
Normal file
625
misc/otorp.ts
Normal file
@ -0,0 +1,625 @@
|
||||
#!/usr/bin/env -S deno run -A
|
||||
/*! otorp (C) 2021-present SheetJS -- http://sheetjs.com */
|
||||
import { resolve } from "https://deno.land/std@0.171.0/path/mod.ts";
|
||||
import { TerminalSpinner } from "https://deno.land/x/spinners/mod.ts";
|
||||
|
||||
// #region util.ts
|
||||
|
||||
var u8_to_dataview = (array: Uint8Array): DataView => new DataView(array.buffer, array.byteOffset, array.byteLength);
|
||||
|
||||
var u8str = (u8: Uint8Array): string => new TextDecoder().decode(u8);
|
||||
|
||||
var u8concat = (u8a: Uint8Array[]): Uint8Array => {
|
||||
var len = u8a.reduce((acc: number, x: Uint8Array) => acc + x.length, 0);
|
||||
var out = new Uint8Array(len);
|
||||
var off = 0;
|
||||
u8a.forEach(u8 => { out.set(u8, off); off += u8.length; });
|
||||
return out;
|
||||
};
|
||||
|
||||
var indent = (str: string, depth: number /* = 1 */): string => str.split(/\n/g).map(x => x && " ".repeat(depth) + x).join("\n");
|
||||
|
||||
function u8indexOf(u8: Uint8Array, data: string | number | Uint8Array, byteOffset?: number): number {
|
||||
//if(Buffer.isBuffer(u8)) return u8.indexOf(data, byteOffset);
|
||||
if(typeof data == "number") return u8.indexOf(data, byteOffset);
|
||||
var l = byteOffset;
|
||||
if(typeof data == "string") {
|
||||
outs: while((l = u8.indexOf(data.charCodeAt(0), l)) > -1) {
|
||||
++l;
|
||||
for(var j = 1; j < data.length; ++j) if(u8[l+j-1] != data.charCodeAt(j)) continue outs;
|
||||
return l - 1;
|
||||
}
|
||||
} else {
|
||||
outb: while((l = u8.indexOf(data[0], l)) > -1) {
|
||||
++l;
|
||||
for(var j = 1; j < data.length; ++j) if(u8[l+j-1] != data[j]) continue outb;
|
||||
return l - 1;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// #endregion
|
||||
|
||||
// #region proto.ts
|
||||
|
||||
type Ptr = [number];
|
||||
|
||||
/** Parse an integer from the varint that can be exactly stored in a double */
|
||||
function parse_varint49(buf: Uint8Array, ptr?: Ptr): number {
|
||||
var l = ptr ? ptr[0] : 0;
|
||||
var usz = buf[l] & 0x7F;
|
||||
varint: if(buf[l++] >= 0x80) {
|
||||
usz |= (buf[l] & 0x7F) << 7; if(buf[l++] < 0x80) break varint;
|
||||
usz |= (buf[l] & 0x7F) << 14; if(buf[l++] < 0x80) break varint;
|
||||
usz |= (buf[l] & 0x7F) << 21; if(buf[l++] < 0x80) break varint;
|
||||
usz += (buf[l] & 0x7F) * Math.pow(2, 28); ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += (buf[l] & 0x7F) * Math.pow(2, 35); ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += (buf[l] & 0x7F) * Math.pow(2, 42); ++l; if(buf[l++] < 0x80) break varint;
|
||||
}
|
||||
if(ptr) ptr[0] = l;
|
||||
return usz;
|
||||
}
|
||||
|
||||
function write_varint49(v: number): Uint8Array {
|
||||
var usz = new Uint8Array(7);
|
||||
usz[0] = (v & 0x7F);
|
||||
var L = 1;
|
||||
sz: if(v > 0x7F) {
|
||||
usz[L-1] |= 0x80; usz[L] = (v >> 7) & 0x7F; ++L;
|
||||
if(v <= 0x3FFF) break sz;
|
||||
usz[L-1] |= 0x80; usz[L] = (v >> 14) & 0x7F; ++L;
|
||||
if(v <= 0x1FFFFF) break sz;
|
||||
usz[L-1] |= 0x80; usz[L] = (v >> 21) & 0x7F; ++L;
|
||||
if(v <= 0xFFFFFFF) break sz;
|
||||
usz[L-1] |= 0x80; usz[L] = ((v/0x100) >>> 21) & 0x7F; ++L;
|
||||
if(v <= 0x7FFFFFFFF) break sz;
|
||||
usz[L-1] |= 0x80; usz[L] = ((v/0x10000) >>> 21) & 0x7F; ++L;
|
||||
if(v <= 0x3FFFFFFFFFF) break sz;
|
||||
usz[L-1] |= 0x80; usz[L] = ((v/0x1000000) >>> 21) & 0x7F; ++L;
|
||||
}
|
||||
return usz.slice(0, L);
|
||||
}
|
||||
|
||||
/** Parse a 32-bit signed integer from the raw varint */
|
||||
function varint_to_i32(buf: Uint8Array): number {
|
||||
var l = 0, i32 = buf[l] & 0x7F;
|
||||
varint: if(buf[l++] >= 0x80) {
|
||||
i32 |= (buf[l] & 0x7F) << 7; if(buf[l++] < 0x80) break varint;
|
||||
i32 |= (buf[l] & 0x7F) << 14; if(buf[l++] < 0x80) break varint;
|
||||
i32 |= (buf[l] & 0x7F) << 21; if(buf[l++] < 0x80) break varint;
|
||||
i32 |= (buf[l] & 0x7F) << 28;
|
||||
}
|
||||
return i32;
|
||||
}
|
||||
|
||||
interface ProtoItem {
|
||||
offset?: number;
|
||||
data: Uint8Array;
|
||||
type: number;
|
||||
}
|
||||
type ProtoField = Array<ProtoItem>
|
||||
type ProtoMessage = Array<ProtoField>;
|
||||
|
||||
/** Shallow parse of a message */
|
||||
function parse_shallow(buf: Uint8Array): ProtoMessage {
|
||||
var out: ProtoMessage = [], ptr: Ptr = [0];
|
||||
while(ptr[0] < buf.length) {
|
||||
var off = ptr[0];
|
||||
var num = parse_varint49(buf, ptr);
|
||||
var type = num & 0x07; num = Math.floor(num / 8);
|
||||
var len = 0;
|
||||
var res: Uint8Array;
|
||||
if(num == 0) break;
|
||||
switch(type) {
|
||||
case 0: {
|
||||
var l = ptr[0];
|
||||
while(buf[ptr[0]++] >= 0x80);
|
||||
res = buf.slice(l, ptr[0]);
|
||||
} break;
|
||||
case 5: len = 4; res = buf.slice(ptr[0], ptr[0] + len); ptr[0] += len; break;
|
||||
case 1: len = 8; res = buf.slice(ptr[0], ptr[0] + len); ptr[0] += len; break;
|
||||
case 2: len = parse_varint49(buf, ptr); res = buf.slice(ptr[0], ptr[0] + len); ptr[0] += len; break;
|
||||
case 3: // Start group
|
||||
case 4: // End group
|
||||
default: throw new Error(`PB Type ${type} for Field ${num} at offset ${off}`);
|
||||
}
|
||||
var v: ProtoItem = { offset: off, data: res, type };
|
||||
if(out[num] == null) out[num] = [v];
|
||||
else out[num].push(v);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/** Serialize a shallow parse */
|
||||
function write_shallow(proto: ProtoMessage): Uint8Array {
|
||||
var out: Uint8Array[] = [];
|
||||
proto.forEach((field, idx) => {
|
||||
field.forEach(item => {
|
||||
out.push(write_varint49(idx * 8 + item.type));
|
||||
out.push(item.data);
|
||||
});
|
||||
});
|
||||
return u8concat(out);
|
||||
}
|
||||
|
||||
function mappa<U>(data: ProtoField, cb:(_:Uint8Array) => U): U[] {
|
||||
if(!data) return [];
|
||||
return data.map((d) => { try {
|
||||
return cb(d.data);
|
||||
} catch(e) {
|
||||
var m = e.message?.match(/at offset (\d+)/);
|
||||
if(m) e.message = e.message.replace(/at offset (\d+)/, "at offset " + (+m[1] + (d.offset||0)));
|
||||
throw e;
|
||||
}});
|
||||
}
|
||||
|
||||
// #endregion
|
||||
|
||||
// #region descriptor.ts
|
||||
|
||||
var TYPES = [
|
||||
"error",
|
||||
"double",
|
||||
"float",
|
||||
"int64",
|
||||
"uint64",
|
||||
"int32",
|
||||
"fixed64",
|
||||
"fixed32",
|
||||
"bool",
|
||||
"string",
|
||||
"group",
|
||||
"message",
|
||||
"bytes",
|
||||
"uint32",
|
||||
"enum",
|
||||
"sfixed32",
|
||||
"sfixed64",
|
||||
"sint32",
|
||||
"sint64"
|
||||
];
|
||||
|
||||
|
||||
interface FileOptions {
|
||||
javaPackage?: string;
|
||||
javaOuterClassname?: string;
|
||||
javaMultipleFiles?: string;
|
||||
goPackage?: string;
|
||||
}
|
||||
function parse_FileOptions(buf: Uint8Array): FileOptions {
|
||||
var data = parse_shallow(buf);
|
||||
var out: FileOptions = {};
|
||||
if(data[1]?.[0]) out.javaPackage = u8str(data[1][0].data);
|
||||
if(data[8]?.[0]) out.javaOuterClassname = u8str(data[8][0].data);
|
||||
if(data[11]?.[0]) out.goPackage = u8str(data[11][0].data);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
interface EnumValue {
|
||||
name?: string;
|
||||
number?: number;
|
||||
}
|
||||
function parse_EnumValue(buf: Uint8Array): EnumValue {
|
||||
var data = parse_shallow(buf);
|
||||
var out: EnumValue = {};
|
||||
if(data[1]?.[0]) out.name = u8str(data[1][0].data);
|
||||
if(data[2]?.[0]) out.number = varint_to_i32(data[2][0].data);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
interface Enum {
|
||||
name?: string;
|
||||
value?: EnumValue[];
|
||||
}
|
||||
function parse_Enum(buf: Uint8Array): Enum {
|
||||
var data = parse_shallow(buf);
|
||||
var out: Enum = {};
|
||||
if(data[1]?.[0]) out.name = u8str(data[1][0].data);
|
||||
out.value = mappa(data[2], parse_EnumValue);
|
||||
return out;
|
||||
}
|
||||
var write_Enum = (en: Enum, pkg?: string): string => {
|
||||
var out = [`enum ${pkg ? `.${pkg}.` : ""}${en.name} {`];
|
||||
en.value?.forEach(({name, number}) => out.push(` ${name} = ${number};`));
|
||||
return out.concat(`}`).join("\n");
|
||||
};
|
||||
|
||||
|
||||
interface FieldOptions {
|
||||
packed?: boolean;
|
||||
deprecated?: boolean;
|
||||
}
|
||||
function parse_FieldOptions(buf: Uint8Array): FieldOptions {
|
||||
var data = parse_shallow(buf);
|
||||
var out: FieldOptions = {};
|
||||
if(data[2]?.[0]) out.packed = !!data[2][0].data;
|
||||
if(data[3]?.[0]) out.deprecated = !!data[3][0].data;
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
interface Field {
|
||||
name?: string;
|
||||
extendee?: string;
|
||||
number?: number;
|
||||
label?: number;
|
||||
type?: number;
|
||||
typeName?: string;
|
||||
defaultValue?: string;
|
||||
options?: FieldOptions;
|
||||
}
|
||||
function parse_Field(buf: Uint8Array): Field {
|
||||
var data = parse_shallow(buf);
|
||||
var out: Field = {};
|
||||
if(data[1]?.[0]) out.name = u8str(data[1][0].data);
|
||||
if(data[2]?.[0]) out.extendee = u8str(data[2][0].data);
|
||||
if(data[3]?.[0]) out.number = varint_to_i32(data[3][0].data);
|
||||
if(data[4]?.[0]) out.label = varint_to_i32(data[4][0].data);
|
||||
if(data[5]?.[0]) out.type = varint_to_i32(data[5][0].data);
|
||||
if(data[6]?.[0]) out.typeName = u8str(data[6][0].data);
|
||||
if(data[7]?.[0]) out.defaultValue = u8str(data[7][0].data);
|
||||
if(data[8]?.[0]) out.options = parse_FieldOptions(data[8][0].data);
|
||||
return out;
|
||||
}
|
||||
function write_Field(field: Field): string {
|
||||
var out = [];
|
||||
var label = ["", "optional ", "required ", "repeated "][field.label||0] || "";
|
||||
var type = field.typeName || TYPES[field.type||69] || "s5s";
|
||||
var opts = [];
|
||||
if(field.defaultValue) opts.push(`default = ${field.defaultValue}`);
|
||||
if(field.options?.packed) opts.push(`packed = true`);
|
||||
if(field.options?.deprecated) opts.push(`deprecated = true`);
|
||||
var os = opts.length ? ` [${opts.join(", ")}]`: "";
|
||||
out.push(`${label}${type} ${field.name} = ${field.number}${os};`);
|
||||
return out.length ? indent(out.join("\n"), 1) : "";
|
||||
}
|
||||
|
||||
|
||||
function write_extensions(ext: Field[], xtra = false, coalesce = true): string {
|
||||
var res: string[] = [];
|
||||
var xt: Array<[string, Array<Field>]> = [];
|
||||
ext.forEach(ext => {
|
||||
if(!ext.extendee) return;
|
||||
var row = coalesce ?
|
||||
xt.find(x => x[0] == ext.extendee) :
|
||||
(xt[xt.length - 1]?.[0] == ext.extendee ? xt[xt.length - 1]: null);
|
||||
if(row) row[1].push(ext);
|
||||
else xt.push([ext.extendee, [ext]]);
|
||||
});
|
||||
xt.forEach(extrow => {
|
||||
var out = [`extend ${extrow[0]} {`];
|
||||
extrow[1].forEach(ext => out.push(write_Field(ext)));
|
||||
res.push(out.concat(`}`).join("\n") + (xtra ? "\n" : ""));
|
||||
});
|
||||
return res.join("\n");
|
||||
}
|
||||
|
||||
|
||||
interface ExtensionRange { start?: number; end?: number; }
|
||||
interface MessageType {
|
||||
name?: string;
|
||||
nestedType?: MessageType[];
|
||||
enumType?: Enum[];
|
||||
field?: Field[];
|
||||
extension?: Field[];
|
||||
extensionRange?: ExtensionRange[];
|
||||
}
|
||||
function parse_mtype(buf: Uint8Array): MessageType {
|
||||
var data = parse_shallow(buf);
|
||||
var out: MessageType = {};
|
||||
if(data[1]?.[0]) out.name = u8str(data[1][0].data);
|
||||
if(data[2]?.length >= 1) out.field = mappa(data[2], parse_Field);
|
||||
if(data[3]?.length >= 1) out.nestedType = mappa(data[3], parse_mtype);
|
||||
if(data[4]?.length >= 1) out.enumType = mappa(data[4], parse_Enum);
|
||||
if(data[6]?.length >= 1) out.extension = mappa(data[6], parse_Field);
|
||||
if(data[5]?.length >= 1) out.extensionRange = data[5].map(d => {
|
||||
var data = parse_shallow(d.data);
|
||||
var out: ExtensionRange = {};
|
||||
if(data[1]?.[0]) out.start = varint_to_i32(data[1][0].data);
|
||||
if(data[2]?.[0]) out.end = varint_to_i32(data[2][0].data);
|
||||
return out;
|
||||
});
|
||||
return out;
|
||||
}
|
||||
var write_mtype = (message: MessageType, pkg?: string): string => {
|
||||
var out = [ `message ${pkg ? `.${pkg}.` : ""}${message.name} {` ];
|
||||
message.nestedType?.forEach(m => out.push(indent(write_mtype(m), 1)));
|
||||
message.enumType?.forEach(en => out.push(indent(write_Enum(en), 1)));
|
||||
message.field?.forEach(field => out.push(write_Field(field)));
|
||||
if(message.extensionRange) message.extensionRange.forEach(er => out.push(` extensions ${er.start} to ${(er.end||0) - 1};`));
|
||||
if(message.extension?.length) out.push(indent(write_extensions(message.extension), 1));
|
||||
return out.concat(`}`).join("\n");
|
||||
};
|
||||
|
||||
|
||||
interface Descriptor {
|
||||
name?: string;
|
||||
package?: string;
|
||||
dependency?: string[];
|
||||
messageType?: MessageType[];
|
||||
enumType?: Enum[];
|
||||
extension?: Field[];
|
||||
options?: FileOptions;
|
||||
}
|
||||
function parse_FileDescriptor(buf: Uint8Array): Descriptor {
|
||||
var data = parse_shallow(buf);
|
||||
var out: Descriptor = {};
|
||||
if(data[1]?.[0]) out.name = u8str(data[1][0].data);
|
||||
if(data[2]?.[0]) out.package = u8str(data[2][0].data);
|
||||
if(data[3]?.[0]) out.dependency = data[3].map(x => u8str(x.data));
|
||||
|
||||
if(data[4]?.length >= 1) out.messageType = mappa(data[4], parse_mtype);
|
||||
if(data[5]?.length >= 1) out.enumType = mappa(data[5], parse_Enum);
|
||||
if(data[7]?.length >= 1) out.extension = mappa(data[7], parse_Field);
|
||||
|
||||
if(data[8]?.[0]) out.options = parse_FileOptions(data[8][0].data);
|
||||
|
||||
return out;
|
||||
}
|
||||
var write_FileDescriptor = (pb: Descriptor): string => {
|
||||
var out = [
|
||||
// 'syntax = "proto2";',
|
||||
// ''
|
||||
];
|
||||
// if(pb.dependency) pb.dependency.forEach((n: string) => { if(n) out.push(`import "${n}";`); });
|
||||
// if(pb.package) out.push(`package ${pb.package};\n`);
|
||||
/* if(pb.options) {
|
||||
var o = out.length;
|
||||
|
||||
if(pb.options.javaPackage) out.push(`option java_package = "${pb.options.javaPackage}";`);
|
||||
if(pb.options.javaOuterClassname?.replace(/\W/g, "")) out.push(`option java_outer_classname = "${pb.options.javaOuterClassname}";`);
|
||||
if(pb.options.javaMultipleFiles) out.push(`option java_multiple_files = true;`);
|
||||
if(pb.options.goPackage) out.push(`option go_package = "${pb.options.goPackage}";`);
|
||||
|
||||
if(out.length > o) out.push('');
|
||||
}*/
|
||||
|
||||
pb.enumType?.forEach(en => { if(en.name) out.push(write_Enum(en, pb.package) + "\n"); });
|
||||
pb.messageType?.forEach(m => { if(m.name) { var o = write_mtype(m, pb.package); if(o) out.push(o + "\n"); }});
|
||||
|
||||
if(pb.extension?.length) {
|
||||
var e = write_extensions(pb.extension, true, false);
|
||||
if(e) out.push(e);
|
||||
}
|
||||
return out.join("\n") + "\n";
|
||||
};
|
||||
|
||||
// #endregion
|
||||
|
||||
// #region macho.ts
|
||||
|
||||
interface MachOEntry {
|
||||
type: number;
|
||||
subtype: number;
|
||||
offset: number;
|
||||
size: number;
|
||||
align?: number;
|
||||
data: Uint8Array;
|
||||
}
|
||||
var parse_fat = (buf: Uint8Array): MachOEntry[] => {
|
||||
var dv = u8_to_dataview(buf);
|
||||
if(dv.getUint32(0, false) !== 0xCAFEBABE) throw new Error("Unsupported file");
|
||||
var nfat_arch = dv.getUint32(4, false);
|
||||
var out: MachOEntry[] = [];
|
||||
for(var i = 0; i < nfat_arch; ++i) {
|
||||
var start = i * 20 + 8;
|
||||
|
||||
var cputype = dv.getUint32(start, false);
|
||||
var cpusubtype = dv.getUint32(start+4, false);
|
||||
var offset = dv.getUint32(start+8, false);
|
||||
var size = dv.getUint32(start+12, false);
|
||||
var align = dv.getUint32(start+16, false);
|
||||
|
||||
out.push({
|
||||
type: cputype,
|
||||
subtype: cpusubtype,
|
||||
offset,
|
||||
size,
|
||||
align,
|
||||
data: buf.slice(offset, offset + size)
|
||||
});
|
||||
}
|
||||
return out;
|
||||
};
|
||||
var parse_macho = (buf: Uint8Array): MachOEntry[] => {
|
||||
var dv = u8_to_dataview(buf);
|
||||
var magic = dv.getUint32(0, false);
|
||||
switch(magic) {
|
||||
// fat binary (x86_64 / aarch64)
|
||||
case 0xCAFEBABE: return parse_fat(buf);
|
||||
// x86_64
|
||||
case 0xCFFAEDFE: return [{
|
||||
type: dv.getUint32(4, false),
|
||||
subtype: dv.getUint32(8, false),
|
||||
offset: 0,
|
||||
size: buf.length,
|
||||
data: buf
|
||||
}];
|
||||
}
|
||||
throw new Error("Unsupported file");
|
||||
};
|
||||
|
||||
// #endregion
|
||||
|
||||
// #region otorp.ts
|
||||
|
||||
interface OtorpEntry {
|
||||
name: string;
|
||||
proto: string;
|
||||
}
|
||||
|
||||
/** Find and stringify all relevant protobuf defs */
|
||||
function otorp(buf: Uint8Array, builtins = false): OtorpEntry[] {
|
||||
var res = proto_offsets(buf);
|
||||
var registry: {[key: string]: Descriptor} = {};
|
||||
var names: Set<string> = new Set();
|
||||
var out: OtorpEntry[] = [];
|
||||
|
||||
res.forEach((r, i) => {
|
||||
if(!builtins && r[1].startsWith("google/protobuf/")) return;
|
||||
var b = buf.slice(r[0], i < res.length - 1 ? res[i+1][0] : buf.length);
|
||||
var pb = parse_FileDescriptorProto(b/*, r[1]*/);
|
||||
names.add(r[1]);
|
||||
registry[r[1]] = pb;
|
||||
});
|
||||
|
||||
names.forEach(name => {
|
||||
/* ensure partial ordering by dependencies */
|
||||
names.delete(name);
|
||||
var pb = registry[name];
|
||||
var doit = (pb.dependency||[]).every((d: string) => !names.has(d));
|
||||
if(!doit) { names.add(name); return; }
|
||||
|
||||
var dups = res.filter(r => r[1] == name);
|
||||
if(dups.length == 1) return out.push({ name, proto: write_FileDescriptor(pb) });
|
||||
|
||||
/* in a fat binary, compare the defs for x86_64/aarch64 */
|
||||
var pbs = dups.map(r => {
|
||||
var i = res.indexOf(r);
|
||||
var b = buf.slice(r[0], i < res.length - 1 ? res[i+1][0] : buf.length);
|
||||
var pb = parse_FileDescriptorProto(b/*, r[1]*/);
|
||||
return write_FileDescriptor(pb);
|
||||
});
|
||||
for(var l = 1; l < pbs.length; ++l) if(pbs[l] != pbs[0]) throw new Error(`Conflicting definitions for ${name} at offsets 0x${dups[0][0].toString(16)} and 0x${dups[l][0].toString(16)}`);
|
||||
return out.push({ name, proto: pbs[0] });
|
||||
});
|
||||
|
||||
return out;
|
||||
}
|
||||
export default otorp;
|
||||
|
||||
/** Determine if an address is being referenced */
|
||||
var is_referenced = (buf: Uint8Array, pos: number): boolean => {
|
||||
var dv = u8_to_dataview(buf);
|
||||
|
||||
/* Search for LEA reference (x86) */
|
||||
for(var leaddr = 0; leaddr > -1 && leaddr < pos; leaddr = u8indexOf(buf, 0x8D, leaddr + 1))
|
||||
if(dv.getUint32(leaddr + 2, true) == pos - leaddr - 6) return true;
|
||||
|
||||
/* Search for absolute reference to address */
|
||||
try {
|
||||
var headers = parse_macho(buf);
|
||||
for(var i = 0; i < headers.length; ++i) {
|
||||
if(pos < headers[i].offset || pos > headers[i].offset + headers[i].size) continue;
|
||||
var b = headers[i].data;
|
||||
var p = pos - headers[i].offset;
|
||||
var ref = new Uint8Array([0,0,0,0,0,0,0,0]);
|
||||
var dv = u8_to_dataview(ref);
|
||||
dv.setUint32(0, p, true);
|
||||
if(u8indexOf(b, ref, 0) > 0) return true;
|
||||
ref[4] = 0x01;
|
||||
if(u8indexOf(b, ref, 0) > 0) return true;
|
||||
ref[4] = 0x00; ref[6] = 0x10;
|
||||
if(u8indexOf(b, ref, 0) > 0) return true;
|
||||
}
|
||||
} catch(e) {throw e}
|
||||
return false;
|
||||
};
|
||||
|
||||
type OffsetList = Array<[number, string, number, number]>;
|
||||
/** Generate a list of potential starting points */
|
||||
var proto_offsets = (buf: Uint8Array): OffsetList => {
|
||||
var meta = parse_macho(buf);
|
||||
var out: OffsetList = [];
|
||||
var off = 0;
|
||||
/* note: this loop only works for names < 128 chars */
|
||||
search: while((off = u8indexOf(buf, ".proto", off + 1)) > -1) {
|
||||
var pos = off;
|
||||
off += 6;
|
||||
while(off - pos < 256 && buf[pos] != off - pos - 1) {
|
||||
if(buf[pos] > 0x7F || buf[pos] < 0x20) continue search;
|
||||
--pos;
|
||||
}
|
||||
if(off - pos > 250) continue;
|
||||
var name = u8str(buf.slice(pos + 1, off));
|
||||
if(buf[--pos] != 0x0A) continue;
|
||||
if(!is_referenced(buf, pos)) { console.error(`Reference to ${name} at ${pos} not found`); continue; }
|
||||
var bin = meta.find(m => m.offset <= pos && m.offset + m.size >= pos);
|
||||
out.push([pos, name, bin?.type || -1, bin?.subtype || -1]);
|
||||
}
|
||||
return out;
|
||||
};
|
||||
|
||||
/** Parse a descriptor that starts with the first byte of the supplied buffer */
|
||||
var parse_FileDescriptorProto = (buf: Uint8Array): Descriptor => {
|
||||
var l = buf.length;
|
||||
while(l > 0) try {
|
||||
var b = buf.slice(0,l);
|
||||
var o = parse_FileDescriptor(b);
|
||||
return o;
|
||||
} catch(e) {
|
||||
var m = e.message.match(/at offset (\d+)/);
|
||||
if(m && parseInt(m[1], 10) < buf.length) l = parseInt(m[1], 10) - 1;
|
||||
else --l;
|
||||
}
|
||||
throw new RangeError("no protobuf message in range");
|
||||
};
|
||||
|
||||
|
||||
// #endregion
|
||||
|
||||
let spin: TerminalSpinner;
|
||||
const width = Deno.consoleSize().columns;
|
||||
const seen: any = {};
|
||||
function process(inf: string, outf: string) {
|
||||
if(!inf) ["Numbers", "Keynote", "Pages"].forEach(app => {
|
||||
const inf = `/Applications/${app}.app`;
|
||||
for(let info of Deno.readDirSync(inf)) {
|
||||
if(spin) spin.set(inf.length > width - 4 ? "…" + inf.slice(-(width-4)) : inf);
|
||||
process(inf + (inf.slice(-1) == "/" ? "" : "/") + info.name, outf);
|
||||
}
|
||||
});
|
||||
else {
|
||||
const fi = Deno.statSync(inf);
|
||||
if(fi.isDirectory) for(let info of Deno.readDirSync(inf)) {
|
||||
if(spin) spin.set(inf.length > width - 4 ? "…" + inf.slice(-(width-4)) : inf);
|
||||
process(inf + (inf.slice(-1) == "/" ? "" : "/") + info.name, outf);
|
||||
}
|
||||
}
|
||||
try {
|
||||
const buf: Uint8Array = Deno.readFileSync(inf);
|
||||
var dv = u8_to_dataview(buf);
|
||||
var magic = dv.getUint32(0, false);
|
||||
if(![0xCAFEBABE, 0xCFFAEDFE].includes(magic)) return;
|
||||
|
||||
otorp(buf).forEach(({name, proto}) => {
|
||||
if(!outf) {
|
||||
/* NOTE: this logic assumes the protos do not conflict */
|
||||
if(seen[name]) { if(seen[name] != proto) throw new Error(name); return; }
|
||||
seen[name] = proto;
|
||||
return console.log(proto);
|
||||
}
|
||||
var pth = resolve(outf || "./", name.replace(/[/]/g, "$"));
|
||||
try {
|
||||
const str = Deno.readTextFileSync(pth);
|
||||
if(str == proto) return;
|
||||
throw `${pth} definition diverges!`;
|
||||
} catch(e) { if(typeof e == "string") throw e; }
|
||||
console.error(`writing ${name} to ${pth}`);
|
||||
Deno.writeTextFileSync(pth, proto);
|
||||
});
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
function doit() {
|
||||
const [ inf, outf ] = Deno.args;
|
||||
if(inf == "-h" || inf == "--help") {
|
||||
console.log(`usage: otorp.ts <path/to/bin> [output/folder]
|
||||
|
||||
if no output folder specified, log all discovered defs
|
||||
if output folder specified, attempt to write defs in the folder
|
||||
|
||||
$ otorp.ts /Applications/Numbers.app out/ # search all files
|
||||
$ otorp.ts /Applications/Numbers.app/Contents/MacOS/Numbers # search one file
|
||||
`);
|
||||
Deno.exit(1);
|
||||
}
|
||||
if(!inf || Deno.statSync(inf).isDirectory) (spin = new TerminalSpinner({ text: "", writer: Deno.stderr})).start();
|
||||
if(outf) try { Deno.mkdirSync(outf, { recursive: true }); } catch(e) {}
|
||||
process(inf, outf);
|
||||
if(spin) spin.stop();
|
||||
}
|
||||
doit();
|
39
package.json
Normal file
39
package.json
Normal file
@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "iwa-inspector",
|
||||
"author": "sheetjs",
|
||||
"private": true,
|
||||
"homepage": "https://sheetjs.com/tools/iwa-inspector",
|
||||
"license": "Apache-2.0",
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "tsc && vite build",
|
||||
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"cfb": "1.2.2",
|
||||
"printj": "1.3.1",
|
||||
"react": "18.2.0",
|
||||
"react-contexify": "6.0.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-inspector": "6.0.1",
|
||||
"react-resizable-panels": "0.0.45",
|
||||
"react-toastify": "9.1.3",
|
||||
"xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "18.2.6",
|
||||
"@types/react-dom": "18.2.4",
|
||||
"@typescript-eslint/eslint-plugin": "5.59.5",
|
||||
"@typescript-eslint/parser": "5.59.5",
|
||||
"@vitejs/plugin-react": "4.0.0",
|
||||
"eslint": "8.40.0",
|
||||
"eslint-plugin-react-hooks": "4.6.0",
|
||||
"eslint-plugin-react-refresh": "0.3.5",
|
||||
"typescript": "5.0.4",
|
||||
"vite": "4.3.5",
|
||||
"vite-plugin-pwa": "0.14.7"
|
||||
}
|
||||
}
|
14533
public/protos
Normal file
14533
public/protos
Normal file
File diff suppressed because it is too large
Load Diff
BIN
public/test.numbers
Executable file
BIN
public/test.numbers
Executable file
Binary file not shown.
52
src/App.css
Normal file
52
src/App.css
Normal file
@ -0,0 +1,52 @@
|
||||
html, body { width: 100vw; height: 100vh;}
|
||||
|
||||
#root {
|
||||
width: 100vw; height: 100vh;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.App {
|
||||
font-family: sans-serif;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
background: white;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.header {
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
max-width: 100%;
|
||||
position: sticky;
|
||||
box-shadow: 0 -5px 15px 0 #ced4da;
|
||||
background: white;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: calc(100vw - 10px);
|
||||
height: calc(100vh - 35px) !important;
|
||||
padding: 5px;
|
||||
max-width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.left { text-align: left;}
|
||||
.right { text-align: right;}
|
||||
|
||||
table { border-collapse: collapse;}
|
||||
td, th { padding-left: 2px; padding-right: 2px; }
|
||||
|
||||
.overflow {
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
359
src/App.tsx
Normal file
359
src/App.tsx
Normal file
@ -0,0 +1,359 @@
|
||||
/* TODO:
|
||||
- history
|
||||
- find example and correctly handle "merge" messages
|
||||
- messages referencing selected msg
|
||||
- sort and filter table
|
||||
- loading icons
|
||||
- expand referenced object in place
|
||||
- paste bytes -> analyze
|
||||
- edit fields / files?
|
||||
- different menu for message / enum / extend / literal
|
||||
*/
|
||||
import { useState, useEffect, useRef } from 'react';
|
||||
import type { MouseEvent as ReactMouseEvent, ChangeEventHandler, ChangeEvent } from 'react';
|
||||
import './App.css';
|
||||
import { ObjectInspector, ObjectLabel, ObjectName, ObjectValue } from 'react-inspector';
|
||||
import { PanelGroup, Panel, PanelResizeHandle } from 'react-resizable-panels';
|
||||
import { process, read, ParsedFile } from './iwa';
|
||||
import { parse_protos, ProtoMap } from './messages';
|
||||
import type { $_TSP_MessageInfo, $_TSP_Reference } from './messages';
|
||||
import { Menu, Item, Separator, useContextMenu } from 'react-contexify';
|
||||
import 'react-contexify/dist/ReactContexify.css';
|
||||
import { ToastContainer, toast } from 'react-toastify';
|
||||
import 'react-toastify/dist/ReactToastify.css';
|
||||
|
||||
//#region Xxd
|
||||
|
||||
//import { vsprintf } from 'printj';
|
||||
/*const X = "%02hhx", Y = X + X + " ";
|
||||
const FMT = [...Array.from({length:16}).map((_,i) =>
|
||||
Y.repeat(i>>1) + (i%2 ? X:" ") + " " + " ".repeat(7 - (i >> 1)) + "|" + "%c".repeat(i) + " ".repeat(16-i) + "|\n"
|
||||
), Y.repeat(8) + "|" + "%c".repeat(16) + "|\n"];
|
||||
|
||||
const xxd = (u8: Uint8Array): string => {
|
||||
let out: string[] = [];
|
||||
for(let i = 0; i < u8.length; i+=16) {
|
||||
let d = [...u8.slice(i, i+16)];
|
||||
out.push(vsprintf(`%04x: ${FMT[d.length]}`, [i, ...d, ...d.map(x => String.fromCharCode(x).replace(/[^\x20-\x7E]/g,"."))]))
|
||||
}
|
||||
return out.join("");
|
||||
}
|
||||
|
||||
type XxdProps = {
|
||||
data?: Uint8Array;
|
||||
};
|
||||
|
||||
function Xxd({data}: XxdProps) {
|
||||
return ( <pre>{data && xxd(data)}</pre> );
|
||||
}*/
|
||||
//<div className="proto"><Xxd data={id && file.space[+id]?.[0]?.data || void 0} /></div>
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region TableView
|
||||
|
||||
type TableViewProps = {
|
||||
id?: string;
|
||||
data: any[];
|
||||
cols: string[];
|
||||
rowclick?: (row: any, R: number, e: ReactMouseEvent<HTMLTableRowElement, MouseEvent>) => void;
|
||||
cellclick?: (value: any, R: number, C: number, e: ReactMouseEvent<HTMLTableCellElement, MouseEvent>) => void;
|
||||
};
|
||||
|
||||
function TableView({id, data, cols, rowclick, cellclick}: TableViewProps) {
|
||||
return (
|
||||
<table>
|
||||
<thead>
|
||||
<tr>{cols.map((c,idx) => (
|
||||
<th key={idx}>{c}</th>
|
||||
))}</tr>
|
||||
</thead>
|
||||
<tbody>{data.map((row, R) => (
|
||||
<tr id={`tr-${R}`} key={R}
|
||||
{...(rowclick ? {onClick: (e) => {e.preventDefault(); e.stopPropagation(); rowclick(row, R, e)}} : {})}
|
||||
{...(row["id"] == id ? {style: {backgroundColor: "#646cff", color: "#FFFFFF" }} : {})}
|
||||
>{/* TODO: forward-ref? */}
|
||||
{cols.map((c,C) => (<td key={`${R}-${C}`}
|
||||
{...(typeof row[c] == "string" ? {className: "left"} : {})}
|
||||
{...(typeof row[c] == "number" ? {className: "right"} : {})}
|
||||
{...(cellclick ? {onClick: (e) => {e.preventDefault(); e.stopPropagation(); cellclick(row, R, C, e)}} : {})}
|
||||
>{row[c]??""}</td>))}
|
||||
</tr>
|
||||
))}</tbody>
|
||||
</table>
|
||||
);
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
//#region ContextMenu
|
||||
|
||||
interface ContextMenuProps {
|
||||
ID: string;
|
||||
menuType: string;
|
||||
menuField: string;
|
||||
menuId: string;
|
||||
onClickId?: ({props}: any)=>void;
|
||||
onClickCopyByteArray?: ({props}: any)=>void;
|
||||
onClickCopyJSON: ({props}: any)=>void;
|
||||
showProtoDef: ({props}: any)=>void;
|
||||
}
|
||||
const ContextMenu = ({ID, menuType, menuField, menuId, onClickId, onClickCopyByteArray, onClickCopyJSON, showProtoDef}: ContextMenuProps) => (
|
||||
<Menu id={ID}>
|
||||
{menuField && (<Item disabled><b>{menuField}</b></Item>)}
|
||||
<Item disabled><b>{menuType}</b></Item>
|
||||
<Item hidden={()=>menuType != ".TSP.Reference"} onClick={onClickId}>Go to {menuId}</Item>
|
||||
<Separator />
|
||||
<Item onClick={onClickCopyByteArray}>Copy byte array</Item>
|
||||
<Item onClick={onClickCopyJSON}>Copy JSON</Item>
|
||||
<Item onClick={showProtoDef}>Show Definition</Item>
|
||||
</Menu> );
|
||||
|
||||
//#endregion
|
||||
|
||||
function App() {
|
||||
/* selected message ID */
|
||||
const [id, setId] = useState<string>("0");
|
||||
/* parsed file */
|
||||
const [file, setFile] = useState<ParsedFile>({ space: {}, tbl: [], type: "N" });
|
||||
/* current object */
|
||||
const [obj, setObj] = useState<any>({});
|
||||
/* current meta */
|
||||
const [meta, setMeta] = useState<$_TSP_MessageInfo>({} as any);
|
||||
/* protobuf definitions */
|
||||
const [protos, setProtos] = useState<ProtoMap>({});
|
||||
/* selected message type */
|
||||
const [sel, setSel] = useState<string>("");
|
||||
/* current protobuf definition */
|
||||
const [__html, setProto] = useState<string>("Select a Row");
|
||||
/* "dirty" if inspecting a subfield */
|
||||
const [dirty, setDirty] = useState<boolean>(false);
|
||||
/* history stack */
|
||||
const [stack, setStack] = useState<string[]>([]);
|
||||
/* react-contexify */
|
||||
const MENU_ID = "insp-menu";
|
||||
const { show } = useContextMenu({ id: MENU_ID });
|
||||
const [menuField, setMenuField] = useState<string>("");
|
||||
const [menuType, setMenuType] = useState<string>("");
|
||||
const [menuId, setMenuId] = useState<string>("");
|
||||
const tblRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
/* update selection based on table row */
|
||||
const doitRow = (row: any, R: number, reset?: boolean) => {
|
||||
let obj: any, meta: $_TSP_MessageInfo;
|
||||
try {
|
||||
obj = process(file.space[+row.id][0].data, row.message, protos);
|
||||
meta = process(file.space[+row.id][0].rawmeta, ".TSP.MessageInfo", protos);
|
||||
} catch(e) {
|
||||
console.error(row, e); toast.error(`Could not parse ${row.id} (${row.type})`, {position: toast.POSITION.TOP_CENTER}); return;
|
||||
}
|
||||
if(reset == true) setStack([]); else if(typeof reset != "undefined") setStack([...stack, id]);
|
||||
setSel(row.message);
|
||||
setProto(protos[row.message] || "");
|
||||
setDirty(false);
|
||||
setObj(obj);
|
||||
/* .TSP.MessageInfo */
|
||||
if(meta.object_references) meta.$object_references = meta.object_references.map((n: BigInt) => {
|
||||
/* create a fake reference for the inspector */
|
||||
var o: $_TSP_Reference = ({ identifier: n });
|
||||
Object.defineProperty(o, "PB_TYPE", {value: ".TSP.Reference", enumerable: false});
|
||||
return o;
|
||||
});
|
||||
if(meta.field_infos) meta.field_infos.forEach((fi) => {
|
||||
/* .TSP.FieldInfo */
|
||||
if(fi.object_references) fi.$object_references = fi.object_references.map((n: BigInt) => {
|
||||
/* create a fake reference for the inspector */
|
||||
var o: $_TSP_Reference = ({ identifier: n });
|
||||
Object.defineProperty(o, "PB_TYPE", {value: ".TSP.Reference", enumerable: false});
|
||||
return o;
|
||||
});
|
||||
})
|
||||
setMeta(meta);
|
||||
setId(String(row.id));
|
||||
var rowelt = document.getElementById(`tr-${R}`);
|
||||
var top = rowelt?.offsetTop || 0;
|
||||
if(tblRef.current) {
|
||||
let tbl = tblRef.current;
|
||||
if(top > tbl.scrollTop + tbl.clientHeight - (rowelt?.clientHeight||0) || top < tbl.scrollTop + (rowelt?.clientHeight||0)) tbl.scrollTop = Math.max(0, top - tbl.clientHeight/2 - (rowelt?.clientHeight||0)/2);
|
||||
}
|
||||
};
|
||||
/* click event handler for the messages table */
|
||||
const rowclick = (row: any, R: number) => { doitRow(row, R, true); };
|
||||
/* helper for .TSP.Reference */
|
||||
const gotoRef = (id: string) => {
|
||||
var R = file.tbl.findIndex(t => +t.id == +id);
|
||||
if (R == -1) throw new Error(`Message ${id} not found`);
|
||||
doitRow(file.tbl[R], R, false);
|
||||
};
|
||||
/* helper for selecting sub-proto */
|
||||
const selectProto = (type: string) => { setProto(protos[type] || ""); setDirty(type != sel); };
|
||||
/* go back to the previous message */
|
||||
const pop = () => {
|
||||
const oldId = stack.pop()||"0";
|
||||
setStack([...stack]);
|
||||
var R = file.tbl.findIndex(t => +t.id == +oldId);
|
||||
if (R == -1) throw new Error(`Message ${oldId} not found`);
|
||||
doitRow(file.tbl[R], R);
|
||||
};
|
||||
|
||||
/* on load, get protobuf definitions and process the test file */
|
||||
useEffect(() => {
|
||||
let ignore = false;
|
||||
(async () => {
|
||||
const protos = await (await fetch("protos")).text();
|
||||
const testfile = await (await fetch("test.numbers")).arrayBuffer();
|
||||
if(ignore) return;
|
||||
setProtos(parse_protos(protos));
|
||||
setFile(read(testfile));
|
||||
})();
|
||||
return () => { ignore = true; }
|
||||
}, []);
|
||||
useEffect(() => { if(file.tbl[0]) doitRow(file.tbl[0], 0, true); }, [file]);
|
||||
|
||||
const onChange: ChangeEventHandler<HTMLInputElement> = async (e: ChangeEvent<HTMLInputElement>) => {
|
||||
if(!e.target.files) { toast.error("must select a file!"); throw new Error("No file selected!"); }
|
||||
let data: ParsedFile;
|
||||
try { data = read(await e.target.files?.[0].arrayBuffer()); } catch(e) {
|
||||
if((e as any).message?.includes("Failed to read archive")) toast.error("Please select an iWork file", { position: toast.POSITION.TOP_CENTER });
|
||||
else toast.error(e && (e as any).message || e, { position: toast.POSITION.TOP_CENTER });
|
||||
console.error(e); return;
|
||||
}
|
||||
setFile(data);
|
||||
}
|
||||
|
||||
/* Menu machinations */
|
||||
interface MenuProps {
|
||||
type: string;
|
||||
field?: string;
|
||||
id: string;
|
||||
data: any;
|
||||
}
|
||||
function displayMenu(event: ReactMouseEvent, props?: MenuProps) {
|
||||
setMenuField(props?.field||"");
|
||||
setMenuType(props?.type||"");
|
||||
if(props?.id) setMenuId(String(props.id));
|
||||
show({ event, props });
|
||||
}
|
||||
function onClickId(){ gotoRef(menuId); }
|
||||
function onClickCopyByteArray({ props }: {props: MenuProps}){
|
||||
var _data = props?.data?.PB_RAW?.data || (+props.id == +id) && file.space[+id][0].data;
|
||||
if(!_data) throw new Error("Could not find raw data");
|
||||
navigator.clipboard.writeText("[" + [..._data].map(x => "0x" + x.toString(16).toUpperCase().padStart(2,"0")).join(", ") + "]");
|
||||
}
|
||||
function onClickCopyJSON({ props }: {props: MenuProps}){
|
||||
if(!props?.data) throw new Error("Could not find raw data");
|
||||
navigator.clipboard.writeText(JSON.stringify(props.data, (_,v) => typeof v == "bigint" ? v.toString() : v instanceof Uint8Array ? [...v]: v));
|
||||
}
|
||||
function showProtoDef({props}: {props: MenuProps}) { selectProto(props.type); }
|
||||
|
||||
type NodeRendererProps = {
|
||||
depth: number;
|
||||
name: string;
|
||||
data: any;
|
||||
isNonenumerable: boolean;
|
||||
expanded: boolean;
|
||||
}
|
||||
const nodeRenderer = ({ depth, name, data, isNonenumerable }: NodeRendererProps) => {
|
||||
if(depth === 0) return ( <b>Message {id} <a onClick={()=>{selectProto(sel);}} onContextMenu={e => {displayMenu(e, { type: sel, id, data })}}><b>[{sel}]</b></a></b> );
|
||||
if(typeof data == "bigint" && name.includes("identifier")) return ( <>
|
||||
<ObjectName name={name} />: <ObjectValue object={data} /> -> <a onClick={() => {gotoRef(String(data))}}><b>{String(data)}</b></a>
|
||||
</> );
|
||||
if(data.PB_TYPE) {
|
||||
const frag = ( <a onClick={() => {selectProto(data.PB_TYPE);}}>
|
||||
{data.PB_ENUM && <ObjectValue object={data.value} />}
|
||||
<b>{data.PB_ENUM && <> = {data.PB_ENUM}</>} [{data.PB_TYPE}]</b>
|
||||
</a> );
|
||||
if(data.PB_TYPE == ".TSP.Reference") {
|
||||
let id = String(data?.identifier);
|
||||
return ( <span onContextMenu={(e) => {displayMenu(e, { type: data.PB_TYPE, id, data, field: data.PB_FIELD })}}>
|
||||
<ObjectName name={name} />: <b>{frag} -> <a onClick={() => {gotoRef(id)}}><b>{id}</b></a></b>
|
||||
</span> );
|
||||
}
|
||||
return ( <span onContextMenu={(e) => {displayMenu(e, { type: data.PB_TYPE, id, data, field: data.PB_FIELD })}}>
|
||||
<ObjectName name={name} />: {frag}
|
||||
</span> );
|
||||
}
|
||||
return ( <ObjectLabel name={name} data={data} isNonenumerable={isNonenumerable} /> );
|
||||
};
|
||||
const metaRenderer = ({ depth, name, data, isNonenumerable }: NodeRendererProps) => {
|
||||
if(depth === 0) return ( <b>Metadata</b> );
|
||||
if(typeof data == "bigint" && name.includes("identifier")) return ( <>
|
||||
<ObjectName name={name} />: <ObjectValue object={data} /> -> <a onClick={() => {gotoRef(String(data))}}><b>{String(data)}</b></a>
|
||||
</> );
|
||||
if(data.PB_TYPE) {
|
||||
const frag = ( <a onClick={() => {selectProto(data.PB_TYPE);}}>
|
||||
{data.PB_ENUM && <ObjectValue object={data.value} />}
|
||||
<b>{data.PB_ENUM && <> = {data.PB_ENUM}</>} [{data.PB_TYPE}]</b>
|
||||
</a> );
|
||||
if(data.PB_TYPE == ".TSP.Reference") {
|
||||
let id = String(data?.identifier);
|
||||
return ( <span onContextMenu={(e) => {displayMenu(e, { type: data.PB_TYPE, id, data, field: data.PB_FIELD })}}>
|
||||
<ObjectName name={name} />: <b>{frag} -> <a onClick={() => {gotoRef(id)}}><b>{id}</b></a></b>
|
||||
</span> );
|
||||
}
|
||||
return ( <span onContextMenu={(e) => {displayMenu(e, { type: data.PB_TYPE, id, data, field: data.PB_FIELD })}}>
|
||||
<ObjectName name={name} />: {frag}
|
||||
</span> );
|
||||
}
|
||||
return ( <ObjectLabel name={name} data={data} isNonenumerable={isNonenumerable} /> );
|
||||
};
|
||||
|
||||
return ( <>
|
||||
{/* header */}
|
||||
<div id="header" className="header"><b><a href="https://sheetjs.com">SheetJS</a> IWA Inspector <input type="file" id="file" onChange={onChange} /></b></div>
|
||||
|
||||
<div className="page">
|
||||
<PanelGroup direction='vertical'>
|
||||
<Panel defaultSize={25}><div className="overflow" ref={tblRef}>
|
||||
|
||||
{/* message table */}
|
||||
<TableView data={file.tbl} cols={["id", "type", "message", "path"]} id={id} rowclick={rowclick} />
|
||||
|
||||
</div></Panel>
|
||||
<PanelResizeHandle style={{ height: "3px", backgroundColor: "#EEEEEE" }} />
|
||||
<Panel><div className="overflow">
|
||||
|
||||
{/* selected message bar */}
|
||||
<div style={{boxShadow: "0 2px 2px -1px rgba(0, 0, 0, 0.4)", height: "24px"}}>{sel ? (<>
|
||||
<b>Selected message {(stack.length > 4 ? [...stack.slice(0,2), "...", ...stack.slice(-1)] : stack).map(i => i + " > ").join("")} {id} ({sel}) {file.space[+id]?.[0]?.data?.length || 0} bytes {stack.length && <a onClick={pop}>Return to {stack[stack.length - 1]}</a> || ""}</b>
|
||||
</>) : "Select a message to see the contents"}</div>
|
||||
|
||||
<div style={{width: "100%", height: "calc(100% - 24px)", overflow: "auto"}}><PanelGroup direction='horizontal'>
|
||||
<Panel><div className='overflow'>
|
||||
|
||||
{/* proto definition */}
|
||||
<pre style={{textAlign: "left"}}>
|
||||
{dirty && (<><a onClick={() => { selectProto(sel);}}>Return to {sel}</a><br /><br /></>)}
|
||||
{__html.split("\n").map((r, idx) => ( <>{!r.match(/(optional|repeated|required) \./) ? (
|
||||
<span key={idx}>{r}</span>
|
||||
) : (
|
||||
<a key={idx} onClick={() => {selectProto(r.trim().split(" ")[1]);}}>{r}</a>
|
||||
)}<br/></> ))}
|
||||
</pre>
|
||||
|
||||
</div></Panel>
|
||||
<PanelResizeHandle style={{ width: "2px", backgroundColor: "#EEEEEE" }} />
|
||||
<Panel><div className="overflow" style={{textAlign: "left", marginTop: "13px", marginLeft: "10px", marginBottom: "13px"}}>
|
||||
|
||||
{/* inspector */}
|
||||
<b>Message</b>
|
||||
<ObjectInspector data={obj} expandLevel={1} nodeRenderer={nodeRenderer} />
|
||||
<b>Meta</b>
|
||||
<ObjectInspector data={meta} expandLevel={1} nodeRenderer={metaRenderer} />
|
||||
<div style={{height:"13px"}}></div>
|
||||
|
||||
</div></Panel>
|
||||
</PanelGroup></div>
|
||||
</div></Panel>
|
||||
</PanelGroup>
|
||||
|
||||
{/* Menu */}
|
||||
<ContextMenu ID={MENU_ID} menuField={menuField} menuType={menuType} menuId={menuId} onClickId={onClickId} onClickCopyByteArray={onClickCopyByteArray} onClickCopyJSON={onClickCopyJSON} showProtoDef={showProtoDef} />
|
||||
|
||||
{/* Toast */}
|
||||
<ToastContainer />
|
||||
</div>
|
||||
</> );
|
||||
}
|
||||
|
||||
export default App
|
69
src/index.css
Normal file
69
src/index.css
Normal file
@ -0,0 +1,69 @@
|
||||
:root {
|
||||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-weight: 400;
|
||||
|
||||
color-scheme: light dark;
|
||||
color: rgba(255, 255, 255, 0.87);
|
||||
background-color: #242424;
|
||||
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
color: #646cff;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
a:hover {
|
||||
color: #535bf2;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
place-items: center;
|
||||
min-width: 320px;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 8px;
|
||||
border: 1px solid transparent;
|
||||
padding: 0.6em 1.2em;
|
||||
font-size: 1em;
|
||||
font-weight: 500;
|
||||
font-family: inherit;
|
||||
background-color: #1a1a1a;
|
||||
cursor: pointer;
|
||||
transition: border-color 0.25s;
|
||||
}
|
||||
button:hover {
|
||||
border-color: #646cff;
|
||||
}
|
||||
button:focus,
|
||||
button:focus-visible {
|
||||
outline: 4px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
color: #213547;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
a:hover {
|
||||
color: #747bff;
|
||||
}
|
||||
button {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
}
|
411
src/iwa.ts
Normal file
411
src/iwa.ts
Normal file
@ -0,0 +1,411 @@
|
||||
import * as CFB from 'cfb';
|
||||
|
||||
import Messages, { MessageTypes } from "./messages/";
|
||||
|
||||
/* see https://bugs.webkit.org/show_bug.cgi?id=243148 -- affects iOS Safari */
|
||||
declare var Buffer: any; // Buffer is typeof-guarded but TS still needs this :(
|
||||
var subarray: "subarray" | "slice" = (() => {
|
||||
try {
|
||||
if(typeof Uint8Array == "undefined") return "slice";
|
||||
if(typeof Uint8Array.prototype.subarray == "undefined") return "slice";
|
||||
// NOTE: feature tests are for node < 6.x
|
||||
if(typeof Buffer !== "undefined") {
|
||||
if(typeof Buffer.prototype.subarray == "undefined") return "slice";
|
||||
if((typeof Buffer.from == "function" ? Buffer.from([72,62]) : new Buffer([72,62])) instanceof Uint8Array) return "subarray";
|
||||
return "slice";
|
||||
}
|
||||
return "subarray";
|
||||
} catch(e) { return "slice"; }
|
||||
})();
|
||||
|
||||
/** Concatenate Uint8Arrays */
|
||||
function u8concat(u8a: Uint8Array[]): Uint8Array {
|
||||
var len = 0;
|
||||
for(var i = 0; i < u8a.length; ++i) len += u8a[i].length;
|
||||
var out = new Uint8Array(len);
|
||||
var off = 0;
|
||||
for(i = 0; i < u8a.length; ++i) {
|
||||
var u8 = u8a[i], L = u8.length;
|
||||
if(L < 250) { for(var j = 0; j < L; ++j) out[off++] = u8[j]; }
|
||||
else { out.set(u8, off); off += L; }
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
interface Ptr { l: number; }
|
||||
|
||||
/** Parse an integer from the varint that can be exactly stored in a double */
|
||||
function parse_varint49(buf: Uint8Array, ptr: Ptr): number {
|
||||
var l = ptr.l;
|
||||
var usz = buf[l] & 0x7F;
|
||||
varint: if(buf[l++] >= 0x80) {
|
||||
usz |= (buf[l] & 0x7F) << 7; if(buf[l++] < 0x80) break varint;
|
||||
usz |= (buf[l] & 0x7F) << 14; if(buf[l++] < 0x80) break varint;
|
||||
usz |= (buf[l] & 0x7F) << 21; if(buf[l++] < 0x80) break varint;
|
||||
usz += (buf[l] & 0x7F) * Math.pow(2, 28); ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += (buf[l] & 0x7F) * Math.pow(2, 35); ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += (buf[l] & 0x7F) * Math.pow(2, 42); ++l; if(buf[l++] < 0x80) break varint;
|
||||
}
|
||||
ptr.l = l;
|
||||
return usz;
|
||||
}
|
||||
/** Parse a repeated varint [packed = true] field */
|
||||
function parse_packed_varints(buf: Uint8Array): number[] {
|
||||
var ptr: Ptr = {l: 0};
|
||||
var out: number[] = [];
|
||||
while(ptr.l < buf.length) out.push(parse_varint49(buf, ptr));
|
||||
return out;
|
||||
}
|
||||
/** Parse a BigInt from the varint */
|
||||
function parse_varint64(buf: Uint8Array, ptr: Ptr): BigInt {
|
||||
var l = ptr.l;
|
||||
var usz = BigInt(buf[l] & 0x7F);
|
||||
varint: if(buf[l++] >= 0x80) {
|
||||
usz += BigInt(buf[l] & 0x7F) << 7n; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 14n; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 21n; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 28n; ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 35n; ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 42n; ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 49n; ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 56n; ++l; if(buf[l++] < 0x80) break varint;
|
||||
usz += BigInt(buf[l] & 0x7F) << 63n; ++l; if(buf[l++] < 0x80) break varint;
|
||||
}
|
||||
ptr.l = l;
|
||||
return usz;
|
||||
}
|
||||
/** Parse a repeated varint [packed = true] field */
|
||||
function parse_packed_varint64(buf: Uint8Array): BigInt[] {
|
||||
var ptr: Ptr = {l: 0};
|
||||
var out: BigInt[] = [];
|
||||
while(ptr.l < buf.length) out.push(parse_varint64(buf, ptr));
|
||||
return out;
|
||||
}
|
||||
/** Parse a 32-bit signed integer from the raw varint */
|
||||
function varint_to_i32(buf: Uint8Array): number {
|
||||
var l = 0,
|
||||
i32 = (buf[l] & 0x7F) ; if(buf[l++] < 0x80) return i32;
|
||||
i32 |= (buf[l] & 0x7F) << 7; if(buf[l++] < 0x80) return i32;
|
||||
i32 |= (buf[l] & 0x7F) << 14; if(buf[l++] < 0x80) return i32;
|
||||
i32 |= (buf[l] & 0x7F) << 21; if(buf[l++] < 0x80) return i32;
|
||||
i32 |= (buf[l] & 0x0F) << 28; return i32;
|
||||
}
|
||||
/** Parse a 64-bit unsigned integer as a pair */
|
||||
function varint_to_u64(buf: Uint8Array): [number, number] {
|
||||
var l = 0, lo = buf[l] & 0x7F, hi = 0;
|
||||
varint: if(buf[l++] >= 0x80) {
|
||||
lo |= (buf[l] & 0x7F) << 7; if(buf[l++] < 0x80) break varint;
|
||||
lo |= (buf[l] & 0x7F) << 14; if(buf[l++] < 0x80) break varint;
|
||||
lo |= (buf[l] & 0x7F) << 21; if(buf[l++] < 0x80) break varint;
|
||||
lo |= (buf[l] & 0x7F) << 28; hi = (buf[l] >> 4) & 0x07; if(buf[l++] < 0x80) break varint;
|
||||
hi |= (buf[l] & 0x7F) << 3; if(buf[l++] < 0x80) break varint;
|
||||
hi |= (buf[l] & 0x7F) << 10; if(buf[l++] < 0x80) break varint;
|
||||
hi |= (buf[l] & 0x7F) << 17; if(buf[l++] < 0x80) break varint;
|
||||
hi |= (buf[l] & 0x7F) << 24; if(buf[l++] < 0x80) break varint;
|
||||
hi |= (buf[l] & 0x7F) << 31;
|
||||
}
|
||||
return [lo >>> 0, hi >>> 0];
|
||||
}
|
||||
export { varint_to_i32, varint_to_u64 };
|
||||
|
||||
interface ProtoItem {
|
||||
data: Uint8Array;
|
||||
type: number;
|
||||
}
|
||||
type ProtoField = Array<ProtoItem>;
|
||||
type ProtoMessage = Array<ProtoField>;
|
||||
interface IWAMessage {
|
||||
/** Metadata in .TSP.MessageInfo */
|
||||
meta: ProtoMessage;
|
||||
rawmeta: Uint8Array;
|
||||
data: Uint8Array;
|
||||
}
|
||||
interface IWAArchiveInfo {
|
||||
id: number;
|
||||
merge?: boolean;
|
||||
messages: IWAMessage[];
|
||||
}
|
||||
/** Shallow parse of a Protobuf message */
|
||||
function parse_shallow(buf: Uint8Array): ProtoMessage {
|
||||
var out: ProtoMessage = [], ptr: Ptr = {l: 0};
|
||||
while(ptr.l < buf.length) {
|
||||
var off = ptr.l;
|
||||
var num = parse_varint49(buf, ptr);
|
||||
var type = num & 0x07; num = (num / 8)|0;
|
||||
var data: Uint8Array;
|
||||
var l = ptr.l;
|
||||
switch(type) {
|
||||
case 0: {
|
||||
while(buf[l++] >= 0x80);
|
||||
data = buf[subarray](ptr.l, l);
|
||||
ptr.l = l;
|
||||
} break;
|
||||
case 1: { data = buf[subarray](l, l + 8); ptr.l = l + 8; } break;
|
||||
case 2: {
|
||||
var len = parse_varint49(buf, ptr);
|
||||
data = buf[subarray](ptr.l, ptr.l + len);
|
||||
ptr.l += len;
|
||||
} break;
|
||||
case 5: { data = buf[subarray](l, l + 4); ptr.l = l + 4; } break;
|
||||
default: throw new Error(`PB Type ${type} for Field ${num} at offset ${off}`);
|
||||
}
|
||||
var v: ProtoItem = { data, type };
|
||||
if(out[num] == null) out[num] = [];
|
||||
out[num].push(v);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/** Extract all messages from a IWA file */
|
||||
function parse_iwa_file(buf: Uint8Array): IWAArchiveInfo[] {
|
||||
var out: IWAArchiveInfo[] = [], ptr: Ptr = {l: 0};
|
||||
while(ptr.l < buf.length) {
|
||||
/* .TSP.ArchiveInfo */
|
||||
var len = parse_varint49(buf, ptr);
|
||||
var ai = parse_shallow(buf[subarray](ptr.l, ptr.l + len));
|
||||
ptr.l += len;
|
||||
|
||||
var res: IWAArchiveInfo = {
|
||||
/* TODO: technically ID is optional */
|
||||
id: varint_to_i32(ai[1][0].data),
|
||||
messages: []
|
||||
};
|
||||
ai[2].forEach(b => {
|
||||
var mi = parse_shallow(b.data);
|
||||
var fl = varint_to_i32(mi[3][0].data);
|
||||
res.messages.push({
|
||||
meta: mi,
|
||||
rawmeta: b.data,
|
||||
data: buf[subarray](ptr.l, ptr.l + fl)
|
||||
});
|
||||
ptr.l += fl;
|
||||
});
|
||||
if(ai[3]?.[0]) res.merge = (varint_to_i32(ai[3][0].data) >>> 0) > 0;
|
||||
out.push(res);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/** Decompress a snappy chunk */
|
||||
function parse_snappy_chunk(type: number, buf: Uint8Array): Uint8Array[] {
|
||||
if(type != 0) throw new Error(`Unexpected Snappy chunk type ${type}`);
|
||||
var ptr: Ptr = {l: 0};
|
||||
|
||||
var usz = parse_varint49(buf, ptr);
|
||||
var chunks: Uint8Array[] = [];
|
||||
var l = ptr.l;
|
||||
while(l < buf.length) {
|
||||
var tag = buf[l] & 0x3;
|
||||
if(tag == 0) {
|
||||
var len = buf[l++] >> 2;
|
||||
if(len < 60) ++len;
|
||||
else {
|
||||
var c = len - 59;
|
||||
len = buf[l];
|
||||
if(c > 1) len |= (buf[l+1]<<8);
|
||||
if(c > 2) len |= (buf[l+2]<<16);
|
||||
if(c > 3) len |= (buf[l+3]<<24);
|
||||
len >>>=0; len++;
|
||||
l += c;
|
||||
}
|
||||
chunks.push(buf[subarray](l, l + len)); l += len; continue;
|
||||
} else {
|
||||
var offset = 0, length = 0;
|
||||
if(tag == 1) {
|
||||
length = ((buf[l] >> 2) & 0x7) + 4;
|
||||
offset = (buf[l++] & 0xE0) << 3;
|
||||
offset |= buf[l++];
|
||||
} else {
|
||||
length = (buf[l++] >> 2) + 1;
|
||||
if(tag == 2) { offset = buf[l] | (buf[l+1]<<8); l += 2; }
|
||||
else { offset = (buf[l] | (buf[l+1]<<8) | (buf[l+2]<<16) | (buf[l+3]<<24))>>>0; l += 4; }
|
||||
}
|
||||
if(offset == 0) throw new Error("Invalid offset 0");
|
||||
var j = chunks.length - 1, off = offset;
|
||||
while(j >=0 && off >= chunks[j].length) { off -= chunks[j].length; --j; }
|
||||
if(j < 0) {
|
||||
if(off == 0) off = chunks[(j = 0)].length;
|
||||
else throw new Error("Invalid offset beyond length");
|
||||
}
|
||||
// Node 0.8 Buffer slice does not support negative indices
|
||||
if(length < off) chunks.push(chunks[j][subarray](chunks[j].length-off, chunks[j].length-off + length));
|
||||
else {
|
||||
if(off > 0) { chunks.push(chunks[j][subarray](chunks[j].length-off)); length -= off; } ++j;
|
||||
while(length >= chunks[j].length) { chunks.push(chunks[j]); length -= chunks[j].length; ++j; }
|
||||
if(length) chunks.push(chunks[j][subarray](0, length));
|
||||
}
|
||||
if(chunks.length > 25) chunks = [u8concat(chunks)];
|
||||
}
|
||||
}
|
||||
var clen = 0; for(var u8i = 0; u8i < chunks.length; ++u8i) clen += chunks[u8i].length;
|
||||
if(clen != usz) throw new Error(`Unexpected length: ${clen} != ${usz}`);
|
||||
return chunks;
|
||||
}
|
||||
|
||||
/** Decompress IWA file */
|
||||
function decompress_iwa_file(buf: Uint8Array): Uint8Array {
|
||||
if(Array.isArray(buf)) buf = new Uint8Array(buf);
|
||||
var out: Uint8Array[] = [];
|
||||
var l = 0;
|
||||
while(l < buf.length) {
|
||||
var t = buf[l++];
|
||||
var len = buf[l] | (buf[l+1]<<8) | (buf[l+2] << 16); l += 3;
|
||||
out.push.apply(out, parse_snappy_chunk(t, buf[subarray](l, l + len)));
|
||||
l += len;
|
||||
}
|
||||
if(l !== buf.length) throw new Error("data is not a valid framed stream!");
|
||||
return out.length == 1 ? out[0] : u8concat(out);
|
||||
}
|
||||
|
||||
type MessageSpace = {[id: number]: IWAMessage[]};
|
||||
type TableItem = { id: number; path: string; type: number; message: string; };
|
||||
|
||||
interface ParsedFile {
|
||||
space: MessageSpace;
|
||||
tbl: TableItem[];
|
||||
type: MessageTypes;
|
||||
}
|
||||
|
||||
function parse_iwa(cfb: CFB.CFB$Container): ParsedFile {
|
||||
var M: MessageSpace = {}, indices: number[] = [], tbl: TableItem[] = [];
|
||||
cfb.FullPaths.forEach(p => { if(p.match(/\.iwpv2/)) throw new Error(`Unsupported password protection`); });
|
||||
|
||||
var root!: TableItem, rootmsg!: IWAMessage;
|
||||
/* collect entire message space */
|
||||
cfb.FileIndex.forEach((s, idx) => {
|
||||
if(!s.name.match(/\.iwa$/)) return;
|
||||
if(s.content[0] != 0) return; // TODO: this should test if the iwa follows the framing format
|
||||
var o: Uint8Array;
|
||||
try { o = decompress_iwa_file(s.content as Uint8Array); } catch(e: any) { return console.log("?? " + s.content.length + " " + ((e as Error).message || e)); }
|
||||
var packets: IWAArchiveInfo[];
|
||||
try { packets = parse_iwa_file(o); } catch(e: any) { return console.log("## " + ((e as Error).message || e)); }
|
||||
packets.forEach(packet => { M[packet.id] = packet.messages; indices.push(packet.id);
|
||||
var type = varint_to_i32(packet.messages[0].meta[1][0].data);
|
||||
var item = {
|
||||
id: packet.id,
|
||||
type,
|
||||
path:cfb.FullPaths[idx].replace(/Root Entry/, ""),
|
||||
message: "??"
|
||||
};
|
||||
if(item.id == 1) { root = item; rootmsg = packet.messages[0]; }
|
||||
tbl.push(item);
|
||||
});
|
||||
});
|
||||
if(!indices.length) throw new Error("File has no messages");
|
||||
if(!root) throw new Error(`Root element (id 1) missing!`);
|
||||
var type: MessageTypes = "N";
|
||||
if(root.type == 10000) type = "P";
|
||||
else if(parse_shallow(rootmsg.data)?.[2]?.[0]) type = "K";
|
||||
|
||||
tbl.forEach(item => item.message = Messages[type][item.type] || "??");
|
||||
|
||||
return { space: M, tbl, type };
|
||||
}
|
||||
|
||||
function process_item(item: {data: Uint8Array; type: number}, type: string, protos: any) {
|
||||
switch(item.type) {
|
||||
case 0:
|
||||
var varint = parse_varint49(item.data, {l:0});
|
||||
switch(type) {
|
||||
case "bool": return !!+varint;
|
||||
case "uint32": return varint;
|
||||
case "int32": return varint | 0;
|
||||
case "sint32": return (-(varint&1))^(varint>>1);
|
||||
case "uint64": var u64 = varint_to_u64(item.data); return (BigInt(u64[1])<<32n) + BigInt(u64[0]);
|
||||
case "int64": var u64 = varint_to_u64(item.data); return new BigInt64Array([(BigInt(u64[1])<<32n) + BigInt(u64[0])])[0];
|
||||
case "sint64": var u64 = varint_to_u64(item.data); var bi = (BigInt(u64[1])<<32n) + BigInt(u64[0]); return (-(bi&1n))^(bi>>1n);
|
||||
} break;
|
||||
case 1: switch(type) {
|
||||
case "fixed64": return new BigUint64Array(new Uint8Array([...item.data]).buffer)[0];
|
||||
case "sfixed64": return new BigInt64Array(new Uint8Array([...item.data]).buffer)[0];
|
||||
case "double": return new Float64Array(new Uint8Array([...item.data]).buffer)[0];
|
||||
} break;
|
||||
case 2: switch(type) {
|
||||
case "string": return new TextDecoder().decode(item.data);
|
||||
case "bytes": return item.data;
|
||||
} break;
|
||||
case 5: switch(type) {
|
||||
case "float": return new Float32Array(new Uint8Array([...item.data]).buffer)[0];
|
||||
case "fixed32": return new Uint32Array(new Uint8Array([...item.data]).buffer)[0];
|
||||
case "sfixed32": return new Int32Array(new Uint8Array([...item.data]).buffer)[0];
|
||||
}
|
||||
}
|
||||
if(protos[type]) return process(item.data, type, protos);
|
||||
console.error(item);
|
||||
return item;
|
||||
}
|
||||
|
||||
function process_enum(data: Uint8Array, message: string, protos: any) {
|
||||
var val = parse_varint49(data, {l: 0});
|
||||
if(val >= 4294967296) val |= 0;
|
||||
var msg = protos[message].split("\n");
|
||||
for(let m of msg) {
|
||||
if(m.startsWith("enum")) continue;
|
||||
if(m.indexOf("=")> -1) {
|
||||
let [field, , value] = m.trim().split(" ");
|
||||
if(val == parseInt(value, 10)) {
|
||||
var res = {}
|
||||
Object.defineProperty(res, "value", { get: () => val});
|
||||
Object.defineProperty(res, "PB_ENUM", { value: field, enumerable: false})
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
throw [val, message, protos[message]];
|
||||
}
|
||||
|
||||
function process(data: Uint8Array, message: string, protos: any) {
|
||||
if(!protos[message]) return parse_shallow(data);
|
||||
var shallow = parse_shallow(data);
|
||||
var proto: string[] = protos[message].split("\n");
|
||||
var out: any = {};
|
||||
if(proto[0].startsWith("enum")) return process_enum(data, message, protos);
|
||||
proto.forEach(line => {
|
||||
if(!line.startsWith(" ") || line.indexOf("=") == -1 || line.startsWith(" ")) return;
|
||||
const [freq, type, name, , idx] = line.trim().split(/\s+/);
|
||||
var i = parseInt(idx, 10);
|
||||
if(isNaN(i)) return;
|
||||
if(!shallow[i]?.length) return;
|
||||
switch(freq) {
|
||||
case "repeated": {
|
||||
if(/packed\s*=\s*true/.test(line)) {
|
||||
/* these are the known types as of iwa 13.0 */
|
||||
switch(type) {
|
||||
case "uint32": out[name] = parse_packed_varints(shallow[i][0].data); break;
|
||||
case "uint64": out[name] = parse_packed_varint64(shallow[i][0].data); break;
|
||||
case "fixed64": out[name] = new BigUint64Array(new Uint8Array(shallow[i][0].data).buffer); break;
|
||||
default:
|
||||
console.log(shallow[i][0], line);
|
||||
throw new Error(`unsupported packed field of type ${type}`);
|
||||
}
|
||||
} else out[name] = shallow[i].map(item => protos[type]?.startsWith("enum") ? process_enum(item.data, type, protos) : process_item(item, type, protos));
|
||||
} break;
|
||||
case "required": case "optional": out[name] = protos[type]?.startsWith("enum") ? process_enum(shallow[i][0].data, type, protos) : process_item(shallow[i][0], type, protos); break
|
||||
default: throw `unsupported frequency ${freq}`;
|
||||
}
|
||||
if(type.startsWith(".")) {
|
||||
if(freq == "repeated") out[name].forEach((n: any) => {try { Object.defineProperty(n, "PB_TYPE", {value: type, enumerable: false}); } catch(e){}});
|
||||
else try { Object.defineProperty(out[name], "PB_TYPE", {value: type, enumerable: false}); } catch(e) {}
|
||||
}
|
||||
try {
|
||||
if(freq == "repeated") out[name].forEach((n: any, idx:number) => {try { Object.defineProperty(n, "PB_RAW", {value: shallow[i][idx], enumerable: false}); } catch(e){}});
|
||||
else try { Object.defineProperty(out[name], "PB_RAW", {value: shallow[i][0], enumerable: false}); } catch(e) {}
|
||||
} catch(e){console.log(e);}
|
||||
try {
|
||||
if(freq == "repeated") out[name].forEach((n: any, idx:number) => {try { Object.defineProperty(n, "PB_FIELD", {value: `${name}[${idx}]` , enumerable: false}); } catch(e){}});
|
||||
else try { Object.defineProperty(out[name], "PB_FIELD", {value: name, enumerable: false}); } catch(e) {}
|
||||
} catch(e){console.log(e);}
|
||||
})
|
||||
return out;
|
||||
}
|
||||
|
||||
function read(ab: ArrayBuffer): ParsedFile {
|
||||
let cfb: CFB.CFB$Container;
|
||||
try {
|
||||
cfb = CFB.read(new Uint8Array(ab), {type: "buffer"});
|
||||
} catch(e) { throw new Error(`Failed to read archive: |${e&&(e as any).message||e}|`); }
|
||||
return parse_iwa(cfb);
|
||||
}
|
||||
|
||||
export { parse_iwa, read, process }
|
||||
export type { MessageSpace, TableItem, ParsedFile };
|
10
src/main.tsx
Normal file
10
src/main.tsx
Normal file
@ -0,0 +1,10 @@
|
||||
import * as React from 'react'
|
||||
import * as ReactDOM from 'react-dom/client'
|
||||
import App from './App'
|
||||
import './index.css'
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
|
||||
<React.StrictMode>
|
||||
<App />
|
||||
</React.StrictMode>,
|
||||
)
|
95
src/messages/index.ts
Normal file
95
src/messages/index.ts
Normal file
@ -0,0 +1,95 @@
|
||||
type MessageTypes = "N" | "K" | "P";
|
||||
export type { MessageTypes };
|
||||
|
||||
type LUT = {[id: number|string]: string};
|
||||
|
||||
import N from "./numbers";
|
||||
import K from "./keynote";
|
||||
import P from "./pages";
|
||||
|
||||
const Messages: {[key in MessageTypes]: LUT} = { N, K, P };
|
||||
|
||||
export default Messages;
|
||||
|
||||
type ProtoMap = {[key: string]: string};
|
||||
|
||||
const post_process = (buf: string, key: string, out: ProtoMap) => {
|
||||
var payload = "", nested = false;
|
||||
buf.split("\n").forEach(row => {
|
||||
if(row.startsWith(" message") || row.startsWith(" enum")) {
|
||||
nested = true
|
||||
payload = row + "\n";
|
||||
} else if(row.startsWith(" }")) {
|
||||
payload += row + "\n";
|
||||
nested = false;
|
||||
payload = payload.replace(/^ /mg, "");
|
||||
var new_key = "";
|
||||
payload = payload.replace(/^(message|enum) ([\S]*)/, (_, $1, $2) => {
|
||||
new_key = key + "." + $2;
|
||||
return $1 + " " + key + "." + $2
|
||||
});
|
||||
out[new_key] = payload;
|
||||
payload = "";
|
||||
} else if(nested) payload += row + "\n";
|
||||
});
|
||||
};
|
||||
|
||||
const parse_protos = (text: string): ProtoMap => {
|
||||
const out: ProtoMap = {};
|
||||
let buf = "", key = "";
|
||||
text.split("\n").forEach(line => {
|
||||
if(line.startsWith("message") || line.startsWith("enum")) {
|
||||
key = line.split(" ")[1];
|
||||
buf = line + "\n";
|
||||
}
|
||||
else if(line.startsWith(" ")) buf += line + "\n";
|
||||
else if(line == "}") {
|
||||
buf += line;
|
||||
out[key] = buf;
|
||||
post_process(buf, key, out);
|
||||
}
|
||||
else if(!line){}
|
||||
else if(line.startsWith("extend")) {
|
||||
key = line.split(" ")[1];
|
||||
buf = out[key] + "\n" + line + "\n";
|
||||
}
|
||||
else throw line;
|
||||
});
|
||||
return out;
|
||||
};
|
||||
|
||||
export { parse_protos };
|
||||
export type { ProtoMap };
|
||||
|
||||
interface $_TSP_Reference {
|
||||
identifier: BigInt;
|
||||
}
|
||||
interface $_TSP_FieldPath {
|
||||
path?: number[];
|
||||
}
|
||||
interface $_TSP_FieldInfo {
|
||||
path: $_TSP_FieldPath;
|
||||
type?: number;
|
||||
unknown_field_rule?: number;
|
||||
object_references?: BigInt[];
|
||||
data_references?: BigInt[];
|
||||
known_field_rule?: number;
|
||||
known_field_version?: number[];
|
||||
known_field_feature_identifier?: string;
|
||||
$object_references?: $_TSP_Reference[];
|
||||
}
|
||||
interface $_TSP_MessageInfo {
|
||||
type: number;
|
||||
version: number[];
|
||||
length: number;
|
||||
field_infos?: $_TSP_FieldInfo[];
|
||||
object_references?: BigInt[];
|
||||
data_references?: BigInt[];
|
||||
base_message_index?: number;
|
||||
diff_merge_version?: number[];
|
||||
diff_field_path?: $_TSP_FieldPath;
|
||||
fields_to_remove?: $_TSP_FieldPath[];
|
||||
diff_read_version?: number[];
|
||||
$object_references?: $_TSP_Reference[];
|
||||
}
|
||||
export type { $_TSP_MessageInfo, $_TSP_Reference }
|
631
src/messages/keynote.ts
Normal file
631
src/messages/keynote.ts
Normal file
@ -0,0 +1,631 @@
|
||||
export default {
|
||||
1: ".KN.DocumentArchive",
|
||||
2: ".KN.ShowArchive",
|
||||
3: ".KN.UIStateArchive",
|
||||
4: ".KN.SlideNodeArchive",
|
||||
5: ".KN.SlideArchive",
|
||||
6: ".KN.SlideArchive",
|
||||
7: ".KN.PlaceholderArchive",
|
||||
8: ".KN.BuildArchive",
|
||||
9: ".KN.SlideStyleArchive",
|
||||
10: ".KN.ThemeArchive",
|
||||
11: ".KN.PasteboardNativeStorageArchive",
|
||||
12: ".KN.PlaceholderArchive",
|
||||
14: ".TSWP.TextualAttachmentArchive",
|
||||
15: ".KN.NoteArchive",
|
||||
16: ".KN.RecordingArchive",
|
||||
17: ".KN.RecordingEventTrackArchive",
|
||||
18: ".KN.RecordingMovieTrackArchive",
|
||||
19: ".KN.ClassicStylesheetRecordArchive",
|
||||
20: ".KN.ClassicThemeRecordArchive",
|
||||
21: ".KN.Soundtrack",
|
||||
22: ".KN.SlideNumberAttachmentArchive",
|
||||
23: ".KN.DesktopUILayoutArchive",
|
||||
24: ".KN.CanvasSelectionArchive",
|
||||
25: ".KN.SlideCollectionSelectionArchive",
|
||||
26: ".KN.MotionBackgroundStyleArchive",
|
||||
100: ".KN.CommandBuildSetValueArchive",
|
||||
101: ".KN.CommandShowInsertSlideArchive",
|
||||
102: ".KN.CommandShowMoveSlideArchive",
|
||||
103: ".KN.CommandShowRemoveSlideArchive",
|
||||
104: ".KN.CommandSlideInsertDrawablesArchive",
|
||||
105: ".KN.CommandSlideRemoveDrawableArchive",
|
||||
106: ".KN.CommandSlideNodeSetPropertyArchive",
|
||||
107: ".KN.CommandSlideInsertBuildArchive",
|
||||
109: ".KN.CommandSlideRemoveBuildArchive",
|
||||
110: ".KN.CommandSlideInsertBuildChunkArchive",
|
||||
111: ".KN.CommandSlideMoveBuildChunksArchive",
|
||||
112: ".KN.CommandSlideRemoveBuildChunkArchive",
|
||||
114: ".KN.CommandTransitionSetValueArchive",
|
||||
118: ".KN.CommandSlideMoveDrawableZOrderArchive",
|
||||
119: ".KN.CommandChangeTemplateSlideArchive",
|
||||
123: ".KN.CommandShowSetSlideNumberVisibilityArchive",
|
||||
124: ".KN.CommandShowSetValueArchive",
|
||||
128: ".KN.CommandShowMarkOutOfSyncRecordingArchive",
|
||||
129: ".KN.CommandShowRemoveRecordingArchive",
|
||||
130: ".KN.CommandShowReplaceRecordingArchive",
|
||||
131: ".KN.CommandShowSetSoundtrack",
|
||||
132: ".KN.CommandSoundtrackSetValue",
|
||||
134: ".KN.CommandMoveTemplatesArchive",
|
||||
135: ".KN.CommandInsertTemplateArchive",
|
||||
136: ".KN.CommandSlideSetStyleArchive",
|
||||
137: ".KN.CommandSlideSetPlaceholdersForTagsArchive",
|
||||
138: ".KN.CommandBuildChunkSetValueArchive",
|
||||
140: ".KN.CommandRemoveTemplateArchive",
|
||||
142: ".KN.CommandTemplateSetThumbnailTextArchive",
|
||||
143: ".KN.CommandShowChangeThemeArchive",
|
||||
144: ".KN.CommandSlidePrimitiveSetTemplateArchive",
|
||||
145: ".KN.CommandTemplateSetBodyStylesArchive",
|
||||
146: ".KNSOS.CommandSlideReapplyTemplateSlideArchive",
|
||||
148: ".KN.ChartInfoGeometryCommandArchive",
|
||||
150: ".KN.CommandSlideUpdateTemplateDrawables",
|
||||
152: ".KN.CommandSlideSetBackgroundFillArchive",
|
||||
153: ".KN.BuildChunkArchive",
|
||||
156: ".KN.CommandSlideNodeSetViewStatePropertyArchive",
|
||||
157: ".KN.CommandBuildUpdateChunkCountArchive",
|
||||
158: ".KN.CommandBuildUpdateChunkReferentsArchive",
|
||||
159: ".KN.BuildAttributeTupleArchive",
|
||||
160: ".KN.CommandSetThemeCustomEffectTimingCurveArchive",
|
||||
161: ".KN.CommandShowChangeSlideSizeArchive",
|
||||
162: ".KN.InsertBuildDescriptionArchive",
|
||||
163: ".KN.RemoveBuildDescriptionArchive",
|
||||
164: ".KN.DocumentSelectionTransformerArchive",
|
||||
165: ".KN.SlideCollectionSelectionTransformerArchive",
|
||||
166: ".KN.OutlineCanvasSelectionTransformerArchive",
|
||||
167: ".KN.NoteCanvasSelectionTransformerArchive",
|
||||
168: ".KN.CanvasSelectionTransformerArchive",
|
||||
169: ".KN.OutlineSelectionTransformerArchive",
|
||||
170: ".KN.UndoObjectArchive",
|
||||
172: ".KN.PrototypeForUndoTemplateChangeArchive",
|
||||
173: ".KN.CommandShowMarkOutOfSyncRecordingIfNeededArchive",
|
||||
174: ".KNSOS.InducedVerifyDocumentWithServerCommandArchive",
|
||||
175: ".KNSOS.InducedVerifyDrawableZOrdersWithServerCommandArchive",
|
||||
176: ".KN.CommandPrimitiveInsertTemplateArchive",
|
||||
177: ".KN.CommandPrimitiveRemoveTemplateArchive",
|
||||
178: ".KN.CommandTemplateSlideSetPlaceholderForTagArchive",
|
||||
179: ".KN.CommandSlidePropagateSetPlaceholderForTagArchive",
|
||||
180: ".KN.ActionGhostSelectionArchive",
|
||||
181: ".KN.ActionGhostSelectionTransformerArchive",
|
||||
182: ".KN.CommandSlideResetTemplateBackgroundObjectsArchive",
|
||||
184: ".KN.LiveVideoSource",
|
||||
185: ".KN.LiveVideoSourceCollection",
|
||||
186: ".KN.CommandLiveVideoInfoApplyPreset",
|
||||
187: ".KN.CommandLiveVideoInfoSetSource",
|
||||
188: ".KN.CommandLiveVideoInfoSetValue",
|
||||
189: ".KN.CommandLiveVideoSourceSetValue",
|
||||
190: ".KN.CommandLiveVideoStyleSetValue",
|
||||
191: ".KN.CommandThemeAddLiveVideoSource",
|
||||
192: ".KN.CommandThemeRemoveLiveVideoSource",
|
||||
194: ".KN.CommandMotionBackgroundStyleSetValueArchive",
|
||||
195: ".KN.CommandMotionBackgroundStyleUpdatePosterFrameDataArchive",
|
||||
200: ".TSK.DocumentArchive",
|
||||
201: ".TSK.LocalCommandHistory",
|
||||
202: ".TSK.CommandGroupArchive",
|
||||
203: ".TSK.CommandContainerArchive",
|
||||
205: ".TSK.TreeNode",
|
||||
210: ".TSK.ViewStateArchive",
|
||||
211: ".TSK.DocumentSupportArchive",
|
||||
212: ".TSK.AnnotationAuthorArchive",
|
||||
213: ".TSK.AnnotationAuthorStorageArchive",
|
||||
215: ".TSK.SetAnnotationAuthorColorCommandArchive",
|
||||
218: ".TSK.CollaborationCommandHistory",
|
||||
219: ".TSK.DocumentSelectionArchive",
|
||||
220: ".TSK.CommandSelectionBehaviorArchive",
|
||||
221: ".TSK.NullCommandArchive",
|
||||
222: ".TSK.CustomFormatListArchive",
|
||||
223: ".TSK.GroupCommitCommandArchive",
|
||||
224: ".TSK.InducedCommandCollectionArchive",
|
||||
225: ".TSK.InducedCommandCollectionCommitCommandArchive",
|
||||
226: ".TSK.CollaborationDocumentSessionState",
|
||||
227: ".TSK.CollaborationCommandHistoryCoalescingGroup",
|
||||
228: ".TSK.CollaborationCommandHistoryCoalescingGroupNode",
|
||||
229: ".TSK.CollaborationCommandHistoryOriginatingCommandAcknowledgementObserver",
|
||||
230: ".TSK.DocumentSupportCollaborationState",
|
||||
231: ".TSK.ChangeDocumentPackageTypeCommandArchive",
|
||||
232: ".TSK.UpgradeDocPostProcessingCommandArchive",
|
||||
233: ".TSK.FinalCommandPairArchive",
|
||||
234: ".TSK.OutgoingCommandQueueItem",
|
||||
235: ".TSK.TransformerEntry",
|
||||
238: ".TSK.CreateLocalStorageSnapshotCommandArchive",
|
||||
240: ".TSK.SelectionPathTransformerArchive",
|
||||
241: ".TSK.NativeContentDescription",
|
||||
242: ".TSD.PencilAnnotationStorageArchive",
|
||||
245: ".TSK.OperationStorage",
|
||||
246: ".TSK.OperationStorageEntryArray",
|
||||
247: ".TSK.OperationStorageEntryArraySegment",
|
||||
248: ".TSK.BlockDiffsAtCurrentRevisionCommand",
|
||||
249: ".TSK.OutgoingCommandQueue",
|
||||
250: ".TSK.OutgoingCommandQueueSegment",
|
||||
251: ".TSK.PropagatedCommandCollectionArchive",
|
||||
252: ".TSK.LocalCommandHistoryItem",
|
||||
253: ".TSK.LocalCommandHistoryArray",
|
||||
254: ".TSK.LocalCommandHistoryArraySegment",
|
||||
255: ".TSK.CollaborationCommandHistoryItem",
|
||||
256: ".TSK.CollaborationCommandHistoryArray",
|
||||
257: ".TSK.CollaborationCommandHistoryArraySegment",
|
||||
258: ".TSK.PencilAnnotationUIState",
|
||||
259: ".TSKSOS.FixCorruptedDataCommandArchive",
|
||||
260: ".TSK.CommandAssetChunkArchive",
|
||||
261: ".TSK.AssetUploadStatusCommandArchive",
|
||||
262: ".TSK.AssetUnmaterializedOnServerCommandArchive",
|
||||
263: ".TSK.CommandBehaviorArchive",
|
||||
264: ".TSK.CommandBehaviorSelectionPathStorageArchive",
|
||||
265: ".TSK.CommandActivityBehaviorArchive",
|
||||
273: ".TSK.ActivityOnlyCommandArchive",
|
||||
275: ".TSK.SetActivityAuthorShareParticipantIDCommandArchive",
|
||||
279: ".TSK.ActivityAuthorCacheArchive",
|
||||
280: ".TSK.ActivityStreamArchive",
|
||||
281: ".TSK.ActivityArchive",
|
||||
282: ".TSK.ActivityCommitCommandArchive",
|
||||
283: ".TSK.ActivityStreamActivityArray",
|
||||
284: ".TSK.ActivityStreamActivityArraySegment",
|
||||
285: ".TSK.ActivityStreamRemovedAuthorAuditorPendingStateArchive",
|
||||
286: ".TSK.ActivityAuthorArchive",
|
||||
287: ".TSKSOS.ResetActivityStreamCommandArchive",
|
||||
288: ".TSKSOS.RemoveAuthorIdentifiersCommandArchive",
|
||||
289: ".TSK.ActivityCursorCollectionPersistenceWrapperArchive",
|
||||
400: ".TSS.StyleArchive",
|
||||
401: ".TSS.StylesheetArchive",
|
||||
402: ".TSS.ThemeArchive",
|
||||
412: ".TSS.StyleUpdatePropertyMapCommandArchive",
|
||||
413: ".TSS.ThemeReplacePresetCommandArchive",
|
||||
414: ".TSS.ThemeAddStylePresetCommandArchive",
|
||||
415: ".TSS.ThemeRemoveStylePresetCommandArchive",
|
||||
416: ".TSS.ThemeReplaceColorPresetCommandArchive",
|
||||
417: ".TSS.ThemeMovePresetCommandArchive",
|
||||
419: ".TSS.ThemeReplaceStylePresetAndDisconnectStylesCommandArchive",
|
||||
600: ".TSA.DocumentArchive",
|
||||
601: ".TSA.FunctionBrowserStateArchive",
|
||||
602: ".TSA.PropagatePresetCommandArchive",
|
||||
603: ".TSA.ShortcutControllerArchive",
|
||||
604: ".TSA.ShortcutCommandArchive",
|
||||
605: ".TSA.AddCustomFormatCommandArchive",
|
||||
606: ".TSA.UpdateCustomFormatCommandArchive",
|
||||
607: ".TSA.ReplaceCustomFormatCommandArchive",
|
||||
611: ".TSASOS.VerifyObjectsWithServerCommandArchive",
|
||||
612: ".TSA.InducedVerifyObjectsWithServerCommandArchive",
|
||||
613: ".TSASOS.VerifyDocumentWithServerCommandArchive",
|
||||
614: ".TSASOS.VerifyDrawableZOrdersWithServerCommandArchive",
|
||||
615: ".TSASOS.InducedVerifyDrawableZOrdersWithServerCommandArchive",
|
||||
616: ".TSA.NeedsMediaCompatibilityUpgradeCommandArchive",
|
||||
617: ".TSA.ChangeDocumentLocaleCommandArchive",
|
||||
618: ".TSA.StyleUpdatePropertyMapCommandArchive",
|
||||
619: ".TSA.RemoteDataChangeCommandArchive",
|
||||
623: ".TSA.GalleryItem",
|
||||
624: ".TSA.GallerySelectionTransformer",
|
||||
625: ".TSA.GalleryItemSelection",
|
||||
626: ".TSA.GalleryItemSelectionTransformer",
|
||||
627: ".TSA.GalleryInfoSetValueCommandArchive",
|
||||
628: ".TSA.GalleryItemSetGeometryCommand",
|
||||
629: ".TSA.GalleryItemSetValueCommand",
|
||||
630: ".TSA.InducedVerifyTransformHistoryWithServerCommandArchive",
|
||||
631: ".TSASOS.CommandReapplyMasterArchive",
|
||||
632: ".TSASOS.PropagateMasterChangeCommandArchive",
|
||||
633: ".TSA.CaptionInfoArchive",
|
||||
634: ".TSA.CaptionPlacementArchive",
|
||||
635: ".TSA.TitlePlacementCommandArchive",
|
||||
636: ".TSA.GalleryInfoInsertItemsCommandArchive",
|
||||
637: ".TSA.GalleryInfoRemoveItemsCommandArchive",
|
||||
638: ".TSASOS.VerifyActivityStreamWithServerCommandArchive",
|
||||
639: ".TSASOS.InducedVerifyActivityStreamWithServerCommandArchive",
|
||||
2001: ".TSWP.StorageArchive",
|
||||
2002: ".TSWP.SelectionArchive",
|
||||
2003: ".TSWP.DrawableAttachmentArchive",
|
||||
2004: ".TSWP.TextualAttachmentArchive",
|
||||
2005: ".TSWP.StorageArchive",
|
||||
2006: ".TSWP.UIGraphicalAttachment",
|
||||
2007: ".TSWP.TextualAttachmentArchive",
|
||||
2008: ".TSWP.FootnoteReferenceAttachmentArchive",
|
||||
2009: ".TSWP.TextualAttachmentArchive",
|
||||
2010: ".TSWP.TSWPTOCPageNumberAttachmentArchive",
|
||||
2011: ".TSWP.ShapeInfoArchive",
|
||||
2013: ".TSWP.HighlightArchive",
|
||||
2014: ".TSWP.CommentInfoArchive",
|
||||
2015: ".TSWP.EquationInfoArchive",
|
||||
2016: ".TSWP.PencilAnnotationArchive",
|
||||
2021: ".TSWP.CharacterStyleArchive",
|
||||
2022: ".TSWP.ParagraphStyleArchive",
|
||||
2023: ".TSWP.ListStyleArchive",
|
||||
2024: ".TSWP.ColumnStyleArchive",
|
||||
2025: ".TSWP.ShapeStyleArchive",
|
||||
2026: ".TSWP.TOCEntryStyleArchive",
|
||||
2031: ".TSWP.PlaceholderSmartFieldArchive",
|
||||
2032: ".TSWP.HyperlinkFieldArchive",
|
||||
2033: ".TSWP.FilenameSmartFieldArchive",
|
||||
2034: ".TSWP.DateTimeSmartFieldArchive",
|
||||
2035: ".TSWP.BookmarkFieldArchive",
|
||||
2036: ".TSWP.MergeSmartFieldArchive",
|
||||
2037: ".TSWP.CitationRecordArchive",
|
||||
2038: ".TSWP.CitationSmartFieldArchive",
|
||||
2039: ".TSWP.UnsupportedHyperlinkFieldArchive",
|
||||
2040: ".TSWP.BibliographySmartFieldArchive",
|
||||
2041: ".TSWP.TOCSmartFieldArchive",
|
||||
2042: ".TSWP.RubyFieldArchive",
|
||||
2043: ".TSWP.NumberAttachmentArchive",
|
||||
2050: ".TSWP.TextStylePresetArchive",
|
||||
2051: ".TSWP.TOCSettingsArchive",
|
||||
2052: ".TSWP.TOCEntryInstanceArchive",
|
||||
2053: ".TSWPSOS.StyleDiffArchive",
|
||||
2060: ".TSWP.ChangeArchive",
|
||||
2061: ".TSK.DeprecatedChangeAuthorArchive",
|
||||
2062: ".TSWP.ChangeSessionArchive",
|
||||
2101: ".TSWP.TextCommandArchive",
|
||||
2107: ".TSWP.ApplyPlaceholderTextCommandArchive",
|
||||
2116: ".TSWP.ApplyRubyTextCommandArchive",
|
||||
2118: ".TSWP.ModifyRubyTextCommandArchive",
|
||||
2119: ".TSWP.UpdateDateTimeFieldCommandArchive",
|
||||
2120: ".TSWP.ModifyTOCSettingsBaseCommandArchive",
|
||||
2121: ".TSWP.ModifyTOCSettingsForTOCInfoCommandArchive",
|
||||
2123: ".TSWP.SetObjectPropertiesCommandArchive",
|
||||
2124: ".TSWP.UpdateFlowInfoCommandArchive",
|
||||
2125: ".TSWP.AddFlowInfoCommandArchive",
|
||||
2126: ".TSWP.RemoveFlowInfoCommandArchive",
|
||||
2127: ".TSWP.ContainedObjectsCommandArchive",
|
||||
2128: ".TSWP.EquationInfoGeometryCommandArchive",
|
||||
2206: ".TSWP.AnchorAttachmentCommandArchive",
|
||||
2217: ".TSWP.TextCommentReplyCommandArchive",
|
||||
2231: ".TSWP.ShapeApplyPresetCommandArchive",
|
||||
2240: ".TSWP.TOCInfoArchive",
|
||||
2241: ".TSWP.TOCAttachmentArchive",
|
||||
2242: ".TSWP.TOCLayoutHintArchive",
|
||||
2400: ".TSWP.StyleBaseCommandArchive",
|
||||
2401: ".TSWP.StyleCreateCommandArchive",
|
||||
2402: ".TSWP.StyleRenameCommandArchive",
|
||||
2404: ".TSWP.StyleDeleteCommandArchive",
|
||||
2405: ".TSWP.StyleReorderCommandArchive",
|
||||
2406: ".TSWP.StyleUpdatePropertyMapCommandArchive",
|
||||
2407: ".TSWP.StorageActionCommandArchive",
|
||||
2408: ".TSWP.ShapeStyleSetValueCommandArchive",
|
||||
2409: ".TSWP.HyperlinkSelectionArchive",
|
||||
2410: ".TSWP.FlowInfoArchive",
|
||||
2411: ".TSWP.FlowInfoContainerArchive",
|
||||
2412: ".TSWP.PencilAnnotationSelectionTransformerArchive",
|
||||
3002: ".TSD.DrawableArchive",
|
||||
3003: ".TSD.ContainerArchive",
|
||||
3004: ".TSD.ShapeArchive",
|
||||
3005: ".TSD.ImageArchive",
|
||||
3006: ".TSD.MaskArchive",
|
||||
3007: ".TSD.MovieArchive",
|
||||
3008: ".TSD.GroupArchive",
|
||||
3009: ".TSD.ConnectionLineArchive",
|
||||
3015: ".TSD.ShapeStyleArchive",
|
||||
3016: ".TSD.MediaStyleArchive",
|
||||
3021: ".TSD.InfoGeometryCommandArchive",
|
||||
3022: ".TSD.DrawablePathSourceCommandArchive",
|
||||
3024: ".TSD.ImageMaskCommandArchive",
|
||||
3025: ".TSD.ImageMediaCommandArchive",
|
||||
3026: ".TSD.ImageReplaceCommandArchive",
|
||||
3027: ".TSD.MediaOriginalSizeCommandArchive",
|
||||
3028: ".TSD.ShapeStyleSetValueCommandArchive",
|
||||
3030: ".TSD.MediaStyleSetValueCommandArchive",
|
||||
3031: ".TSD.ShapeApplyPresetCommandArchive",
|
||||
3032: ".TSD.MediaApplyPresetCommandArchive",
|
||||
3034: ".TSD.MovieSetValueCommandArchive",
|
||||
3036: ".TSD.ExteriorTextWrapCommandArchive",
|
||||
3037: ".TSD.MediaFlagsCommandArchive",
|
||||
3040: ".TSD.DrawableHyperlinkCommandArchive",
|
||||
3041: ".TSD.ConnectionLineConnectCommandArchive",
|
||||
3042: ".TSD.InstantAlphaCommandArchive",
|
||||
3043: ".TSD.DrawableLockCommandArchive",
|
||||
3044: ".TSD.ImageNaturalSizeCommandArchive",
|
||||
3045: ".TSD.CanvasSelectionArchive",
|
||||
3047: ".TSD.GuideStorageArchive",
|
||||
3048: ".TSD.StyledInfoSetStyleCommandArchive",
|
||||
3049: ".TSD.DrawableInfoCommentCommandArchive",
|
||||
3050: ".TSD.GuideCommandArchive",
|
||||
3051: ".TSD.DrawableAspectRatioLockedCommandArchive",
|
||||
3052: ".TSD.ContainerRemoveChildrenCommandArchive",
|
||||
3053: ".TSD.ContainerInsertChildrenCommandArchive",
|
||||
3054: ".TSD.ContainerReorderChildrenCommandArchive",
|
||||
3055: ".TSD.ImageAdjustmentsCommandArchive",
|
||||
3056: ".TSD.CommentStorageArchive",
|
||||
3057: ".TSD.ThemeReplaceFillPresetCommandArchive",
|
||||
3058: ".TSD.DrawableAccessibilityDescriptionCommandArchive",
|
||||
3059: ".TSD.PasteStyleCommandArchive",
|
||||
3061: ".TSD.DrawableSelectionArchive",
|
||||
3062: ".TSD.GroupSelectionArchive",
|
||||
3063: ".TSD.PathSelectionArchive",
|
||||
3064: ".TSD.CommentInvalidatingCommandSelectionBehaviorArchive",
|
||||
3065: ".TSD.ImageInfoAbstractGeometryCommandArchive",
|
||||
3066: ".TSD.ImageInfoGeometryCommandArchive",
|
||||
3067: ".TSD.ImageInfoMaskGeometryCommandArchive",
|
||||
3068: ".TSD.UndoObjectArchive",
|
||||
3070: ".TSD.ReplaceAnnotationAuthorCommandArchive",
|
||||
3071: ".TSD.DrawableSelectionTransformerArchive",
|
||||
3072: ".TSD.GroupSelectionTransformerArchive",
|
||||
3073: ".TSD.ShapeSelectionTransformerArchive",
|
||||
3074: ".TSD.PathSelectionTransformerArchive",
|
||||
3080: ".TSD.MediaInfoGeometryCommandArchive",
|
||||
3082: ".TSD.GroupUngroupInformativeCommandArchive",
|
||||
3083: ".TSD.DrawableContentDescription",
|
||||
3084: ".TSD.ContainerRemoveDrawablesCommandArchive",
|
||||
3085: ".TSD.ContainerInsertDrawablesCommandArchive",
|
||||
3086: ".TSD.PencilAnnotationArchive",
|
||||
3087: ".TSD.FreehandDrawingOpacityCommandArchive",
|
||||
3088: ".TSD.DrawablePencilAnnotationCommandArchive",
|
||||
3089: ".TSD.PencilAnnotationSelectionArchive",
|
||||
3090: ".TSD.FreehandDrawingContentDescription",
|
||||
3091: ".TSD.FreehandDrawingToolkitUIState",
|
||||
3092: ".TSD.PencilAnnotationSelectionTransformerArchive",
|
||||
3094: ".TSD.FreehandDrawingAnimationCommandArchive",
|
||||
3095: ".TSD.InsertCaptionOrTitleCommandArchive",
|
||||
3096: ".TSD.RemoveCaptionOrTitleCommandArchive",
|
||||
3097: ".TSD.StandinCaptionArchive",
|
||||
3098: ".TSD.SetCaptionOrTitleVisibilityCommandArchive",
|
||||
4000: ".TSCE.CalculationEngineArchive",
|
||||
4001: ".TSCE.FormulaRewriteCommandArchive",
|
||||
4003: ".TSCE.NamedReferenceManagerArchive",
|
||||
4004: ".TSCE.TrackedReferenceStoreArchive",
|
||||
4005: ".TSCE.TrackedReferenceArchive",
|
||||
4007: ".TSCE.RemoteDataStoreArchive",
|
||||
4008: ".TSCE.FormulaOwnerDependenciesArchive",
|
||||
4009: ".TSCE.CellRecordTileArchive",
|
||||
4010: ".TSCE.RangePrecedentsTileArchive",
|
||||
4011: ".TSCE.ReferencesToDirtyArchive",
|
||||
5000: ".TSCH.PreUFF.ChartInfoArchive",
|
||||
5002: ".TSCH.PreUFF.ChartGridArchive",
|
||||
5004: ".TSCH.ChartMediatorArchive",
|
||||
5010: ".TSCH.PreUFF.ChartStyleArchive",
|
||||
5011: ".TSCH.PreUFF.ChartSeriesStyleArchive",
|
||||
5012: ".TSCH.PreUFF.ChartAxisStyleArchive",
|
||||
5013: ".TSCH.PreUFF.LegendStyleArchive",
|
||||
5014: ".TSCH.PreUFF.ChartNonStyleArchive",
|
||||
5015: ".TSCH.PreUFF.ChartSeriesNonStyleArchive",
|
||||
5016: ".TSCH.PreUFF.ChartAxisNonStyleArchive",
|
||||
5017: ".TSCH.PreUFF.LegendNonStyleArchive",
|
||||
5020: ".TSCH.ChartStylePreset",
|
||||
5021: ".TSCH.ChartDrawableArchive",
|
||||
5022: ".TSCH.ChartStyleArchive",
|
||||
5023: ".TSCH.ChartNonStyleArchive",
|
||||
5024: ".TSCH.LegendStyleArchive",
|
||||
5025: ".TSCH.LegendNonStyleArchive",
|
||||
5026: ".TSCH.ChartAxisStyleArchive",
|
||||
5027: ".TSCH.ChartAxisNonStyleArchive",
|
||||
5028: ".TSCH.ChartSeriesStyleArchive",
|
||||
5029: ".TSCH.ChartSeriesNonStyleArchive",
|
||||
5030: ".TSCH.ReferenceLineStyleArchive",
|
||||
5031: ".TSCH.ReferenceLineNonStyleArchive",
|
||||
5103: ".TSCH.CommandSetChartTypeArchive",
|
||||
5104: ".TSCH.CommandSetSeriesNameArchive",
|
||||
5105: ".TSCH.CommandSetCategoryNameArchive",
|
||||
5107: ".TSCH.CommandSetScatterFormatArchive",
|
||||
5108: ".TSCH.CommandSetLegendFrameArchive",
|
||||
5109: ".TSCH.CommandSetGridValueArchive",
|
||||
5110: ".TSCH.CommandSetGridDirectionArchive",
|
||||
5115: ".TSCH.CommandAddGridRowsArchive",
|
||||
5116: ".TSCH.CommandAddGridColumnsArchive",
|
||||
5118: ".TSCH.CommandMoveGridRowsArchive",
|
||||
5119: ".TSCH.CommandMoveGridColumnsArchive",
|
||||
5122: ".TSCH.CommandSetPieWedgeExplosion",
|
||||
5123: ".TSCH.CommandStyleSwapArchive",
|
||||
5125: ".TSCH.CommandChartApplyPreset",
|
||||
5126: ".TSCH.ChartCommandArchive",
|
||||
5127: ".TSCH.CommandReplaceGridValuesArchive",
|
||||
5129: ".TSCH.StylePasteboardDataArchive",
|
||||
5130: ".TSCH.CommandSetMultiDataSetIndexArchive",
|
||||
5131: ".TSCH.CommandReplaceThemePresetArchive",
|
||||
5132: ".TSCH.CommandInvalidateWPCaches",
|
||||
5135: ".TSCH.CommandMutatePropertiesArchive",
|
||||
5136: ".TSCH.CommandScaleAllTextArchive",
|
||||
5137: ".TSCH.CommandSetFontFamilyArchive",
|
||||
5138: ".TSCH.CommandApplyFillSetArchive",
|
||||
5139: ".TSCH.CommandReplaceCustomFormatArchive",
|
||||
5140: ".TSCH.CommandAddReferenceLineArchive",
|
||||
5141: ".TSCH.CommandDeleteReferenceLineArchive",
|
||||
5142: ".TSCH.CommandDeleteGridColumnsArchive",
|
||||
5143: ".TSCH.CommandDeleteGridRowsArchive",
|
||||
5145: ".TSCH.ChartSelectionArchive",
|
||||
5146: ".TSCH.ChartTextSelectionTransformerArchive",
|
||||
5147: ".TSCH.ChartSubselectionTransformerArchive",
|
||||
5148: ".TSCH.ChartDrawableSelectionTransformerArchive",
|
||||
5149: ".TSCH.ChartSubselectionTransformerHelperArchive",
|
||||
5150: ".TSCH.ChartRefLineSubselectionTransformerHelperArchive",
|
||||
5151: ".TSCH.CDESelectionTransformerArchive",
|
||||
5152: ".TSCH.ChartSubselectionIdentityTransformerHelperArchive",
|
||||
5154: ".TSCH.CommandPasteStyleArchive",
|
||||
5155: ".TSCH.CommandInducedReplaceChartGrid",
|
||||
5156: ".TSCH.CommandReplaceImageDataArchive",
|
||||
5157: ".TSCH.CommandInduced3DChartGeometry",
|
||||
6000: ".TST.TableInfoArchive",
|
||||
6001: ".TST.TableModelArchive",
|
||||
6002: ".TST.Tile",
|
||||
6003: ".TST.TableStyleArchive",
|
||||
6004: ".TST.CellStyleArchive",
|
||||
6005: ".TST.TableDataList",
|
||||
6006: ".TST.HeaderStorageBucket",
|
||||
6007: ".TST.WPTableInfoArchive",
|
||||
6008: ".TST.TableStylePresetArchive",
|
||||
6009: ".TST.TableStrokePresetArchive",
|
||||
6010: ".TST.ConditionalStyleSetArchive",
|
||||
6011: ".TST.TableDataListSegment",
|
||||
6030: ".TST.SelectionArchive",
|
||||
6031: ".TST.CellMapArchive",
|
||||
6032: ".TST.DeathhawkRdar39989167CellSelectionArchive",
|
||||
6033: ".TST.ConcurrentCellMapArchive",
|
||||
6034: ".TST.ConcurrentCellListArchive",
|
||||
6100: ".TST.TableCommandArchive",
|
||||
6101: ".TST.CommandDeleteCellsArchive",
|
||||
6102: ".TST.CommandInsertColumnsOrRowsArchive",
|
||||
6103: ".TST.CommandRemoveColumnsOrRowsArchive",
|
||||
6104: ".TST.CommandResizeColumnOrRowArchive",
|
||||
6107: ".TST.CommandSetTableNameArchive",
|
||||
6111: ".TST.CommandChangeFreezeHeaderStateArchive",
|
||||
6114: ".TST.CommandSetTableNameEnabledArchive",
|
||||
6117: ".TST.CommandApplyTableStylePresetArchive",
|
||||
6120: ".TST.CommandSetRepeatingHeaderEnabledArchive",
|
||||
6123: ".TST.CommandSortArchive",
|
||||
6125: ".TST.CommandStyleTableArchive",
|
||||
6126: ".TST.CommandSetNumberOfDecimalPlacesArchive",
|
||||
6127: ".TST.CommandSetShowThousandsSeparatorArchive",
|
||||
6128: ".TST.CommandSetNegativeNumberStyleArchive",
|
||||
6129: ".TST.CommandSetFractionAccuracyArchive",
|
||||
6131: ".TST.CommandSetCurrencyCodeArchive",
|
||||
6132: ".TST.CommandSetUseAccountingStyleArchive",
|
||||
6136: ".TST.CommandSetTableFontNameArchive",
|
||||
6137: ".TST.CommandSetTableFontSizeArchive",
|
||||
6142: ".TST.CommandSetTableNameHeightArchive",
|
||||
6144: ".TST.MergeRegionMapArchive",
|
||||
6145: ".TST.CommandHideShowArchive",
|
||||
6146: ".TST.CommandSetBaseArchive",
|
||||
6147: ".TST.CommandSetBasePlacesArchive",
|
||||
6148: ".TST.CommandSetBaseUseMinusSignArchive",
|
||||
6149: ".TST.CommandSetTextStylePropertiesArchive",
|
||||
6150: ".TST.CommandCategoryChangeSummaryAggregateType",
|
||||
6152: ".TST.CommandCategoryResizeColumnOrRowArchive",
|
||||
6153: ".TST.CommandCategoryMoveRowsArchive",
|
||||
6156: ".TST.CommandSetPencilAnnotationsArchive",
|
||||
6157: ".TST.CommandCategoryWillChangeGroupValue",
|
||||
6158: ".TST.CommandApplyConcurrentCellMapArchive",
|
||||
6159: ".TST.CommandSetGroupSortOrderArchive",
|
||||
6179: ".TST.FormulaEqualsTokenAttachmentArchive",
|
||||
6181: ".TST.TokenAttachmentArchive",
|
||||
6182: ".TST.ExpressionNodeArchive",
|
||||
6183: ".TST.BooleanNodeArchive",
|
||||
6184: ".TST.NumberNodeArchive",
|
||||
6185: ".TST.StringNodeArchive",
|
||||
6186: ".TST.ArrayNodeArchive",
|
||||
6187: ".TST.ListNodeArchive",
|
||||
6188: ".TST.OperatorNodeArchive",
|
||||
6189: ".TST.FunctionNodeArchive",
|
||||
6190: ".TST.DateNodeArchive",
|
||||
6191: ".TST.ReferenceNodeArchive",
|
||||
6192: ".TST.DurationNodeArchive",
|
||||
6193: ".TST.ArgumentPlaceholderNodeArchive",
|
||||
6194: ".TST.PostfixOperatorNodeArchive",
|
||||
6195: ".TST.PrefixOperatorNodeArchive",
|
||||
6196: ".TST.FunctionEndNodeArchive",
|
||||
6197: ".TST.EmptyExpressionNodeArchive",
|
||||
6198: ".TST.LayoutHintArchive",
|
||||
6199: ".TST.CompletionTokenAttachmentArchive",
|
||||
6201: ".TST.TableDataList",
|
||||
6204: ".TST.HiddenStateFormulaOwnerArchive",
|
||||
6205: ".TST.CommandSetAutomaticDurationUnitsArchive",
|
||||
6206: ".TST.PopUpMenuModel",
|
||||
6218: ".TST.RichTextPayloadArchive",
|
||||
6220: ".TST.FilterSetArchive",
|
||||
6221: ".TST.CommandSetFiltersEnabledArchive",
|
||||
6224: ".TST.CommandRewriteFilterFormulasForTableResizeArchive",
|
||||
6226: ".TST.CommandTextPreflightInsertCellArchive",
|
||||
6228: ".TST.CommandDeleteCellContentsArchive",
|
||||
6229: ".TST.CommandPostflightSetCellArchive",
|
||||
6235: ".TST.IdentifierNodeArchive",
|
||||
6238: ".TST.CommandSetDateTimeFormatArchive",
|
||||
6239: ".TST.TableCommandSelectionBehaviorArchive",
|
||||
6244: ".TST.CommandApplyCellCommentArchive",
|
||||
6246: ".TST.CommandSetFormulaTokenizationArchive",
|
||||
6247: ".TST.TableStyleNetworkArchive",
|
||||
6250: ".TST.CommandSetFilterSetTypeArchive",
|
||||
6255: ".TST.CommandSetTextStyleArchive",
|
||||
6256: ".TST.CommandJustForNotifyingArchive",
|
||||
6258: ".TST.CommandSetSortOrderArchive",
|
||||
6262: ".TST.CommandAddTableStylePresetArchive",
|
||||
6264: ".TST.CellDiffMapArchive",
|
||||
6265: ".TST.CommandApplyCellContentsArchive",
|
||||
6266: ".TST.CommandRemoveTableStylePresetArchive",
|
||||
6267: ".TST.ColumnRowUIDMapArchive",
|
||||
6268: ".TST.CommandMoveColumnsOrRowsArchive",
|
||||
6269: ".TST.CommandReplaceCustomFormatArchive",
|
||||
6270: ".TST.CommandReplaceTableStylePresetArchive",
|
||||
6271: ".TST.FormulaSelectionArchive",
|
||||
6273: ".TST.CellListArchive",
|
||||
6275: ".TST.CommandApplyCellDiffMapArchive",
|
||||
6276: ".TST.CommandSetFilterSetArchive",
|
||||
6277: ".TST.CommandMutateCellFormatArchive",
|
||||
6278: ".TST.CommandSetStorageLanguageArchive",
|
||||
6280: ".TST.CommandMergeArchive",
|
||||
6281: ".TST.CommandUnmergeArchive",
|
||||
6282: ".TST.CommandApplyCellMapArchive",
|
||||
6283: ".TST.ControlCellSelectionArchive",
|
||||
6284: ".TST.TableNameSelectionArchive",
|
||||
6285: ".TST.CommandRewriteFormulasForTransposeArchive",
|
||||
6287: ".TST.CommandTransposeTableArchive",
|
||||
6289: ".TST.CommandSetDurationStyleArchive",
|
||||
6290: ".TST.CommandSetDurationUnitSmallestLargestArchive",
|
||||
6291: ".TST.CommandRewriteTableFormulasForRewriteSpecArchive",
|
||||
6292: ".TST.CommandRewriteConditionalStylesForRewriteSpecArchive",
|
||||
6293: ".TST.CommandRewriteFilterFormulasForRewriteSpecArchive",
|
||||
6294: ".TST.CommandRewriteSortOrderForRewriteSpecArchive",
|
||||
6295: ".TST.StrokeSelectionArchive",
|
||||
6297: ".TST.LetNodeArchive",
|
||||
6298: ".TST.VariableNodeArchive",
|
||||
6299: ".TST.InNodeArchive",
|
||||
6300: ".TST.CommandInverseMergeArchive",
|
||||
6301: ".TST.CommandMoveCellsArchive",
|
||||
6302: ".TST.DefaultCellStylesContainerArchive",
|
||||
6303: ".TST.CommandRewriteMergeFormulasArchive",
|
||||
6304: ".TST.CommandChangeTableAreaForColumnOrRowArchive",
|
||||
6305: ".TST.StrokeSidecarArchive",
|
||||
6306: ".TST.StrokeLayerArchive",
|
||||
6307: ".TST.CommandChooseTableIdRemapperArchive",
|
||||
6310: ".TST.CommandSetWasCutArchive",
|
||||
6311: ".TST.AutofillSelectionArchive",
|
||||
6312: ".TST.StockCellSelectionArchive",
|
||||
6313: ".TST.CommandSetNowArchive",
|
||||
6314: ".TST.CommandSetStructuredTextImportRecordArchive",
|
||||
6315: ".TST.CommandRewriteCategoryFormulasArchive",
|
||||
6316: ".TST.SummaryModelArchive",
|
||||
6317: ".TST.SummaryCellVendorArchive",
|
||||
6318: ".TST.CategoryOrderArchive",
|
||||
6320: ".TST.CommandCategoryCollapseExpandGroupArchive",
|
||||
6321: ".TST.CommandCategorySetGroupingColumnsArchive",
|
||||
6323: ".TST.CommandRewriteHiddenStatesForGroupByChangeArchive",
|
||||
6350: ".TST.IdempotentSelectionTransformerArchive",
|
||||
6351: ".TST.TableSubSelectionTransformerBaseArchive",
|
||||
6352: ".TST.TableNameSelectionTransformerArchive",
|
||||
6353: ".TST.RegionSelectionTransformerArchive",
|
||||
6354: ".TST.RowColumnSelectionTransformerArchive",
|
||||
6355: ".TST.ControlCellSelectionTransformerArchive",
|
||||
6357: ".TST.ChangePropagationMapWrapper",
|
||||
6358: ".TST.WPSelectionTransformerArchive",
|
||||
6359: ".TST.StockCellSelectionTransformerArchive",
|
||||
6360: ".TST.CommandSetRangeControlMinMaxIncArchive",
|
||||
6361: ".TST.CommandCategorySetLabelRowVisibility",
|
||||
6362: ".TST.CommandRewritePencilAnnotationFormulasArchive",
|
||||
6363: ".TST.PencilAnnotationArchive",
|
||||
6364: ".TST.StrokeSelectionTransformerArchive",
|
||||
6365: ".TST.HeaderNameMgrTileArchive",
|
||||
6366: ".TST.HeaderNameMgrArchive",
|
||||
6367: ".TST.CellDiffArray",
|
||||
6368: ".TST.CellDiffArraySegment",
|
||||
6369: ".TST.PivotOrderArchive",
|
||||
6370: ".TST.PivotOwnerArchive",
|
||||
6371: ".TST.CommandPivotSetPivotRulesArchive",
|
||||
6372: ".TST.CategoryOwnerRefArchive",
|
||||
6373: ".TST.GroupByArchive",
|
||||
6374: ".TST.PivotGroupingColumnOptionsMapArchive",
|
||||
6375: ".TST.CommandPivotSetGroupingColumnOptionsArchive",
|
||||
6376: ".TST.CommandPivotHideShowGrandTotalsArchive",
|
||||
6377: ".TST.CommandPivotSortArchive",
|
||||
6379: ".TST.CommandRewritePivotOwnerFormulasArchive",
|
||||
6380: ".TST.CommandRewriteTrackedReferencesArchive",
|
||||
6381: ".TST.CommandExtendTableIDHistoryArchive",
|
||||
6382: ".TST.GroupByArchive.AggregatorArchive",
|
||||
6383: ".TST.GroupByArchive.GroupNodeArchive",
|
||||
10011: ".TSWP.SectionPlaceholderArchive",
|
||||
10020: ".TSWP.ShapeSelectionTransformerArchive",
|
||||
10021: ".TSWP.SelectionTransformerArchive",
|
||||
10022: ".TSWP.ShapeContentDescription",
|
||||
10023: ".TSWP.TateChuYokoFieldArchive",
|
||||
10024: ".TSWP.DropCapStyleArchive",
|
||||
11000: ".TSP.PasteboardObject",
|
||||
11006: ".TSP.PackageMetadata",
|
||||
11007: ".TSP.PasteboardMetadata",
|
||||
11008: ".TSP.ObjectContainer",
|
||||
11009: ".TSP.ViewStateMetadata",
|
||||
11010: ".TSP.ObjectCollection",
|
||||
11011: ".TSP.DocumentMetadata",
|
||||
11012: ".TSP.SupportMetadata",
|
||||
11013: ".TSP.ObjectSerializationMetadata",
|
||||
11014: ".TSP.DataMetadata",
|
||||
11015: ".TSP.DataMetadataMap",
|
||||
11016: ".TSP.LargeNumberArraySegment",
|
||||
11017: ".TSP.LargeStringArraySegment",
|
||||
11018: ".TSP.LargeLazyObjectArraySegment",
|
||||
11019: ".TSP.LargeNumberArray",
|
||||
11020: ".TSP.LargeStringArray",
|
||||
11021: ".TSP.LargeLazyObjectArray",
|
||||
11024: ".TSP.LargeUUIDArraySegment",
|
||||
11025: ".TSP.LargeUUIDArray",
|
||||
11026: ".TSP.LargeObjectArraySegment",
|
||||
11027: ".TSP.LargeObjectArray",
|
||||
} as {[key: number]: string};
|
581
src/messages/numbers.ts
Normal file
581
src/messages/numbers.ts
Normal file
@ -0,0 +1,581 @@
|
||||
export default {
|
||||
1: ".TN.DocumentArchive",
|
||||
2: ".TN.SheetArchive",
|
||||
3: ".TN.FormBasedSheetArchive",
|
||||
7: ".TN.PlaceholderArchive",
|
||||
200: ".TSK.DocumentArchive",
|
||||
201: ".TSK.LocalCommandHistory",
|
||||
202: ".TSK.CommandGroupArchive",
|
||||
203: ".TSK.CommandContainerArchive",
|
||||
205: ".TSK.TreeNode",
|
||||
210: ".TSK.ViewStateArchive",
|
||||
211: ".TSK.DocumentSupportArchive",
|
||||
212: ".TSK.AnnotationAuthorArchive",
|
||||
213: ".TSK.AnnotationAuthorStorageArchive",
|
||||
215: ".TSK.SetAnnotationAuthorColorCommandArchive",
|
||||
218: ".TSK.CollaborationCommandHistory",
|
||||
219: ".TSK.DocumentSelectionArchive",
|
||||
220: ".TSK.CommandSelectionBehaviorArchive",
|
||||
221: ".TSK.NullCommandArchive",
|
||||
222: ".TSK.CustomFormatListArchive",
|
||||
223: ".TSK.GroupCommitCommandArchive",
|
||||
224: ".TSK.InducedCommandCollectionArchive",
|
||||
225: ".TSK.InducedCommandCollectionCommitCommandArchive",
|
||||
226: ".TSK.CollaborationDocumentSessionState",
|
||||
227: ".TSK.CollaborationCommandHistoryCoalescingGroup",
|
||||
228: ".TSK.CollaborationCommandHistoryCoalescingGroupNode",
|
||||
229: ".TSK.CollaborationCommandHistoryOriginatingCommandAcknowledgementObserver",
|
||||
230: ".TSK.DocumentSupportCollaborationState",
|
||||
231: ".TSK.ChangeDocumentPackageTypeCommandArchive",
|
||||
232: ".TSK.UpgradeDocPostProcessingCommandArchive",
|
||||
233: ".TSK.FinalCommandPairArchive",
|
||||
234: ".TSK.OutgoingCommandQueueItem",
|
||||
235: ".TSK.TransformerEntry",
|
||||
238: ".TSK.CreateLocalStorageSnapshotCommandArchive",
|
||||
240: ".TSK.SelectionPathTransformerArchive",
|
||||
241: ".TSK.NativeContentDescription",
|
||||
242: ".TSD.PencilAnnotationStorageArchive",
|
||||
245: ".TSK.OperationStorage",
|
||||
246: ".TSK.OperationStorageEntryArray",
|
||||
247: ".TSK.OperationStorageEntryArraySegment",
|
||||
248: ".TSK.BlockDiffsAtCurrentRevisionCommand",
|
||||
249: ".TSK.OutgoingCommandQueue",
|
||||
250: ".TSK.OutgoingCommandQueueSegment",
|
||||
251: ".TSK.PropagatedCommandCollectionArchive",
|
||||
252: ".TSK.LocalCommandHistoryItem",
|
||||
253: ".TSK.LocalCommandHistoryArray",
|
||||
254: ".TSK.LocalCommandHistoryArraySegment",
|
||||
255: ".TSK.CollaborationCommandHistoryItem",
|
||||
256: ".TSK.CollaborationCommandHistoryArray",
|
||||
257: ".TSK.CollaborationCommandHistoryArraySegment",
|
||||
258: ".TSK.PencilAnnotationUIState",
|
||||
259: ".TSKSOS.FixCorruptedDataCommandArchive",
|
||||
260: ".TSK.CommandAssetChunkArchive",
|
||||
261: ".TSK.AssetUploadStatusCommandArchive",
|
||||
262: ".TSK.AssetUnmaterializedOnServerCommandArchive",
|
||||
263: ".TSK.CommandBehaviorArchive",
|
||||
264: ".TSK.CommandBehaviorSelectionPathStorageArchive",
|
||||
265: ".TSK.CommandActivityBehaviorArchive",
|
||||
273: ".TSK.ActivityOnlyCommandArchive",
|
||||
275: ".TSK.SetActivityAuthorShareParticipantIDCommandArchive",
|
||||
279: ".TSK.ActivityAuthorCacheArchive",
|
||||
280: ".TSK.ActivityStreamArchive",
|
||||
281: ".TSK.ActivityArchive",
|
||||
282: ".TSK.ActivityCommitCommandArchive",
|
||||
283: ".TSK.ActivityStreamActivityArray",
|
||||
284: ".TSK.ActivityStreamActivityArraySegment",
|
||||
285: ".TSK.ActivityStreamRemovedAuthorAuditorPendingStateArchive",
|
||||
286: ".TSK.ActivityAuthorArchive",
|
||||
287: ".TSKSOS.ResetActivityStreamCommandArchive",
|
||||
288: ".TSKSOS.RemoveAuthorIdentifiersCommandArchive",
|
||||
289: ".TSK.ActivityCursorCollectionPersistenceWrapperArchive",
|
||||
400: ".TSS.StyleArchive",
|
||||
401: ".TSS.StylesheetArchive",
|
||||
402: ".TSS.ThemeArchive",
|
||||
412: ".TSS.StyleUpdatePropertyMapCommandArchive",
|
||||
413: ".TSS.ThemeReplacePresetCommandArchive",
|
||||
414: ".TSS.ThemeAddStylePresetCommandArchive",
|
||||
415: ".TSS.ThemeRemoveStylePresetCommandArchive",
|
||||
416: ".TSS.ThemeReplaceColorPresetCommandArchive",
|
||||
417: ".TSS.ThemeMovePresetCommandArchive",
|
||||
419: ".TSS.ThemeReplaceStylePresetAndDisconnectStylesCommandArchive",
|
||||
600: ".TSA.DocumentArchive",
|
||||
601: ".TSA.FunctionBrowserStateArchive",
|
||||
602: ".TSA.PropagatePresetCommandArchive",
|
||||
603: ".TSA.ShortcutControllerArchive",
|
||||
604: ".TSA.ShortcutCommandArchive",
|
||||
605: ".TSA.AddCustomFormatCommandArchive",
|
||||
606: ".TSA.UpdateCustomFormatCommandArchive",
|
||||
607: ".TSA.ReplaceCustomFormatCommandArchive",
|
||||
611: ".TSASOS.VerifyObjectsWithServerCommandArchive",
|
||||
612: ".TSA.InducedVerifyObjectsWithServerCommandArchive",
|
||||
613: ".TSASOS.VerifyDocumentWithServerCommandArchive",
|
||||
614: ".TSASOS.VerifyDrawableZOrdersWithServerCommandArchive",
|
||||
615: ".TSASOS.InducedVerifyDrawableZOrdersWithServerCommandArchive",
|
||||
616: ".TSA.NeedsMediaCompatibilityUpgradeCommandArchive",
|
||||
617: ".TSA.ChangeDocumentLocaleCommandArchive",
|
||||
618: ".TSA.StyleUpdatePropertyMapCommandArchive",
|
||||
619: ".TSA.RemoteDataChangeCommandArchive",
|
||||
623: ".TSA.GalleryItem",
|
||||
624: ".TSA.GallerySelectionTransformer",
|
||||
625: ".TSA.GalleryItemSelection",
|
||||
626: ".TSA.GalleryItemSelectionTransformer",
|
||||
627: ".TSA.GalleryInfoSetValueCommandArchive",
|
||||
628: ".TSA.GalleryItemSetGeometryCommand",
|
||||
629: ".TSA.GalleryItemSetValueCommand",
|
||||
630: ".TSA.InducedVerifyTransformHistoryWithServerCommandArchive",
|
||||
631: ".TSASOS.CommandReapplyMasterArchive",
|
||||
632: ".TSASOS.PropagateMasterChangeCommandArchive",
|
||||
633: ".TSA.CaptionInfoArchive",
|
||||
634: ".TSA.CaptionPlacementArchive",
|
||||
635: ".TSA.TitlePlacementCommandArchive",
|
||||
636: ".TSA.GalleryInfoInsertItemsCommandArchive",
|
||||
637: ".TSA.GalleryInfoRemoveItemsCommandArchive",
|
||||
638: ".TSASOS.VerifyActivityStreamWithServerCommandArchive",
|
||||
639: ".TSASOS.InducedVerifyActivityStreamWithServerCommandArchive",
|
||||
2001: ".TSWP.StorageArchive",
|
||||
2002: ".TSWP.SelectionArchive",
|
||||
2003: ".TSWP.DrawableAttachmentArchive",
|
||||
2004: ".TSWP.TextualAttachmentArchive",
|
||||
2005: ".TSWP.StorageArchive",
|
||||
2006: ".TSWP.UIGraphicalAttachment",
|
||||
2007: ".TSWP.TextualAttachmentArchive",
|
||||
2008: ".TSWP.FootnoteReferenceAttachmentArchive",
|
||||
2009: ".TSWP.TextualAttachmentArchive",
|
||||
2010: ".TSWP.TSWPTOCPageNumberAttachmentArchive",
|
||||
2011: ".TSWP.ShapeInfoArchive",
|
||||
2013: ".TSWP.HighlightArchive",
|
||||
2014: ".TSWP.CommentInfoArchive",
|
||||
2015: ".TSWP.EquationInfoArchive",
|
||||
2016: ".TSWP.PencilAnnotationArchive",
|
||||
2021: ".TSWP.CharacterStyleArchive",
|
||||
2022: ".TSWP.ParagraphStyleArchive",
|
||||
2023: ".TSWP.ListStyleArchive",
|
||||
2024: ".TSWP.ColumnStyleArchive",
|
||||
2025: ".TSWP.ShapeStyleArchive",
|
||||
2026: ".TSWP.TOCEntryStyleArchive",
|
||||
2031: ".TSWP.PlaceholderSmartFieldArchive",
|
||||
2032: ".TSWP.HyperlinkFieldArchive",
|
||||
2033: ".TSWP.FilenameSmartFieldArchive",
|
||||
2034: ".TSWP.DateTimeSmartFieldArchive",
|
||||
2035: ".TSWP.BookmarkFieldArchive",
|
||||
2036: ".TSWP.MergeSmartFieldArchive",
|
||||
2037: ".TSWP.CitationRecordArchive",
|
||||
2038: ".TSWP.CitationSmartFieldArchive",
|
||||
2039: ".TSWP.UnsupportedHyperlinkFieldArchive",
|
||||
2040: ".TSWP.BibliographySmartFieldArchive",
|
||||
2041: ".TSWP.TOCSmartFieldArchive",
|
||||
2042: ".TSWP.RubyFieldArchive",
|
||||
2043: ".TSWP.NumberAttachmentArchive",
|
||||
2050: ".TSWP.TextStylePresetArchive",
|
||||
2051: ".TSWP.TOCSettingsArchive",
|
||||
2052: ".TSWP.TOCEntryInstanceArchive",
|
||||
2053: ".TSWPSOS.StyleDiffArchive",
|
||||
2060: ".TSWP.ChangeArchive",
|
||||
2061: ".TSK.DeprecatedChangeAuthorArchive",
|
||||
2062: ".TSWP.ChangeSessionArchive",
|
||||
2101: ".TSWP.TextCommandArchive",
|
||||
2107: ".TSWP.ApplyPlaceholderTextCommandArchive",
|
||||
2116: ".TSWP.ApplyRubyTextCommandArchive",
|
||||
2118: ".TSWP.ModifyRubyTextCommandArchive",
|
||||
2119: ".TSWP.UpdateDateTimeFieldCommandArchive",
|
||||
2120: ".TSWP.ModifyTOCSettingsBaseCommandArchive",
|
||||
2121: ".TSWP.ModifyTOCSettingsForTOCInfoCommandArchive",
|
||||
2123: ".TSWP.SetObjectPropertiesCommandArchive",
|
||||
2124: ".TSWP.UpdateFlowInfoCommandArchive",
|
||||
2125: ".TSWP.AddFlowInfoCommandArchive",
|
||||
2126: ".TSWP.RemoveFlowInfoCommandArchive",
|
||||
2127: ".TSWP.ContainedObjectsCommandArchive",
|
||||
2128: ".TSWP.EquationInfoGeometryCommandArchive",
|
||||
2206: ".TSWP.AnchorAttachmentCommandArchive",
|
||||
2217: ".TSWP.TextCommentReplyCommandArchive",
|
||||
2231: ".TSWP.ShapeApplyPresetCommandArchive",
|
||||
2240: ".TSWP.TOCInfoArchive",
|
||||
2241: ".TSWP.TOCAttachmentArchive",
|
||||
2242: ".TSWP.TOCLayoutHintArchive",
|
||||
2400: ".TSWP.StyleBaseCommandArchive",
|
||||
2401: ".TSWP.StyleCreateCommandArchive",
|
||||
2402: ".TSWP.StyleRenameCommandArchive",
|
||||
2404: ".TSWP.StyleDeleteCommandArchive",
|
||||
2405: ".TSWP.StyleReorderCommandArchive",
|
||||
2406: ".TSWP.StyleUpdatePropertyMapCommandArchive",
|
||||
2407: ".TSWP.StorageActionCommandArchive",
|
||||
2408: ".TSWP.ShapeStyleSetValueCommandArchive",
|
||||
2409: ".TSWP.HyperlinkSelectionArchive",
|
||||
2410: ".TSWP.FlowInfoArchive",
|
||||
2411: ".TSWP.FlowInfoContainerArchive",
|
||||
2412: ".TSWP.PencilAnnotationSelectionTransformerArchive",
|
||||
3002: ".TSD.DrawableArchive",
|
||||
3003: ".TSD.ContainerArchive",
|
||||
3004: ".TSD.ShapeArchive",
|
||||
3005: ".TSD.ImageArchive",
|
||||
3006: ".TSD.MaskArchive",
|
||||
3007: ".TSD.MovieArchive",
|
||||
3008: ".TSD.GroupArchive",
|
||||
3009: ".TSD.ConnectionLineArchive",
|
||||
3015: ".TSD.ShapeStyleArchive",
|
||||
3016: ".TSD.MediaStyleArchive",
|
||||
3021: ".TSD.InfoGeometryCommandArchive",
|
||||
3022: ".TSD.DrawablePathSourceCommandArchive",
|
||||
3024: ".TSD.ImageMaskCommandArchive",
|
||||
3025: ".TSD.ImageMediaCommandArchive",
|
||||
3026: ".TSD.ImageReplaceCommandArchive",
|
||||
3027: ".TSD.MediaOriginalSizeCommandArchive",
|
||||
3028: ".TSD.ShapeStyleSetValueCommandArchive",
|
||||
3030: ".TSD.MediaStyleSetValueCommandArchive",
|
||||
3031: ".TSD.ShapeApplyPresetCommandArchive",
|
||||
3032: ".TSD.MediaApplyPresetCommandArchive",
|
||||
3034: ".TSD.MovieSetValueCommandArchive",
|
||||
3036: ".TSD.ExteriorTextWrapCommandArchive",
|
||||
3037: ".TSD.MediaFlagsCommandArchive",
|
||||
3040: ".TSD.DrawableHyperlinkCommandArchive",
|
||||
3041: ".TSD.ConnectionLineConnectCommandArchive",
|
||||
3042: ".TSD.InstantAlphaCommandArchive",
|
||||
3043: ".TSD.DrawableLockCommandArchive",
|
||||
3044: ".TSD.ImageNaturalSizeCommandArchive",
|
||||
3045: ".TSD.CanvasSelectionArchive",
|
||||
3047: ".TSD.GuideStorageArchive",
|
||||
3048: ".TSD.StyledInfoSetStyleCommandArchive",
|
||||
3049: ".TSD.DrawableInfoCommentCommandArchive",
|
||||
3050: ".TSD.GuideCommandArchive",
|
||||
3051: ".TSD.DrawableAspectRatioLockedCommandArchive",
|
||||
3052: ".TSD.ContainerRemoveChildrenCommandArchive",
|
||||
3053: ".TSD.ContainerInsertChildrenCommandArchive",
|
||||
3054: ".TSD.ContainerReorderChildrenCommandArchive",
|
||||
3055: ".TSD.ImageAdjustmentsCommandArchive",
|
||||
3056: ".TSD.CommentStorageArchive",
|
||||
3057: ".TSD.ThemeReplaceFillPresetCommandArchive",
|
||||
3058: ".TSD.DrawableAccessibilityDescriptionCommandArchive",
|
||||
3059: ".TSD.PasteStyleCommandArchive",
|
||||
3061: ".TSD.DrawableSelectionArchive",
|
||||
3062: ".TSD.GroupSelectionArchive",
|
||||
3063: ".TSD.PathSelectionArchive",
|
||||
3064: ".TSD.CommentInvalidatingCommandSelectionBehaviorArchive",
|
||||
3065: ".TSD.ImageInfoAbstractGeometryCommandArchive",
|
||||
3066: ".TSD.ImageInfoGeometryCommandArchive",
|
||||
3067: ".TSD.ImageInfoMaskGeometryCommandArchive",
|
||||
3068: ".TSD.UndoObjectArchive",
|
||||
3070: ".TSD.ReplaceAnnotationAuthorCommandArchive",
|
||||
3071: ".TSD.DrawableSelectionTransformerArchive",
|
||||
3072: ".TSD.GroupSelectionTransformerArchive",
|
||||
3073: ".TSD.ShapeSelectionTransformerArchive",
|
||||
3074: ".TSD.PathSelectionTransformerArchive",
|
||||
3080: ".TSD.MediaInfoGeometryCommandArchive",
|
||||
3082: ".TSD.GroupUngroupInformativeCommandArchive",
|
||||
3083: ".TSD.DrawableContentDescription",
|
||||
3084: ".TSD.ContainerRemoveDrawablesCommandArchive",
|
||||
3085: ".TSD.ContainerInsertDrawablesCommandArchive",
|
||||
3086: ".TSD.PencilAnnotationArchive",
|
||||
3087: ".TSD.FreehandDrawingOpacityCommandArchive",
|
||||
3088: ".TSD.DrawablePencilAnnotationCommandArchive",
|
||||
3089: ".TSD.PencilAnnotationSelectionArchive",
|
||||
3090: ".TSD.FreehandDrawingContentDescription",
|
||||
3091: ".TSD.FreehandDrawingToolkitUIState",
|
||||
3092: ".TSD.PencilAnnotationSelectionTransformerArchive",
|
||||
3094: ".TSD.FreehandDrawingAnimationCommandArchive",
|
||||
3095: ".TSD.InsertCaptionOrTitleCommandArchive",
|
||||
3096: ".TSD.RemoveCaptionOrTitleCommandArchive",
|
||||
3097: ".TSD.StandinCaptionArchive",
|
||||
3098: ".TSD.SetCaptionOrTitleVisibilityCommandArchive",
|
||||
4000: ".TSCE.CalculationEngineArchive",
|
||||
4001: ".TSCE.FormulaRewriteCommandArchive",
|
||||
4003: ".TSCE.NamedReferenceManagerArchive",
|
||||
4004: ".TSCE.TrackedReferenceStoreArchive",
|
||||
4005: ".TSCE.TrackedReferenceArchive",
|
||||
4007: ".TSCE.RemoteDataStoreArchive",
|
||||
4008: ".TSCE.FormulaOwnerDependenciesArchive",
|
||||
4009: ".TSCE.CellRecordTileArchive",
|
||||
4010: ".TSCE.RangePrecedentsTileArchive",
|
||||
4011: ".TSCE.ReferencesToDirtyArchive",
|
||||
5000: ".TSCH.PreUFF.ChartInfoArchive",
|
||||
5002: ".TSCH.PreUFF.ChartGridArchive",
|
||||
5004: ".TSCH.ChartMediatorArchive",
|
||||
5010: ".TSCH.PreUFF.ChartStyleArchive",
|
||||
5011: ".TSCH.PreUFF.ChartSeriesStyleArchive",
|
||||
5012: ".TSCH.PreUFF.ChartAxisStyleArchive",
|
||||
5013: ".TSCH.PreUFF.LegendStyleArchive",
|
||||
5014: ".TSCH.PreUFF.ChartNonStyleArchive",
|
||||
5015: ".TSCH.PreUFF.ChartSeriesNonStyleArchive",
|
||||
5016: ".TSCH.PreUFF.ChartAxisNonStyleArchive",
|
||||
5017: ".TSCH.PreUFF.LegendNonStyleArchive",
|
||||
5020: ".TSCH.ChartStylePreset",
|
||||
5021: ".TSCH.ChartDrawableArchive",
|
||||
5022: ".TSCH.ChartStyleArchive",
|
||||
5023: ".TSCH.ChartNonStyleArchive",
|
||||
5024: ".TSCH.LegendStyleArchive",
|
||||
5025: ".TSCH.LegendNonStyleArchive",
|
||||
5026: ".TSCH.ChartAxisStyleArchive",
|
||||
5027: ".TSCH.ChartAxisNonStyleArchive",
|
||||
5028: ".TSCH.ChartSeriesStyleArchive",
|
||||
5029: ".TSCH.ChartSeriesNonStyleArchive",
|
||||
5030: ".TSCH.ReferenceLineStyleArchive",
|
||||
5031: ".TSCH.ReferenceLineNonStyleArchive",
|
||||
5103: ".TSCH.CommandSetChartTypeArchive",
|
||||
5104: ".TSCH.CommandSetSeriesNameArchive",
|
||||
5105: ".TSCH.CommandSetCategoryNameArchive",
|
||||
5107: ".TSCH.CommandSetScatterFormatArchive",
|
||||
5108: ".TSCH.CommandSetLegendFrameArchive",
|
||||
5109: ".TSCH.CommandSetGridValueArchive",
|
||||
5110: ".TSCH.CommandSetGridDirectionArchive",
|
||||
5115: ".TSCH.CommandAddGridRowsArchive",
|
||||
5116: ".TSCH.CommandAddGridColumnsArchive",
|
||||
5118: ".TSCH.CommandMoveGridRowsArchive",
|
||||
5119: ".TSCH.CommandMoveGridColumnsArchive",
|
||||
5122: ".TSCH.CommandSetPieWedgeExplosion",
|
||||
5123: ".TSCH.CommandStyleSwapArchive",
|
||||
5125: ".TSCH.CommandChartApplyPreset",
|
||||
5126: ".TSCH.ChartCommandArchive",
|
||||
5127: ".TSCH.CommandReplaceGridValuesArchive",
|
||||
5129: ".TSCH.StylePasteboardDataArchive",
|
||||
5130: ".TSCH.CommandSetMultiDataSetIndexArchive",
|
||||
5131: ".TSCH.CommandReplaceThemePresetArchive",
|
||||
5132: ".TSCH.CommandInvalidateWPCaches",
|
||||
5135: ".TSCH.CommandMutatePropertiesArchive",
|
||||
5136: ".TSCH.CommandScaleAllTextArchive",
|
||||
5137: ".TSCH.CommandSetFontFamilyArchive",
|
||||
5138: ".TSCH.CommandApplyFillSetArchive",
|
||||
5139: ".TSCH.CommandReplaceCustomFormatArchive",
|
||||
5140: ".TSCH.CommandAddReferenceLineArchive",
|
||||
5141: ".TSCH.CommandDeleteReferenceLineArchive",
|
||||
5142: ".TSCH.CommandDeleteGridColumnsArchive",
|
||||
5143: ".TSCH.CommandDeleteGridRowsArchive",
|
||||
5145: ".TSCH.ChartSelectionArchive",
|
||||
5146: ".TSCH.ChartTextSelectionTransformerArchive",
|
||||
5147: ".TSCH.ChartSubselectionTransformerArchive",
|
||||
5148: ".TSCH.ChartDrawableSelectionTransformerArchive",
|
||||
5149: ".TSCH.ChartSubselectionTransformerHelperArchive",
|
||||
5150: ".TSCH.ChartRefLineSubselectionTransformerHelperArchive",
|
||||
5151: ".TSCH.CDESelectionTransformerArchive",
|
||||
5152: ".TSCH.ChartSubselectionIdentityTransformerHelperArchive",
|
||||
5154: ".TSCH.CommandPasteStyleArchive",
|
||||
5155: ".TSCH.CommandInducedReplaceChartGrid",
|
||||
5156: ".TSCH.CommandReplaceImageDataArchive",
|
||||
5157: ".TSCH.CommandInduced3DChartGeometry",
|
||||
6000: ".TST.TableInfoArchive",
|
||||
6001: ".TST.TableModelArchive",
|
||||
6002: ".TST.Tile",
|
||||
6003: ".TST.TableStyleArchive",
|
||||
6004: ".TST.CellStyleArchive",
|
||||
6005: ".TST.TableDataList",
|
||||
6006: ".TST.HeaderStorageBucket",
|
||||
6007: ".TST.WPTableInfoArchive",
|
||||
6008: ".TST.TableStylePresetArchive",
|
||||
6009: ".TST.TableStrokePresetArchive",
|
||||
6010: ".TST.ConditionalStyleSetArchive",
|
||||
6011: ".TST.TableDataListSegment",
|
||||
6030: ".TST.SelectionArchive",
|
||||
6031: ".TST.CellMapArchive",
|
||||
6032: ".TST.DeathhawkRdar39989167CellSelectionArchive",
|
||||
6033: ".TST.ConcurrentCellMapArchive",
|
||||
6034: ".TST.ConcurrentCellListArchive",
|
||||
6100: ".TST.TableCommandArchive",
|
||||
6101: ".TST.CommandDeleteCellsArchive",
|
||||
6102: ".TST.CommandInsertColumnsOrRowsArchive",
|
||||
6103: ".TST.CommandRemoveColumnsOrRowsArchive",
|
||||
6104: ".TST.CommandResizeColumnOrRowArchive",
|
||||
6107: ".TST.CommandSetTableNameArchive",
|
||||
6111: ".TST.CommandChangeFreezeHeaderStateArchive",
|
||||
6114: ".TST.CommandSetTableNameEnabledArchive",
|
||||
6117: ".TST.CommandApplyTableStylePresetArchive",
|
||||
6120: ".TST.CommandSetRepeatingHeaderEnabledArchive",
|
||||
6123: ".TST.CommandSortArchive",
|
||||
6125: ".TST.CommandStyleTableArchive",
|
||||
6126: ".TST.CommandSetNumberOfDecimalPlacesArchive",
|
||||
6127: ".TST.CommandSetShowThousandsSeparatorArchive",
|
||||
6128: ".TST.CommandSetNegativeNumberStyleArchive",
|
||||
6129: ".TST.CommandSetFractionAccuracyArchive",
|
||||
6131: ".TST.CommandSetCurrencyCodeArchive",
|
||||
6132: ".TST.CommandSetUseAccountingStyleArchive",
|
||||
6136: ".TST.CommandSetTableFontNameArchive",
|
||||
6137: ".TST.CommandSetTableFontSizeArchive",
|
||||
6142: ".TST.CommandSetTableNameHeightArchive",
|
||||
6144: ".TST.MergeRegionMapArchive",
|
||||
6145: ".TST.CommandHideShowArchive",
|
||||
6146: ".TST.CommandSetBaseArchive",
|
||||
6147: ".TST.CommandSetBasePlacesArchive",
|
||||
6148: ".TST.CommandSetBaseUseMinusSignArchive",
|
||||
6149: ".TST.CommandSetTextStylePropertiesArchive",
|
||||
6150: ".TST.CommandCategoryChangeSummaryAggregateType",
|
||||
6152: ".TST.CommandCategoryResizeColumnOrRowArchive",
|
||||
6153: ".TST.CommandCategoryMoveRowsArchive",
|
||||
6156: ".TST.CommandSetPencilAnnotationsArchive",
|
||||
6157: ".TST.CommandCategoryWillChangeGroupValue",
|
||||
6158: ".TST.CommandApplyConcurrentCellMapArchive",
|
||||
6159: ".TST.CommandSetGroupSortOrderArchive",
|
||||
6179: ".TST.FormulaEqualsTokenAttachmentArchive",
|
||||
6181: ".TST.TokenAttachmentArchive",
|
||||
6182: ".TST.ExpressionNodeArchive",
|
||||
6183: ".TST.BooleanNodeArchive",
|
||||
6184: ".TST.NumberNodeArchive",
|
||||
6185: ".TST.StringNodeArchive",
|
||||
6186: ".TST.ArrayNodeArchive",
|
||||
6187: ".TST.ListNodeArchive",
|
||||
6188: ".TST.OperatorNodeArchive",
|
||||
6189: ".TST.FunctionNodeArchive",
|
||||
6190: ".TST.DateNodeArchive",
|
||||
6191: ".TST.ReferenceNodeArchive",
|
||||
6192: ".TST.DurationNodeArchive",
|
||||
6193: ".TST.ArgumentPlaceholderNodeArchive",
|
||||
6194: ".TST.PostfixOperatorNodeArchive",
|
||||
6195: ".TST.PrefixOperatorNodeArchive",
|
||||
6196: ".TST.FunctionEndNodeArchive",
|
||||
6197: ".TST.EmptyExpressionNodeArchive",
|
||||
6198: ".TST.LayoutHintArchive",
|
||||
6199: ".TST.CompletionTokenAttachmentArchive",
|
||||
6201: ".TST.TableDataList",
|
||||
6204: ".TST.HiddenStateFormulaOwnerArchive",
|
||||
6205: ".TST.CommandSetAutomaticDurationUnitsArchive",
|
||||
6206: ".TST.PopUpMenuModel",
|
||||
6218: ".TST.RichTextPayloadArchive",
|
||||
6220: ".TST.FilterSetArchive",
|
||||
6221: ".TST.CommandSetFiltersEnabledArchive",
|
||||
6224: ".TST.CommandRewriteFilterFormulasForTableResizeArchive",
|
||||
6226: ".TST.CommandTextPreflightInsertCellArchive",
|
||||
6228: ".TST.CommandDeleteCellContentsArchive",
|
||||
6229: ".TST.CommandPostflightSetCellArchive",
|
||||
6235: ".TST.IdentifierNodeArchive",
|
||||
6238: ".TST.CommandSetDateTimeFormatArchive",
|
||||
6239: ".TST.TableCommandSelectionBehaviorArchive",
|
||||
6244: ".TST.CommandApplyCellCommentArchive",
|
||||
6246: ".TST.CommandSetFormulaTokenizationArchive",
|
||||
6247: ".TST.TableStyleNetworkArchive",
|
||||
6250: ".TST.CommandSetFilterSetTypeArchive",
|
||||
6255: ".TST.CommandSetTextStyleArchive",
|
||||
6256: ".TST.CommandJustForNotifyingArchive",
|
||||
6258: ".TST.CommandSetSortOrderArchive",
|
||||
6262: ".TST.CommandAddTableStylePresetArchive",
|
||||
6264: ".TST.CellDiffMapArchive",
|
||||
6265: ".TST.CommandApplyCellContentsArchive",
|
||||
6266: ".TST.CommandRemoveTableStylePresetArchive",
|
||||
6267: ".TST.ColumnRowUIDMapArchive",
|
||||
6268: ".TST.CommandMoveColumnsOrRowsArchive",
|
||||
6269: ".TST.CommandReplaceCustomFormatArchive",
|
||||
6270: ".TST.CommandReplaceTableStylePresetArchive",
|
||||
6271: ".TST.FormulaSelectionArchive",
|
||||
6273: ".TST.CellListArchive",
|
||||
6275: ".TST.CommandApplyCellDiffMapArchive",
|
||||
6276: ".TST.CommandSetFilterSetArchive",
|
||||
6277: ".TST.CommandMutateCellFormatArchive",
|
||||
6278: ".TST.CommandSetStorageLanguageArchive",
|
||||
6280: ".TST.CommandMergeArchive",
|
||||
6281: ".TST.CommandUnmergeArchive",
|
||||
6282: ".TST.CommandApplyCellMapArchive",
|
||||
6283: ".TST.ControlCellSelectionArchive",
|
||||
6284: ".TST.TableNameSelectionArchive",
|
||||
6285: ".TST.CommandRewriteFormulasForTransposeArchive",
|
||||
6287: ".TST.CommandTransposeTableArchive",
|
||||
6289: ".TST.CommandSetDurationStyleArchive",
|
||||
6290: ".TST.CommandSetDurationUnitSmallestLargestArchive",
|
||||
6291: ".TST.CommandRewriteTableFormulasForRewriteSpecArchive",
|
||||
6292: ".TST.CommandRewriteConditionalStylesForRewriteSpecArchive",
|
||||
6293: ".TST.CommandRewriteFilterFormulasForRewriteSpecArchive",
|
||||
6294: ".TST.CommandRewriteSortOrderForRewriteSpecArchive",
|
||||
6295: ".TST.StrokeSelectionArchive",
|
||||
6297: ".TST.LetNodeArchive",
|
||||
6298: ".TST.VariableNodeArchive",
|
||||
6299: ".TST.InNodeArchive",
|
||||
6300: ".TST.CommandInverseMergeArchive",
|
||||
6301: ".TST.CommandMoveCellsArchive",
|
||||
6302: ".TST.DefaultCellStylesContainerArchive",
|
||||
6303: ".TST.CommandRewriteMergeFormulasArchive",
|
||||
6304: ".TST.CommandChangeTableAreaForColumnOrRowArchive",
|
||||
6305: ".TST.StrokeSidecarArchive",
|
||||
6306: ".TST.StrokeLayerArchive",
|
||||
6307: ".TST.CommandChooseTableIdRemapperArchive",
|
||||
6310: ".TST.CommandSetWasCutArchive",
|
||||
6311: ".TST.AutofillSelectionArchive",
|
||||
6312: ".TST.StockCellSelectionArchive",
|
||||
6313: ".TST.CommandSetNowArchive",
|
||||
6314: ".TST.CommandSetStructuredTextImportRecordArchive",
|
||||
6315: ".TST.CommandRewriteCategoryFormulasArchive",
|
||||
6316: ".TST.SummaryModelArchive",
|
||||
6317: ".TST.SummaryCellVendorArchive",
|
||||
6318: ".TST.CategoryOrderArchive",
|
||||
6320: ".TST.CommandCategoryCollapseExpandGroupArchive",
|
||||
6321: ".TST.CommandCategorySetGroupingColumnsArchive",
|
||||
6323: ".TST.CommandRewriteHiddenStatesForGroupByChangeArchive",
|
||||
6350: ".TST.IdempotentSelectionTransformerArchive",
|
||||
6351: ".TST.TableSubSelectionTransformerBaseArchive",
|
||||
6352: ".TST.TableNameSelectionTransformerArchive",
|
||||
6353: ".TST.RegionSelectionTransformerArchive",
|
||||
6354: ".TST.RowColumnSelectionTransformerArchive",
|
||||
6355: ".TST.ControlCellSelectionTransformerArchive",
|
||||
6357: ".TST.ChangePropagationMapWrapper",
|
||||
6358: ".TST.WPSelectionTransformerArchive",
|
||||
6359: ".TST.StockCellSelectionTransformerArchive",
|
||||
6360: ".TST.CommandSetRangeControlMinMaxIncArchive",
|
||||
6361: ".TST.CommandCategorySetLabelRowVisibility",
|
||||
6362: ".TST.CommandRewritePencilAnnotationFormulasArchive",
|
||||
6363: ".TST.PencilAnnotationArchive",
|
||||
6364: ".TST.StrokeSelectionTransformerArchive",
|
||||
6365: ".TST.HeaderNameMgrTileArchive",
|
||||
6366: ".TST.HeaderNameMgrArchive",
|
||||
6367: ".TST.CellDiffArray",
|
||||
6368: ".TST.CellDiffArraySegment",
|
||||
6369: ".TST.PivotOrderArchive",
|
||||
6370: ".TST.PivotOwnerArchive",
|
||||
6371: ".TST.CommandPivotSetPivotRulesArchive",
|
||||
6372: ".TST.CategoryOwnerRefArchive",
|
||||
6373: ".TST.GroupByArchive",
|
||||
6374: ".TST.PivotGroupingColumnOptionsMapArchive",
|
||||
6375: ".TST.CommandPivotSetGroupingColumnOptionsArchive",
|
||||
6376: ".TST.CommandPivotHideShowGrandTotalsArchive",
|
||||
6377: ".TST.CommandPivotSortArchive",
|
||||
6379: ".TST.CommandRewritePivotOwnerFormulasArchive",
|
||||
6380: ".TST.CommandRewriteTrackedReferencesArchive",
|
||||
6381: ".TST.CommandExtendTableIDHistoryArchive",
|
||||
6382: ".TST.GroupByArchive.AggregatorArchive",
|
||||
6383: ".TST.GroupByArchive.GroupNodeArchive",
|
||||
10011: ".TSWP.SectionPlaceholderArchive",
|
||||
10020: ".TSWP.ShapeSelectionTransformerArchive",
|
||||
10021: ".TSWP.SelectionTransformerArchive",
|
||||
10022: ".TSWP.ShapeContentDescription",
|
||||
10023: ".TSWP.TateChuYokoFieldArchive",
|
||||
10024: ".TSWP.DropCapStyleArchive",
|
||||
11000: ".TSP.PasteboardObject",
|
||||
11006: ".TSP.PackageMetadata",
|
||||
11007: ".TSP.PasteboardMetadata",
|
||||
11008: ".TSP.ObjectContainer",
|
||||
11009: ".TSP.ViewStateMetadata",
|
||||
11010: ".TSP.ObjectCollection",
|
||||
11011: ".TSP.DocumentMetadata",
|
||||
11012: ".TSP.SupportMetadata",
|
||||
11013: ".TSP.ObjectSerializationMetadata",
|
||||
11014: ".TSP.DataMetadata",
|
||||
11015: ".TSP.DataMetadataMap",
|
||||
11016: ".TSP.LargeNumberArraySegment",
|
||||
11017: ".TSP.LargeStringArraySegment",
|
||||
11018: ".TSP.LargeLazyObjectArraySegment",
|
||||
11019: ".TSP.LargeNumberArray",
|
||||
11020: ".TSP.LargeStringArray",
|
||||
11021: ".TSP.LargeLazyObjectArray",
|
||||
11024: ".TSP.LargeUUIDArraySegment",
|
||||
11025: ".TSP.LargeUUIDArray",
|
||||
11026: ".TSP.LargeObjectArraySegment",
|
||||
11027: ".TSP.LargeObjectArray",
|
||||
12002: ".TN.CommandSheetInsertDrawablesArchive",
|
||||
12003: ".TN.CommandDocumentInsertSheetArchive",
|
||||
12004: ".TN.CommandDocumentRemoveSheetArchive",
|
||||
12005: ".TN.CommandSetSheetNameArchive",
|
||||
12006: ".TN.ChartMediatorArchive",
|
||||
12008: ".TN.CommandDocumentReorderSheetArchive",
|
||||
12009: ".TN.ThemeArchive",
|
||||
12012: ".TN.CommandSheetRemoveDrawablesArchive",
|
||||
12013: ".TN.CommandSheetMoveDrawableZOrderArchive",
|
||||
12014: ".TN.CommandChartMediatorSetEditingState",
|
||||
12015: ".TN.CommandFormChooseTargetTableArchive",
|
||||
12017: ".TN.CommandSetPageOrientationArchive",
|
||||
12018: ".TN.CommandSetContentScaleArchive",
|
||||
12026: ".TN.UIStateArchive",
|
||||
12028: ".TN.SheetSelectionArchive",
|
||||
12030: ".TN.CommandSetDocumentPaperSize",
|
||||
12031: ".TN.CommandSetPrinterMarginsArchive",
|
||||
12032: ".TN.CommandSetHeaderFooterInsetsArchive",
|
||||
12033: ".TN.CommandSetPageOrderArchive",
|
||||
12034: ".TN.CommandSetUsingStartPageNumberArchive",
|
||||
12035: ".TN.CommandSetStartPageNumberArchive",
|
||||
12036: ".TN.ChartSelectionArchive",
|
||||
12037: ".TN.CommandChartMediatorSetGridDirection",
|
||||
12038: ".TN.CommandChartMediatorSetFormula",
|
||||
12039: ".TN.CommandChartMediatorSetSeriesOrder",
|
||||
12040: ".TN.FormSelectionArchive",
|
||||
12041: ".TN.DocumentSelectionTransformerArchive",
|
||||
12042: ".TN.SheetSelectionTransformerArchive",
|
||||
12043: ".TN.CommandInducedSheetChangeArchive",
|
||||
12044: ".TNSOS.InducedVerifyDocumentWithServerCommandArchive",
|
||||
12045: ".TNSOS.InducedVerifyDrawableZOrdersWithServerCommandArchive",
|
||||
12046: ".TN.PasteboardNativeStorageArchive",
|
||||
12047: ".TN.CanvasSelectionTransformerArchive",
|
||||
12048: ".TN.CommandSetSheetDirectionArchive",
|
||||
12049: ".TN.CommandSetSheetShouldPrintCommentsArchive",
|
||||
12050: ".TN.SheetStyleArchive",
|
||||
12051: ".TN.CommandSheetSetBackgroundFillArchive",
|
||||
12052: ".TN.CommandSetPrintBackgroundsArchive",
|
||||
12053: ".TN.FormBuilderSelectionArchive",
|
||||
12054: ".TN.FormTableChooserSelectionArchive",
|
||||
12055: ".TN.FormTableChooserSelectionTransformerArchive",
|
||||
12056: ".TN.FormBuilderSelectionTransformerArchive",
|
||||
12057: ".TN.FormViewerSelectionTransformerArchive",
|
||||
12058: ".TN.FormSheetSelectionTransformerArchive",
|
||||
12059: ".TN.FormCommandActivityBehaviorArchive",
|
||||
} as {[key: number]: string};
|
582
src/messages/pages.ts
Normal file
582
src/messages/pages.ts
Normal file
@ -0,0 +1,582 @@
|
||||
export default {
|
||||
7: ".TP.PlaceholderArchive",
|
||||
200: ".TSK.DocumentArchive",
|
||||
201: ".TSK.LocalCommandHistory",
|
||||
202: ".TSK.CommandGroupArchive",
|
||||
203: ".TSK.CommandContainerArchive",
|
||||
205: ".TSK.TreeNode",
|
||||
210: ".TSK.ViewStateArchive",
|
||||
211: ".TSK.DocumentSupportArchive",
|
||||
212: ".TSK.AnnotationAuthorArchive",
|
||||
213: ".TSK.AnnotationAuthorStorageArchive",
|
||||
215: ".TSK.SetAnnotationAuthorColorCommandArchive",
|
||||
218: ".TSK.CollaborationCommandHistory",
|
||||
219: ".TSK.DocumentSelectionArchive",
|
||||
220: ".TSK.CommandSelectionBehaviorArchive",
|
||||
221: ".TSK.NullCommandArchive",
|
||||
222: ".TSK.CustomFormatListArchive",
|
||||
223: ".TSK.GroupCommitCommandArchive",
|
||||
224: ".TSK.InducedCommandCollectionArchive",
|
||||
225: ".TSK.InducedCommandCollectionCommitCommandArchive",
|
||||
226: ".TSK.CollaborationDocumentSessionState",
|
||||
227: ".TSK.CollaborationCommandHistoryCoalescingGroup",
|
||||
228: ".TSK.CollaborationCommandHistoryCoalescingGroupNode",
|
||||
229: ".TSK.CollaborationCommandHistoryOriginatingCommandAcknowledgementObserver",
|
||||
230: ".TSK.DocumentSupportCollaborationState",
|
||||
231: ".TSK.ChangeDocumentPackageTypeCommandArchive",
|
||||
232: ".TSK.UpgradeDocPostProcessingCommandArchive",
|
||||
233: ".TSK.FinalCommandPairArchive",
|
||||
234: ".TSK.OutgoingCommandQueueItem",
|
||||
235: ".TSK.TransformerEntry",
|
||||
238: ".TSK.CreateLocalStorageSnapshotCommandArchive",
|
||||
240: ".TSK.SelectionPathTransformerArchive",
|
||||
241: ".TSK.NativeContentDescription",
|
||||
242: ".TSD.PencilAnnotationStorageArchive",
|
||||
245: ".TSK.OperationStorage",
|
||||
246: ".TSK.OperationStorageEntryArray",
|
||||
247: ".TSK.OperationStorageEntryArraySegment",
|
||||
248: ".TSK.BlockDiffsAtCurrentRevisionCommand",
|
||||
249: ".TSK.OutgoingCommandQueue",
|
||||
250: ".TSK.OutgoingCommandQueueSegment",
|
||||
251: ".TSK.PropagatedCommandCollectionArchive",
|
||||
252: ".TSK.LocalCommandHistoryItem",
|
||||
253: ".TSK.LocalCommandHistoryArray",
|
||||
254: ".TSK.LocalCommandHistoryArraySegment",
|
||||
255: ".TSK.CollaborationCommandHistoryItem",
|
||||
256: ".TSK.CollaborationCommandHistoryArray",
|
||||
257: ".TSK.CollaborationCommandHistoryArraySegment",
|
||||
258: ".TSK.PencilAnnotationUIState",
|
||||
259: ".TSKSOS.FixCorruptedDataCommandArchive",
|
||||
260: ".TSK.CommandAssetChunkArchive",
|
||||
261: ".TSK.AssetUploadStatusCommandArchive",
|
||||
262: ".TSK.AssetUnmaterializedOnServerCommandArchive",
|
||||
263: ".TSK.CommandBehaviorArchive",
|
||||
264: ".TSK.CommandBehaviorSelectionPathStorageArchive",
|
||||
265: ".TSK.CommandActivityBehaviorArchive",
|
||||
273: ".TSK.ActivityOnlyCommandArchive",
|
||||
275: ".TSK.SetActivityAuthorShareParticipantIDCommandArchive",
|
||||
279: ".TSK.ActivityAuthorCacheArchive",
|
||||
280: ".TSK.ActivityStreamArchive",
|
||||
281: ".TSK.ActivityArchive",
|
||||
282: ".TSK.ActivityCommitCommandArchive",
|
||||
283: ".TSK.ActivityStreamActivityArray",
|
||||
284: ".TSK.ActivityStreamActivityArraySegment",
|
||||
285: ".TSK.ActivityStreamRemovedAuthorAuditorPendingStateArchive",
|
||||
286: ".TSK.ActivityAuthorArchive",
|
||||
287: ".TSKSOS.ResetActivityStreamCommandArchive",
|
||||
288: ".TSKSOS.RemoveAuthorIdentifiersCommandArchive",
|
||||
289: ".TSK.ActivityCursorCollectionPersistenceWrapperArchive",
|
||||
400: ".TSS.StyleArchive",
|
||||
401: ".TSS.StylesheetArchive",
|
||||
402: ".TSS.ThemeArchive",
|
||||
412: ".TSS.StyleUpdatePropertyMapCommandArchive",
|
||||
413: ".TSS.ThemeReplacePresetCommandArchive",
|
||||
414: ".TSS.ThemeAddStylePresetCommandArchive",
|
||||
415: ".TSS.ThemeRemoveStylePresetCommandArchive",
|
||||
416: ".TSS.ThemeReplaceColorPresetCommandArchive",
|
||||
417: ".TSS.ThemeMovePresetCommandArchive",
|
||||
419: ".TSS.ThemeReplaceStylePresetAndDisconnectStylesCommandArchive",
|
||||
600: ".TSA.DocumentArchive",
|
||||
601: ".TSA.FunctionBrowserStateArchive",
|
||||
602: ".TSA.PropagatePresetCommandArchive",
|
||||
603: ".TSA.ShortcutControllerArchive",
|
||||
604: ".TSA.ShortcutCommandArchive",
|
||||
605: ".TSA.AddCustomFormatCommandArchive",
|
||||
606: ".TSA.UpdateCustomFormatCommandArchive",
|
||||
607: ".TSA.ReplaceCustomFormatCommandArchive",
|
||||
611: ".TSASOS.VerifyObjectsWithServerCommandArchive",
|
||||
612: ".TSA.InducedVerifyObjectsWithServerCommandArchive",
|
||||
613: ".TSASOS.VerifyDocumentWithServerCommandArchive",
|
||||
614: ".TSASOS.VerifyDrawableZOrdersWithServerCommandArchive",
|
||||
615: ".TSASOS.InducedVerifyDrawableZOrdersWithServerCommandArchive",
|
||||
616: ".TSA.NeedsMediaCompatibilityUpgradeCommandArchive",
|
||||
617: ".TSA.ChangeDocumentLocaleCommandArchive",
|
||||
618: ".TSA.StyleUpdatePropertyMapCommandArchive",
|
||||
619: ".TSA.RemoteDataChangeCommandArchive",
|
||||
623: ".TSA.GalleryItem",
|
||||
624: ".TSA.GallerySelectionTransformer",
|
||||
625: ".TSA.GalleryItemSelection",
|
||||
626: ".TSA.GalleryItemSelectionTransformer",
|
||||
627: ".TSA.GalleryInfoSetValueCommandArchive",
|
||||
628: ".TSA.GalleryItemSetGeometryCommand",
|
||||
629: ".TSA.GalleryItemSetValueCommand",
|
||||
630: ".TSA.InducedVerifyTransformHistoryWithServerCommandArchive",
|
||||
631: ".TSASOS.CommandReapplyMasterArchive",
|
||||
632: ".TSASOS.PropagateMasterChangeCommandArchive",
|
||||
633: ".TSA.CaptionInfoArchive",
|
||||
634: ".TSA.CaptionPlacementArchive",
|
||||
635: ".TSA.TitlePlacementCommandArchive",
|
||||
636: ".TSA.GalleryInfoInsertItemsCommandArchive",
|
||||
637: ".TSA.GalleryInfoRemoveItemsCommandArchive",
|
||||
638: ".TSASOS.VerifyActivityStreamWithServerCommandArchive",
|
||||
639: ".TSASOS.InducedVerifyActivityStreamWithServerCommandArchive",
|
||||
2001: ".TSWP.StorageArchive",
|
||||
2002: ".TSWP.SelectionArchive",
|
||||
2003: ".TSWP.DrawableAttachmentArchive",
|
||||
2004: ".TSWP.TextualAttachmentArchive",
|
||||
2005: ".TSWP.StorageArchive",
|
||||
2006: ".TSWP.UIGraphicalAttachment",
|
||||
2007: ".TSWP.TextualAttachmentArchive",
|
||||
2008: ".TSWP.FootnoteReferenceAttachmentArchive",
|
||||
2009: ".TSWP.TextualAttachmentArchive",
|
||||
2010: ".TSWP.TSWPTOCPageNumberAttachmentArchive",
|
||||
2011: ".TSWP.ShapeInfoArchive",
|
||||
2013: ".TSWP.HighlightArchive",
|
||||
2014: ".TSWP.CommentInfoArchive",
|
||||
2015: ".TSWP.EquationInfoArchive",
|
||||
2016: ".TSWP.PencilAnnotationArchive",
|
||||
2021: ".TSWP.CharacterStyleArchive",
|
||||
2022: ".TSWP.ParagraphStyleArchive",
|
||||
2023: ".TSWP.ListStyleArchive",
|
||||
2024: ".TSWP.ColumnStyleArchive",
|
||||
2025: ".TSWP.ShapeStyleArchive",
|
||||
2026: ".TSWP.TOCEntryStyleArchive",
|
||||
2031: ".TSWP.PlaceholderSmartFieldArchive",
|
||||
2032: ".TSWP.HyperlinkFieldArchive",
|
||||
2033: ".TSWP.FilenameSmartFieldArchive",
|
||||
2034: ".TSWP.DateTimeSmartFieldArchive",
|
||||
2035: ".TSWP.BookmarkFieldArchive",
|
||||
2036: ".TSWP.MergeSmartFieldArchive",
|
||||
2037: ".TSWP.CitationRecordArchive",
|
||||
2038: ".TSWP.CitationSmartFieldArchive",
|
||||
2039: ".TSWP.UnsupportedHyperlinkFieldArchive",
|
||||
2040: ".TSWP.BibliographySmartFieldArchive",
|
||||
2041: ".TSWP.TOCSmartFieldArchive",
|
||||
2042: ".TSWP.RubyFieldArchive",
|
||||
2043: ".TSWP.NumberAttachmentArchive",
|
||||
2050: ".TSWP.TextStylePresetArchive",
|
||||
2051: ".TSWP.TOCSettingsArchive",
|
||||
2052: ".TSWP.TOCEntryInstanceArchive",
|
||||
2053: ".TSWPSOS.StyleDiffArchive",
|
||||
2060: ".TSWP.ChangeArchive",
|
||||
2061: ".TSK.DeprecatedChangeAuthorArchive",
|
||||
2062: ".TSWP.ChangeSessionArchive",
|
||||
2101: ".TSWP.TextCommandArchive",
|
||||
2107: ".TSWP.ApplyPlaceholderTextCommandArchive",
|
||||
2116: ".TSWP.ApplyRubyTextCommandArchive",
|
||||
2118: ".TSWP.ModifyRubyTextCommandArchive",
|
||||
2119: ".TSWP.UpdateDateTimeFieldCommandArchive",
|
||||
2120: ".TSWP.ModifyTOCSettingsBaseCommandArchive",
|
||||
2121: ".TSWP.ModifyTOCSettingsForTOCInfoCommandArchive",
|
||||
2123: ".TSWP.SetObjectPropertiesCommandArchive",
|
||||
2124: ".TSWP.UpdateFlowInfoCommandArchive",
|
||||
2125: ".TSWP.AddFlowInfoCommandArchive",
|
||||
2126: ".TSWP.RemoveFlowInfoCommandArchive",
|
||||
2127: ".TSWP.ContainedObjectsCommandArchive",
|
||||
2128: ".TSWP.EquationInfoGeometryCommandArchive",
|
||||
2206: ".TSWP.AnchorAttachmentCommandArchive",
|
||||
2217: ".TSWP.TextCommentReplyCommandArchive",
|
||||
2231: ".TSWP.ShapeApplyPresetCommandArchive",
|
||||
2240: ".TSWP.TOCInfoArchive",
|
||||
2241: ".TSWP.TOCAttachmentArchive",
|
||||
2242: ".TSWP.TOCLayoutHintArchive",
|
||||
2400: ".TSWP.StyleBaseCommandArchive",
|
||||
2401: ".TSWP.StyleCreateCommandArchive",
|
||||
2402: ".TSWP.StyleRenameCommandArchive",
|
||||
2404: ".TSWP.StyleDeleteCommandArchive",
|
||||
2405: ".TSWP.StyleReorderCommandArchive",
|
||||
2406: ".TSWP.StyleUpdatePropertyMapCommandArchive",
|
||||
2407: ".TSWP.StorageActionCommandArchive",
|
||||
2408: ".TSWP.ShapeStyleSetValueCommandArchive",
|
||||
2409: ".TSWP.HyperlinkSelectionArchive",
|
||||
2410: ".TSWP.FlowInfoArchive",
|
||||
2411: ".TSWP.FlowInfoContainerArchive",
|
||||
2412: ".TSWP.PencilAnnotationSelectionTransformerArchive",
|
||||
3002: ".TSD.DrawableArchive",
|
||||
3003: ".TSD.ContainerArchive",
|
||||
3004: ".TSD.ShapeArchive",
|
||||
3005: ".TSD.ImageArchive",
|
||||
3006: ".TSD.MaskArchive",
|
||||
3007: ".TSD.MovieArchive",
|
||||
3008: ".TSD.GroupArchive",
|
||||
3009: ".TSD.ConnectionLineArchive",
|
||||
3015: ".TSD.ShapeStyleArchive",
|
||||
3016: ".TSD.MediaStyleArchive",
|
||||
3021: ".TSD.InfoGeometryCommandArchive",
|
||||
3022: ".TSD.DrawablePathSourceCommandArchive",
|
||||
3024: ".TSD.ImageMaskCommandArchive",
|
||||
3025: ".TSD.ImageMediaCommandArchive",
|
||||
3026: ".TSD.ImageReplaceCommandArchive",
|
||||
3027: ".TSD.MediaOriginalSizeCommandArchive",
|
||||
3028: ".TSD.ShapeStyleSetValueCommandArchive",
|
||||
3030: ".TSD.MediaStyleSetValueCommandArchive",
|
||||
3031: ".TSD.ShapeApplyPresetCommandArchive",
|
||||
3032: ".TSD.MediaApplyPresetCommandArchive",
|
||||
3034: ".TSD.MovieSetValueCommandArchive",
|
||||
3036: ".TSD.ExteriorTextWrapCommandArchive",
|
||||
3037: ".TSD.MediaFlagsCommandArchive",
|
||||
3040: ".TSD.DrawableHyperlinkCommandArchive",
|
||||
3041: ".TSD.ConnectionLineConnectCommandArchive",
|
||||
3042: ".TSD.InstantAlphaCommandArchive",
|
||||
3043: ".TSD.DrawableLockCommandArchive",
|
||||
3044: ".TSD.ImageNaturalSizeCommandArchive",
|
||||
3045: ".TSD.CanvasSelectionArchive",
|
||||
3047: ".TSD.GuideStorageArchive",
|
||||
3048: ".TSD.StyledInfoSetStyleCommandArchive",
|
||||
3049: ".TSD.DrawableInfoCommentCommandArchive",
|
||||
3050: ".TSD.GuideCommandArchive",
|
||||
3051: ".TSD.DrawableAspectRatioLockedCommandArchive",
|
||||
3052: ".TSD.ContainerRemoveChildrenCommandArchive",
|
||||
3053: ".TSD.ContainerInsertChildrenCommandArchive",
|
||||
3054: ".TSD.ContainerReorderChildrenCommandArchive",
|
||||
3055: ".TSD.ImageAdjustmentsCommandArchive",
|
||||
3056: ".TSD.CommentStorageArchive",
|
||||
3057: ".TSD.ThemeReplaceFillPresetCommandArchive",
|
||||
3058: ".TSD.DrawableAccessibilityDescriptionCommandArchive",
|
||||
3059: ".TSD.PasteStyleCommandArchive",
|
||||
3061: ".TSD.DrawableSelectionArchive",
|
||||
3062: ".TSD.GroupSelectionArchive",
|
||||
3063: ".TSD.PathSelectionArchive",
|
||||
3064: ".TSD.CommentInvalidatingCommandSelectionBehaviorArchive",
|
||||
3065: ".TSD.ImageInfoAbstractGeometryCommandArchive",
|
||||
3066: ".TSD.ImageInfoGeometryCommandArchive",
|
||||
3067: ".TSD.ImageInfoMaskGeometryCommandArchive",
|
||||
3068: ".TSD.UndoObjectArchive",
|
||||
3070: ".TSD.ReplaceAnnotationAuthorCommandArchive",
|
||||
3071: ".TSD.DrawableSelectionTransformerArchive",
|
||||
3072: ".TSD.GroupSelectionTransformerArchive",
|
||||
3073: ".TSD.ShapeSelectionTransformerArchive",
|
||||
3074: ".TSD.PathSelectionTransformerArchive",
|
||||
3080: ".TSD.MediaInfoGeometryCommandArchive",
|
||||
3082: ".TSD.GroupUngroupInformativeCommandArchive",
|
||||
3083: ".TSD.DrawableContentDescription",
|
||||
3084: ".TSD.ContainerRemoveDrawablesCommandArchive",
|
||||
3085: ".TSD.ContainerInsertDrawablesCommandArchive",
|
||||
3086: ".TSD.PencilAnnotationArchive",
|
||||
3087: ".TSD.FreehandDrawingOpacityCommandArchive",
|
||||
3088: ".TSD.DrawablePencilAnnotationCommandArchive",
|
||||
3089: ".TSD.PencilAnnotationSelectionArchive",
|
||||
3090: ".TSD.FreehandDrawingContentDescription",
|
||||
3091: ".TSD.FreehandDrawingToolkitUIState",
|
||||
3092: ".TSD.PencilAnnotationSelectionTransformerArchive",
|
||||
3094: ".TSD.FreehandDrawingAnimationCommandArchive",
|
||||
3095: ".TSD.InsertCaptionOrTitleCommandArchive",
|
||||
3096: ".TSD.RemoveCaptionOrTitleCommandArchive",
|
||||
3097: ".TSD.StandinCaptionArchive",
|
||||
3098: ".TSD.SetCaptionOrTitleVisibilityCommandArchive",
|
||||
4000: ".TSCE.CalculationEngineArchive",
|
||||
4001: ".TSCE.FormulaRewriteCommandArchive",
|
||||
4003: ".TSCE.NamedReferenceManagerArchive",
|
||||
4004: ".TSCE.TrackedReferenceStoreArchive",
|
||||
4005: ".TSCE.TrackedReferenceArchive",
|
||||
4007: ".TSCE.RemoteDataStoreArchive",
|
||||
4008: ".TSCE.FormulaOwnerDependenciesArchive",
|
||||
4009: ".TSCE.CellRecordTileArchive",
|
||||
4010: ".TSCE.RangePrecedentsTileArchive",
|
||||
4011: ".TSCE.ReferencesToDirtyArchive",
|
||||
5000: ".TSCH.PreUFF.ChartInfoArchive",
|
||||
5002: ".TSCH.PreUFF.ChartGridArchive",
|
||||
5004: ".TSCH.ChartMediatorArchive",
|
||||
5010: ".TSCH.PreUFF.ChartStyleArchive",
|
||||
5011: ".TSCH.PreUFF.ChartSeriesStyleArchive",
|
||||
5012: ".TSCH.PreUFF.ChartAxisStyleArchive",
|
||||
5013: ".TSCH.PreUFF.LegendStyleArchive",
|
||||
5014: ".TSCH.PreUFF.ChartNonStyleArchive",
|
||||
5015: ".TSCH.PreUFF.ChartSeriesNonStyleArchive",
|
||||
5016: ".TSCH.PreUFF.ChartAxisNonStyleArchive",
|
||||
5017: ".TSCH.PreUFF.LegendNonStyleArchive",
|
||||
5020: ".TSCH.ChartStylePreset",
|
||||
5021: ".TSCH.ChartDrawableArchive",
|
||||
5022: ".TSCH.ChartStyleArchive",
|
||||
5023: ".TSCH.ChartNonStyleArchive",
|
||||
5024: ".TSCH.LegendStyleArchive",
|
||||
5025: ".TSCH.LegendNonStyleArchive",
|
||||
5026: ".TSCH.ChartAxisStyleArchive",
|
||||
5027: ".TSCH.ChartAxisNonStyleArchive",
|
||||
5028: ".TSCH.ChartSeriesStyleArchive",
|
||||
5029: ".TSCH.ChartSeriesNonStyleArchive",
|
||||
5030: ".TSCH.ReferenceLineStyleArchive",
|
||||
5031: ".TSCH.ReferenceLineNonStyleArchive",
|
||||
5103: ".TSCH.CommandSetChartTypeArchive",
|
||||
5104: ".TSCH.CommandSetSeriesNameArchive",
|
||||
5105: ".TSCH.CommandSetCategoryNameArchive",
|
||||
5107: ".TSCH.CommandSetScatterFormatArchive",
|
||||
5108: ".TSCH.CommandSetLegendFrameArchive",
|
||||
5109: ".TSCH.CommandSetGridValueArchive",
|
||||
5110: ".TSCH.CommandSetGridDirectionArchive",
|
||||
5115: ".TSCH.CommandAddGridRowsArchive",
|
||||
5116: ".TSCH.CommandAddGridColumnsArchive",
|
||||
5118: ".TSCH.CommandMoveGridRowsArchive",
|
||||
5119: ".TSCH.CommandMoveGridColumnsArchive",
|
||||
5122: ".TSCH.CommandSetPieWedgeExplosion",
|
||||
5123: ".TSCH.CommandStyleSwapArchive",
|
||||
5125: ".TSCH.CommandChartApplyPreset",
|
||||
5126: ".TSCH.ChartCommandArchive",
|
||||
5127: ".TSCH.CommandReplaceGridValuesArchive",
|
||||
5129: ".TSCH.StylePasteboardDataArchive",
|
||||
5130: ".TSCH.CommandSetMultiDataSetIndexArchive",
|
||||
5131: ".TSCH.CommandReplaceThemePresetArchive",
|
||||
5132: ".TSCH.CommandInvalidateWPCaches",
|
||||
5135: ".TSCH.CommandMutatePropertiesArchive",
|
||||
5136: ".TSCH.CommandScaleAllTextArchive",
|
||||
5137: ".TSCH.CommandSetFontFamilyArchive",
|
||||
5138: ".TSCH.CommandApplyFillSetArchive",
|
||||
5139: ".TSCH.CommandReplaceCustomFormatArchive",
|
||||
5140: ".TSCH.CommandAddReferenceLineArchive",
|
||||
5141: ".TSCH.CommandDeleteReferenceLineArchive",
|
||||
5142: ".TSCH.CommandDeleteGridColumnsArchive",
|
||||
5143: ".TSCH.CommandDeleteGridRowsArchive",
|
||||
5145: ".TSCH.ChartSelectionArchive",
|
||||
5146: ".TSCH.ChartTextSelectionTransformerArchive",
|
||||
5147: ".TSCH.ChartSubselectionTransformerArchive",
|
||||
5148: ".TSCH.ChartDrawableSelectionTransformerArchive",
|
||||
5149: ".TSCH.ChartSubselectionTransformerHelperArchive",
|
||||
5150: ".TSCH.ChartRefLineSubselectionTransformerHelperArchive",
|
||||
5151: ".TSCH.CDESelectionTransformerArchive",
|
||||
5152: ".TSCH.ChartSubselectionIdentityTransformerHelperArchive",
|
||||
5154: ".TSCH.CommandPasteStyleArchive",
|
||||
5155: ".TSCH.CommandInducedReplaceChartGrid",
|
||||
5156: ".TSCH.CommandReplaceImageDataArchive",
|
||||
5157: ".TSCH.CommandInduced3DChartGeometry",
|
||||
6000: ".TST.TableInfoArchive",
|
||||
6001: ".TST.TableModelArchive",
|
||||
6002: ".TST.Tile",
|
||||
6003: ".TST.TableStyleArchive",
|
||||
6004: ".TST.CellStyleArchive",
|
||||
6005: ".TST.TableDataList",
|
||||
6006: ".TST.HeaderStorageBucket",
|
||||
6007: ".TST.WPTableInfoArchive",
|
||||
6008: ".TST.TableStylePresetArchive",
|
||||
6009: ".TST.TableStrokePresetArchive",
|
||||
6010: ".TST.ConditionalStyleSetArchive",
|
||||
6011: ".TST.TableDataListSegment",
|
||||
6030: ".TST.SelectionArchive",
|
||||
6031: ".TST.CellMapArchive",
|
||||
6032: ".TST.DeathhawkRdar39989167CellSelectionArchive",
|
||||
6033: ".TST.ConcurrentCellMapArchive",
|
||||
6034: ".TST.ConcurrentCellListArchive",
|
||||
6100: ".TST.TableCommandArchive",
|
||||
6101: ".TST.CommandDeleteCellsArchive",
|
||||
6102: ".TST.CommandInsertColumnsOrRowsArchive",
|
||||
6103: ".TST.CommandRemoveColumnsOrRowsArchive",
|
||||
6104: ".TST.CommandResizeColumnOrRowArchive",
|
||||
6107: ".TST.CommandSetTableNameArchive",
|
||||
6111: ".TST.CommandChangeFreezeHeaderStateArchive",
|
||||
6114: ".TST.CommandSetTableNameEnabledArchive",
|
||||
6117: ".TST.CommandApplyTableStylePresetArchive",
|
||||
6120: ".TST.CommandSetRepeatingHeaderEnabledArchive",
|
||||
6123: ".TST.CommandSortArchive",
|
||||
6125: ".TST.CommandStyleTableArchive",
|
||||
6126: ".TST.CommandSetNumberOfDecimalPlacesArchive",
|
||||
6127: ".TST.CommandSetShowThousandsSeparatorArchive",
|
||||
6128: ".TST.CommandSetNegativeNumberStyleArchive",
|
||||
6129: ".TST.CommandSetFractionAccuracyArchive",
|
||||
6131: ".TST.CommandSetCurrencyCodeArchive",
|
||||
6132: ".TST.CommandSetUseAccountingStyleArchive",
|
||||
6136: ".TST.CommandSetTableFontNameArchive",
|
||||
6137: ".TST.CommandSetTableFontSizeArchive",
|
||||
6142: ".TST.CommandSetTableNameHeightArchive",
|
||||
6144: ".TST.MergeRegionMapArchive",
|
||||
6145: ".TST.CommandHideShowArchive",
|
||||
6146: ".TST.CommandSetBaseArchive",
|
||||
6147: ".TST.CommandSetBasePlacesArchive",
|
||||
6148: ".TST.CommandSetBaseUseMinusSignArchive",
|
||||
6149: ".TST.CommandSetTextStylePropertiesArchive",
|
||||
6150: ".TST.CommandCategoryChangeSummaryAggregateType",
|
||||
6152: ".TST.CommandCategoryResizeColumnOrRowArchive",
|
||||
6153: ".TST.CommandCategoryMoveRowsArchive",
|
||||
6156: ".TST.CommandSetPencilAnnotationsArchive",
|
||||
6157: ".TST.CommandCategoryWillChangeGroupValue",
|
||||
6158: ".TST.CommandApplyConcurrentCellMapArchive",
|
||||
6159: ".TST.CommandSetGroupSortOrderArchive",
|
||||
6179: ".TST.FormulaEqualsTokenAttachmentArchive",
|
||||
6181: ".TST.TokenAttachmentArchive",
|
||||
6182: ".TST.ExpressionNodeArchive",
|
||||
6183: ".TST.BooleanNodeArchive",
|
||||
6184: ".TST.NumberNodeArchive",
|
||||
6185: ".TST.StringNodeArchive",
|
||||
6186: ".TST.ArrayNodeArchive",
|
||||
6187: ".TST.ListNodeArchive",
|
||||
6188: ".TST.OperatorNodeArchive",
|
||||
6189: ".TST.FunctionNodeArchive",
|
||||
6190: ".TST.DateNodeArchive",
|
||||
6191: ".TST.ReferenceNodeArchive",
|
||||
6192: ".TST.DurationNodeArchive",
|
||||
6193: ".TST.ArgumentPlaceholderNodeArchive",
|
||||
6194: ".TST.PostfixOperatorNodeArchive",
|
||||
6195: ".TST.PrefixOperatorNodeArchive",
|
||||
6196: ".TST.FunctionEndNodeArchive",
|
||||
6197: ".TST.EmptyExpressionNodeArchive",
|
||||
6198: ".TST.LayoutHintArchive",
|
||||
6199: ".TST.CompletionTokenAttachmentArchive",
|
||||
6201: ".TST.TableDataList",
|
||||
6204: ".TST.HiddenStateFormulaOwnerArchive",
|
||||
6205: ".TST.CommandSetAutomaticDurationUnitsArchive",
|
||||
6206: ".TST.PopUpMenuModel",
|
||||
6218: ".TST.RichTextPayloadArchive",
|
||||
6220: ".TST.FilterSetArchive",
|
||||
6221: ".TST.CommandSetFiltersEnabledArchive",
|
||||
6224: ".TST.CommandRewriteFilterFormulasForTableResizeArchive",
|
||||
6226: ".TST.CommandTextPreflightInsertCellArchive",
|
||||
6228: ".TST.CommandDeleteCellContentsArchive",
|
||||
6229: ".TST.CommandPostflightSetCellArchive",
|
||||
6235: ".TST.IdentifierNodeArchive",
|
||||
6238: ".TST.CommandSetDateTimeFormatArchive",
|
||||
6239: ".TST.TableCommandSelectionBehaviorArchive",
|
||||
6244: ".TST.CommandApplyCellCommentArchive",
|
||||
6246: ".TST.CommandSetFormulaTokenizationArchive",
|
||||
6247: ".TST.TableStyleNetworkArchive",
|
||||
6250: ".TST.CommandSetFilterSetTypeArchive",
|
||||
6255: ".TST.CommandSetTextStyleArchive",
|
||||
6256: ".TST.CommandJustForNotifyingArchive",
|
||||
6258: ".TST.CommandSetSortOrderArchive",
|
||||
6262: ".TST.CommandAddTableStylePresetArchive",
|
||||
6264: ".TST.CellDiffMapArchive",
|
||||
6265: ".TST.CommandApplyCellContentsArchive",
|
||||
6266: ".TST.CommandRemoveTableStylePresetArchive",
|
||||
6267: ".TST.ColumnRowUIDMapArchive",
|
||||
6268: ".TST.CommandMoveColumnsOrRowsArchive",
|
||||
6269: ".TST.CommandReplaceCustomFormatArchive",
|
||||
6270: ".TST.CommandReplaceTableStylePresetArchive",
|
||||
6271: ".TST.FormulaSelectionArchive",
|
||||
6273: ".TST.CellListArchive",
|
||||
6275: ".TST.CommandApplyCellDiffMapArchive",
|
||||
6276: ".TST.CommandSetFilterSetArchive",
|
||||
6277: ".TST.CommandMutateCellFormatArchive",
|
||||
6278: ".TST.CommandSetStorageLanguageArchive",
|
||||
6280: ".TST.CommandMergeArchive",
|
||||
6281: ".TST.CommandUnmergeArchive",
|
||||
6282: ".TST.CommandApplyCellMapArchive",
|
||||
6283: ".TST.ControlCellSelectionArchive",
|
||||
6284: ".TST.TableNameSelectionArchive",
|
||||
6285: ".TST.CommandRewriteFormulasForTransposeArchive",
|
||||
6287: ".TST.CommandTransposeTableArchive",
|
||||
6289: ".TST.CommandSetDurationStyleArchive",
|
||||
6290: ".TST.CommandSetDurationUnitSmallestLargestArchive",
|
||||
6291: ".TST.CommandRewriteTableFormulasForRewriteSpecArchive",
|
||||
6292: ".TST.CommandRewriteConditionalStylesForRewriteSpecArchive",
|
||||
6293: ".TST.CommandRewriteFilterFormulasForRewriteSpecArchive",
|
||||
6294: ".TST.CommandRewriteSortOrderForRewriteSpecArchive",
|
||||
6295: ".TST.StrokeSelectionArchive",
|
||||
6297: ".TST.LetNodeArchive",
|
||||
6298: ".TST.VariableNodeArchive",
|
||||
6299: ".TST.InNodeArchive",
|
||||
6300: ".TST.CommandInverseMergeArchive",
|
||||
6301: ".TST.CommandMoveCellsArchive",
|
||||
6302: ".TST.DefaultCellStylesContainerArchive",
|
||||
6303: ".TST.CommandRewriteMergeFormulasArchive",
|
||||
6304: ".TST.CommandChangeTableAreaForColumnOrRowArchive",
|
||||
6305: ".TST.StrokeSidecarArchive",
|
||||
6306: ".TST.StrokeLayerArchive",
|
||||
6307: ".TST.CommandChooseTableIdRemapperArchive",
|
||||
6310: ".TST.CommandSetWasCutArchive",
|
||||
6311: ".TST.AutofillSelectionArchive",
|
||||
6312: ".TST.StockCellSelectionArchive",
|
||||
6313: ".TST.CommandSetNowArchive",
|
||||
6314: ".TST.CommandSetStructuredTextImportRecordArchive",
|
||||
6315: ".TST.CommandRewriteCategoryFormulasArchive",
|
||||
6316: ".TST.SummaryModelArchive",
|
||||
6317: ".TST.SummaryCellVendorArchive",
|
||||
6318: ".TST.CategoryOrderArchive",
|
||||
6320: ".TST.CommandCategoryCollapseExpandGroupArchive",
|
||||
6321: ".TST.CommandCategorySetGroupingColumnsArchive",
|
||||
6323: ".TST.CommandRewriteHiddenStatesForGroupByChangeArchive",
|
||||
6350: ".TST.IdempotentSelectionTransformerArchive",
|
||||
6351: ".TST.TableSubSelectionTransformerBaseArchive",
|
||||
6352: ".TST.TableNameSelectionTransformerArchive",
|
||||
6353: ".TST.RegionSelectionTransformerArchive",
|
||||
6354: ".TST.RowColumnSelectionTransformerArchive",
|
||||
6355: ".TST.ControlCellSelectionTransformerArchive",
|
||||
6357: ".TST.ChangePropagationMapWrapper",
|
||||
6358: ".TST.WPSelectionTransformerArchive",
|
||||
6359: ".TST.StockCellSelectionTransformerArchive",
|
||||
6360: ".TST.CommandSetRangeControlMinMaxIncArchive",
|
||||
6361: ".TST.CommandCategorySetLabelRowVisibility",
|
||||
6362: ".TST.CommandRewritePencilAnnotationFormulasArchive",
|
||||
6363: ".TST.PencilAnnotationArchive",
|
||||
6364: ".TST.StrokeSelectionTransformerArchive",
|
||||
6365: ".TST.HeaderNameMgrTileArchive",
|
||||
6366: ".TST.HeaderNameMgrArchive",
|
||||
6367: ".TST.CellDiffArray",
|
||||
6368: ".TST.CellDiffArraySegment",
|
||||
6369: ".TST.PivotOrderArchive",
|
||||
6370: ".TST.PivotOwnerArchive",
|
||||
6371: ".TST.CommandPivotSetPivotRulesArchive",
|
||||
6372: ".TST.CategoryOwnerRefArchive",
|
||||
6373: ".TST.GroupByArchive",
|
||||
6374: ".TST.PivotGroupingColumnOptionsMapArchive",
|
||||
6375: ".TST.CommandPivotSetGroupingColumnOptionsArchive",
|
||||
6376: ".TST.CommandPivotHideShowGrandTotalsArchive",
|
||||
6377: ".TST.CommandPivotSortArchive",
|
||||
6379: ".TST.CommandRewritePivotOwnerFormulasArchive",
|
||||
6380: ".TST.CommandRewriteTrackedReferencesArchive",
|
||||
6381: ".TST.CommandExtendTableIDHistoryArchive",
|
||||
6382: ".TST.GroupByArchive.AggregatorArchive",
|
||||
6383: ".TST.GroupByArchive.GroupNodeArchive",
|
||||
10000: ".TP.DocumentArchive",
|
||||
10001: ".TP.ThemeArchive",
|
||||
10010: ".TP.FloatingDrawablesArchive",
|
||||
10011: ".TP.SectionArchive",
|
||||
10012: ".TP.SettingsArchive",
|
||||
10015: ".TP.DrawablesZOrderArchive",
|
||||
10016: ".TP.UserDefinedGuideMapArchive",
|
||||
10017: ".TP.PageTemplateArchive",
|
||||
10020: ".TSWP.ShapeSelectionTransformerArchive",
|
||||
10021: ".TSWP.SelectionTransformerArchive",
|
||||
10022: ".TSWP.ShapeContentDescription",
|
||||
10023: ".TSWP.TateChuYokoFieldArchive",
|
||||
10024: ".TSWP.DropCapStyleArchive",
|
||||
10101: ".TP.InsertDrawablesCommandArchive",
|
||||
10102: ".TP.RemoveDrawablesCommandArchive",
|
||||
10110: ".TP.MoveDrawablesAttachedCommandArchive",
|
||||
10111: ".TP.MoveDrawablesFloatingCommandArchive",
|
||||
10112: ".TP.MoveInlineDrawableAnchoredCommandArchive",
|
||||
10113: ".TP.InsertFootnoteCommandArchive",
|
||||
10114: ".TP.ChangeFootnoteFormatCommandArchive",
|
||||
10115: ".TP.ChangeFootnoteKindCommandArchive",
|
||||
10116: ".TP.ChangeFootnoteNumberingCommandArchive",
|
||||
10118: ".TP.ChangeFootnoteSpacingCommandArchive",
|
||||
10119: ".TP.MoveAnchoredDrawableInlineCommandArchive",
|
||||
10125: ".TP.InsertSectionTemplateDrawablesCommandArchive",
|
||||
10126: ".TP.RemoveSectionTemplateDrawablesCommandArchive",
|
||||
10127: ".TP.PasteSectionTemplateDrawablesCommandArchive",
|
||||
10130: ".TP.MoveDrawablesPageIndexCommandArchive",
|
||||
10131: ".TP.LayoutStateArchive",
|
||||
10132: ".TP.CanvasSelectionArchive",
|
||||
10133: ".TP.UIStateArchive",
|
||||
10135: ".TP.SectionSelectionArchive",
|
||||
10136: ".TP.SectionSelectionTransformerArchive",
|
||||
10140: ".TP.MoveSectionTemplateDrawableZOrderCommandArchive",
|
||||
10141: ".TP.MoveDrawableZOrderCommandArchive",
|
||||
10143: ".TP.SectionTemplateArchive",
|
||||
10147: ".TP.ViewStateRootArchive",
|
||||
10149: ".TP.TrackChangesCommandArchive",
|
||||
10152: ".TP.InsertSectionBreakCommandArchive",
|
||||
10157: ".TP.PauseChangeTrackingCommandArchive",
|
||||
10160: ".TP.AllFootnoteSelectionArchive",
|
||||
10161: ".TP.SectionGuideCommandArchive",
|
||||
10162: ".TP.DocumentSelectionTransformerArchive",
|
||||
10163: ".TP.CanvasSelectionTransformerArchive",
|
||||
10164: ".TP.AllFootnoteSelectionTransformerArchive",
|
||||
10165: ".TPSOS.InducedVerifyDocumentWithServerCommandArchive",
|
||||
10166: ".TP.NullChildHintArchive",
|
||||
10167: ".TPSOS.InducedVerifyDrawableZOrdersWithServerCommandArchive",
|
||||
10169: ".TP.ReplaceHeaderFooterStorageCommandArchive",
|
||||
10170: ".TP.ChangePageTemplateForSectionCommandArchive",
|
||||
10171: ".TP.PrototypeForUndoChangePageTemplateForSection",
|
||||
10172: ".TPSOS.ReapplyPageTemplateCommandArchive",
|
||||
10173: ".TP.SectionsAppNativeObjectArchive",
|
||||
10174: ".TP.SectionPasteboardObjectArchive",
|
||||
10175: ".TP.MailMergeSettingsArchive",
|
||||
11000: ".TSP.PasteboardObject",
|
||||
11006: ".TSP.PackageMetadata",
|
||||
11007: ".TSP.PasteboardMetadata",
|
||||
11008: ".TSP.ObjectContainer",
|
||||
11009: ".TSP.ViewStateMetadata",
|
||||
11010: ".TSP.ObjectCollection",
|
||||
11011: ".TSP.DocumentMetadata",
|
||||
11012: ".TSP.SupportMetadata",
|
||||
11013: ".TSP.ObjectSerializationMetadata",
|
||||
11014: ".TSP.DataMetadata",
|
||||
11015: ".TSP.DataMetadataMap",
|
||||
11016: ".TSP.LargeNumberArraySegment",
|
||||
11017: ".TSP.LargeStringArraySegment",
|
||||
11018: ".TSP.LargeLazyObjectArraySegment",
|
||||
11019: ".TSP.LargeNumberArray",
|
||||
11020: ".TSP.LargeStringArray",
|
||||
11021: ".TSP.LargeLazyObjectArray",
|
||||
11024: ".TSP.LargeUUIDArraySegment",
|
||||
11025: ".TSP.LargeUUIDArray",
|
||||
11026: ".TSP.LargeObjectArraySegment",
|
||||
11027: ".TSP.LargeObjectArray",
|
||||
} as {[key: number]: string};
|
1
src/vite-env.d.ts
vendored
Normal file
1
src/vite-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
/// <reference types="vite/client" />
|
23
tsconfig.json
Normal file
23
tsconfig.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ESNext",
|
||||
"lib": ["DOM", "DOM.Iterable", "ESNext"],
|
||||
"module": "ESNext",
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsx",
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
},
|
||||
"include": ["src"],
|
||||
"references": [{ "path": "./tsconfig.node.json" }]
|
||||
}
|
10
tsconfig.node.json
Normal file
10
tsconfig.node.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"skipLibCheck": true,
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "node",
|
||||
"allowSyntheticDefaultImports": true
|
||||
},
|
||||
"include": ["vite.config.ts"]
|
||||
}
|
65
types.ts
Normal file
65
types.ts
Normal file
@ -0,0 +1,65 @@
|
||||
/// <reference path="../../types/index.d.ts"/>
|
||||
|
||||
declare type RawData = Uint8Array | number[];
|
||||
interface BinaryRecord {
|
||||
n?: string;
|
||||
f: any;
|
||||
T?: -1 | 1;
|
||||
p?: number;
|
||||
r?: number;
|
||||
}
|
||||
declare function recordhopper(data: RawData, cb:(val: any, R: BinaryRecord, RT: number)=>void): void;
|
||||
declare interface ReadableData {
|
||||
l: number;
|
||||
read_shift(t: 4): number;
|
||||
read_shift(t: any): any;
|
||||
}
|
||||
declare type ParseFunc<T> = (data: ReadableData, length: number) => T;
|
||||
declare var parse_XLWideString: ParseFunc<string>;
|
||||
|
||||
declare interface WritableData {
|
||||
l: number;
|
||||
write_shift(t: 4, val: number): void;
|
||||
write_shift(t: number, val: string|number, f?: string): any;
|
||||
}
|
||||
declare type WritableRawData = WritableData & RawData;
|
||||
interface BufArray {
|
||||
end(): RawData;
|
||||
next(sz: number): WritableData;
|
||||
push(buf: RawData): void;
|
||||
}
|
||||
declare function buf_array(): BufArray;
|
||||
declare function write_record(ba: BufArray, type: number, payload?: RawData, length?: number): void;
|
||||
declare function new_buf(sz: number): RawData & WritableData & ReadableData;
|
||||
|
||||
declare var tagregex: RegExp;
|
||||
declare var XML_HEADER: string;
|
||||
declare var RELS: any;
|
||||
declare function parsexmltag(tag: string, skip_root?: boolean, skip_LC?: boolean): object;
|
||||
declare function strip_ns(x: string): string;
|
||||
declare function write_UInt32LE(x: number, o?: WritableData): RawData;
|
||||
declare function write_XLWideString(data: string, o?: WritableData): RawData;
|
||||
declare function writeuint16(x: number): RawData;
|
||||
|
||||
declare function utf8read(x: string): string;
|
||||
declare function utf8write(x: string): string;
|
||||
|
||||
declare function a2s(a: RawData): string;
|
||||
declare function s2a(s: string): RawData;
|
||||
|
||||
interface ParseXLMetaOptions {
|
||||
WTF?: number|boolean;
|
||||
}
|
||||
interface XLMDT {
|
||||
name: string;
|
||||
offsets?: number[];
|
||||
}
|
||||
interface XLMetaRef {
|
||||
type: string;
|
||||
index: number;
|
||||
}
|
||||
interface XLMeta {
|
||||
Types: XLMDT[];
|
||||
Cell: XLMetaRef[];
|
||||
Value: XLMetaRef[];
|
||||
}
|
24
vite.config.ts
Normal file
24
vite.config.ts
Normal file
@ -0,0 +1,24 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import react from '@vitejs/plugin-react'
|
||||
import { VitePWA } from "vite-plugin-pwa";
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react(), VitePWA({
|
||||
registerType: 'autoUpdate',
|
||||
workbox: {
|
||||
globPatterns: ['**/*.{js,css,html,ico,png,svg,numbers}', '**/protos']
|
||||
},
|
||||
manifest: {
|
||||
icons: [
|
||||
{
|
||||
src: "https://sheetjs.com/favico/favicon-196x196.png",
|
||||
sizes: "196x196",
|
||||
type: "image/png",
|
||||
purpose: "any"
|
||||
}
|
||||
]
|
||||
}
|
||||
})],
|
||||
base: ""
|
||||
})
|
Loading…
Reference in New Issue
Block a user