jostraca 0.30.1 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/build/BuildContext.d.ts +1 -0
  2. package/dist/build/BuildContext.js +10 -0
  3. package/dist/build/BuildContext.js.map +1 -1
  4. package/dist/build/BuildMeta.js +28 -7
  5. package/dist/build/BuildMeta.js.map +1 -1
  6. package/dist/build/FileHandler.d.ts +11 -4
  7. package/dist/build/FileHandler.js +479 -98
  8. package/dist/build/FileHandler.js.map +1 -1
  9. package/dist/cmp/Content.js.map +1 -1
  10. package/dist/cmp/Copy.js +5 -1
  11. package/dist/cmp/Copy.js.map +1 -1
  12. package/dist/cmp/File.js +2 -0
  13. package/dist/cmp/File.js.map +1 -1
  14. package/dist/cmp/Folder.js.map +1 -1
  15. package/dist/cmp/Fragment.js +36 -7
  16. package/dist/cmp/Fragment.js.map +1 -1
  17. package/dist/cmp/Inject.js +30 -1
  18. package/dist/cmp/Inject.js.map +1 -1
  19. package/dist/cmp/Line.js.map +1 -1
  20. package/dist/cmp/List.js.map +1 -1
  21. package/dist/cmp/None.js.map +1 -1
  22. package/dist/cmp/Project.js.map +1 -1
  23. package/dist/cmp/Slot.js.map +1 -1
  24. package/dist/diff.d.ts +36 -0
  25. package/dist/diff.js +446 -0
  26. package/dist/diff.js.map +1 -0
  27. package/dist/jostraca.d.ts +19 -18
  28. package/dist/jostraca.js +83 -24
  29. package/dist/jostraca.js.map +1 -1
  30. package/dist/op/ContentOp.js.map +1 -1
  31. package/dist/op/CopyOp.js +158 -22
  32. package/dist/op/CopyOp.js.map +1 -1
  33. package/dist/op/FileOp.js +26 -27
  34. package/dist/op/FileOp.js.map +1 -1
  35. package/dist/op/FolderOp.js +3 -0
  36. package/dist/op/FolderOp.js.map +1 -1
  37. package/dist/op/FragmentOp.js.map +1 -1
  38. package/dist/op/InjectOp.js +34 -7
  39. package/dist/op/InjectOp.js.map +1 -1
  40. package/dist/op/NoneOp.js.map +1 -1
  41. package/dist/op/ProjectOp.js.map +1 -1
  42. package/dist/op/SlotOp.js.map +1 -1
  43. package/dist/tsconfig.tsbuildinfo +1 -1
  44. package/dist/types.d.ts +1 -0
  45. package/dist/util/basic.d.ts +5 -1
  46. package/dist/util/basic.js +219 -10
  47. package/dist/util/basic.js.map +1 -1
  48. package/dist/util/point.d.ts +8 -7
  49. package/dist/util/point.js.map +1 -1
  50. package/gen/readme.js +2 -1
  51. package/package.json +20 -12
  52. package/src/build/BuildContext.ts +12 -0
  53. package/src/build/BuildMeta.ts +31 -8
  54. package/src/build/FileHandler.ts +500 -127
  55. package/src/cmp/Copy.ts +5 -1
  56. package/src/cmp/File.ts +3 -0
  57. package/src/cmp/Fragment.ts +41 -7
  58. package/src/cmp/Inject.ts +38 -1
  59. package/src/diff.ts +657 -0
  60. package/src/jostraca.ts +83 -20
  61. package/src/op/CopyOp.ts +173 -22
  62. package/src/op/FileOp.ts +29 -31
  63. package/src/op/FolderOp.ts +6 -0
  64. package/src/op/InjectOp.ts +45 -7
  65. package/src/tsconfig.json +3 -1
  66. package/src/types.ts +5 -0
  67. package/src/util/basic.ts +251 -11
  68. package/README.md +0 -289
@@ -34,6 +34,7 @@ declare class BuildContext {
34
34
  version: boolean;
35
35
  }, fs: () => FST, now: () => number);
36
36
  addmeta(file: string, meta: any): void;
37
+ folderPath(): string;
37
38
  duplicateFolder(): string;
38
39
  }
39
40
  export { BuildContext };
@@ -50,6 +50,16 @@ class BuildContext {
50
50
  addmeta(file, meta) {
51
51
  this.bmeta.add(file, meta);
52
52
  }
53
+ // Folder path segments for the current build position, as a canonical
54
+ // (forward-slash) prefix. When neither a Project nor a Folder has seeded
55
+ // the path, fall back to the base output folder — otherwise a top-level
56
+ // File would join onto '' and resolve to '/<name>' at the filesystem
57
+ // root, ignoring the configured output folder entirely. FolderOp.before
58
+ // applies the same fallback when seeding the path.
59
+ folderPath() {
60
+ const { path, parent } = this.current.folder;
61
+ return 0 < path.length ? path.join('/') : parent;
62
+ }
53
63
  duplicateFolder() {
54
64
  if (null == this.dfolder) {
55
65
  this.dfolder =
@@ -1 +1 @@
1
- {"version":3,"file":"BuildContext.js","sourceRoot":"","sources":["../../src/build/BuildContext.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;AAS5B,+CAEsB;AAEtB,2CAEoB;AAapB,MAAM,EAAE,GAAG,eAAe,CAAA;AAG1B,4DAA4D;AAC5D,MAAM,YAAY;IAEhB,EAAE,CAAW;IACb,GAAG,CAAc;IAEjB,KAAK,CAAW;IAChB,EAAE,CAAa;IACf,KAAK,CAAO;IACZ,IAAI,CAAQ;IACZ,GAAG,CAAK;IACR,MAAM,CAAQ;IACd,OAAO,CASN;IACD,GAAG,CAGF;IAED,OAAO,CAAS;IAGhB,YACE,MAAc,EACd,QAAkB,EAClB,OAIC,EACD,EAAa,EACb,GAAiB;QAEjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,EAAE,GAAG,iCAAiC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACrE,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAA;QAEjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS,EAAE;aAClB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS,EAAE;gBACjB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE;aACT;YACD,4BAA4B;YAC5B,IAAI,EAAE,SAAS,EAAE;YACjB,OAAO,EAAE,SAAS;SACnB,CAAA;QACD,IAAI,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;QAEpC,IAAI,CAAC,EAAE,GAAG,IAAI,yBAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACrC,CAAC;IAGD,OAAO,CAAC,IAAY,EAAE,IAAS;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5B,CAAC;IAGD,eAAe;QACb,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO;gBACV,mBAAI,CAAC,SAAS,CACZ,mBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QACtE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;AAUC,oCAAY;AAPd,SAAS,SAAS;IAChB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;AAC1D,CAAC"}
1
+ {"version":3,"file":"BuildContext.js","sourceRoot":"","sources":["../../src/build/BuildContext.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;AAS5B,+CAEsB;AAEtB,2CAEoB;AAapB,MAAM,EAAE,GAAG,eAAe,CAAA;AAG1B,4DAA4D;AAC5D,MAAM,YAAY;IAEhB,EAAE,CAAW;IACb,GAAG,CAAc;IAEjB,KAAK,CAAW;IAChB,EAAE,CAAa;IACf,KAAK,CAAO;IACZ,IAAI,CAAQ;IACZ,GAAG,CAAK;IACR,MAAM,CAAQ;IACd,OAAO,CASN;IACD,GAAG,CAGF;IAED,OAAO,CAAS;IAGhB,YACE,MAAc,EACd,QAAkB,EAClB,OAIC,EACD,EAAa,EACb,GAAiB;QAEjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,EAAE,GAAG,iCAAiC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACrE,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAA;QAEjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS,EAAE;aAClB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS,EAAE;gBACjB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE;aACT;YACD,4BAA4B;YAC5B,IAAI,EAAE,SAAS,EAAE;YACjB,OAAO,EAAE,SAAS;SACnB,CAAA;QACD,IAAI,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;QAEpC,IAAI,CAAC,EAAE,GAAG,IAAI,yBAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACrC,CAAC;IAGD,OAAO,CAAC,IAAY,EAAE,IAAS;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5B,CAAC;IAGD,sEAAsE;IACtE,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,wEAAwE;IACxE,mDAAmD;IACnD,UAAU;QACR,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;QAC5C,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAClD,CAAC;IAGD,eAAe;QACb,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO;gBACV,mBAAI,CAAC,SAAS,CACZ,mBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QACtE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;QAUC,YAAY;AAPd,SAAS,SAAS;IAChB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;AAC1D,CAAC"}
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BuildMeta = void 0;
7
7
  const node_path_1 = __importDefault(require("node:path"));
8
8
  const basic_1 = require("../util/basic");
9
+ // Log non-fatal weirdness.
10
+ const dlog = (0, basic_1.getdlog)('jostraca', __filename);
9
11
  // Handle loading, recording,and saving of build meta data
10
12
  class BuildMeta {
11
13
  fh;
@@ -44,7 +46,7 @@ class BuildMeta {
44
46
  // save over previous
45
47
  saveMetaData(this.fh, this.next);
46
48
  if (false === this.fh.control.version) {
47
- this.fh.saveFile(node_path_1.default.join(this.next.foldername, '.gitignore'), `
49
+ this.fh.saveFile(node_path_1.default.join(this.fh.folder, this.next.foldername, '.gitignore'), `
48
50
  ${this.next.filename}
49
51
  generated
50
52
  `);
@@ -54,17 +56,36 @@ generated
54
56
  }
55
57
  exports.BuildMeta = BuildMeta;
56
58
  function loadMetaData(fh, bmeta) {
57
- const metapath = node_path_1.default.join(bmeta.foldername, bmeta.filename);
59
+ // Full (folder-prefixed) path: the FileHandler FS methods use paths
60
+ // directly and no longer re-join `this.folder`.
61
+ const metapath = node_path_1.default.join(fh.folder, bmeta.foldername, bmeta.filename);
58
62
  if (fh.existsFile(metapath)) {
59
- const json = fh.loadJSON(metapath);
60
- bmeta.last = json.last;
61
- bmeta.hlast = json.hlast;
62
- bmeta.files = json.files;
63
+ try {
64
+ const json = fh.loadJSON(metapath);
65
+ bmeta.last = null == json?.last ? -1 : json.last;
66
+ bmeta.hlast = null == json?.hlast ? -1 : json.hlast;
67
+ bmeta.files = json?.files || {};
68
+ }
69
+ catch (err) {
70
+ // A truncated or hand-edited meta log used to throw straight out of
71
+ // the BuildMeta constructor, so a corrupt bookkeeping file blocked
72
+ // generation entirely — with a JSON parse error that says nothing
73
+ // about how to recover. The log is regenerated on every run, so
74
+ // starting from empty state is safe: the only cost is that merge
75
+ // baselines look absent for one run.
76
+ dlog('meta', 'unreadable meta log, continuing with empty state: ' +
77
+ metapath + ' err=' + err.message);
78
+ bmeta.last = -1;
79
+ bmeta.hlast = -1;
80
+ bmeta.files = {};
81
+ }
63
82
  }
64
83
  return bmeta;
65
84
  }
66
85
  function saveMetaData(fh, bmeta) {
67
- const metapath = node_path_1.default.join(bmeta.foldername, bmeta.filename);
86
+ // Full (folder-prefixed) path: the FileHandler FS methods use paths
87
+ // directly and no longer re-join `this.folder`.
88
+ const metapath = node_path_1.default.join(fh.folder, bmeta.foldername, bmeta.filename);
68
89
  fh.saveJSON(metapath, bmeta);
69
90
  }
70
91
  //# sourceMappingURL=BuildMeta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuildMeta.js","sourceRoot":"","sources":["../../src/build/BuildMeta.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;AAI5B,yCAAwC;AAmBxC,0DAA0D;AAC1D,MAAM,SAAS;IAEb,EAAE,CAAa;IAEf,IAAI,CAAe;IACnB,IAAI,CAAe;IAEnB,YACE,EAAe;QAEf,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QAEZ,+DAA+D;QAC/D,IAAI,CAAC,IAAI,GAAG;YACV,UAAU,EAAE,WAAW;YACvB,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE,CAAC,CAAC;YACR,KAAK,EAAE,CAAC,CAAC;YACT,KAAK,EAAE,EAAE;SACV,CAAA;QAED,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE5C,4BAA4B;QAE5B,IAAI,CAAC,IAAI,GAAG;YACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAChC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,IAAI,EAAE,CAAC,CAAC;YACR,KAAK,EAAE,CAAC,CAAC;YACT,KAAK,EAAE,EAAE;SACV,CAAA;IAEH,CAAC;IAGD,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvB,CAAC;IAGD,GAAG,CAAC,IAAY,EAAE,IAAS;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;IAC/B,CAAC;IAGD,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE1C,qBAAqB;QACrB,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhC,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;EACpE,IAAI,CAAC,IAAI,CAAC,QAAQ;;CAEnB,CAAC,CAAA;QACE,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;CACF;AAsBC,8BAAS;AAnBX,SAAS,YAAY,CAAC,EAAe,EAAE,KAAoB;IACzD,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAClC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACtB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC1B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAGD,SAAS,YAAY,CAAC,EAAe,EAAE,KAAoB;IACzD,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC5D,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"BuildMeta.js","sourceRoot":"","sources":["../../src/build/BuildMeta.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ declare class FileHandler {
30
30
  unchanged: string[];
31
31
  };
32
32
  createdDirs: Set<string>;
33
+ savedPaths: Set<string>;
33
34
  constructor(bctx: BuildContext, existing: {
34
35
  txt: any;
35
36
  bin: any;
@@ -39,13 +40,15 @@ declare class FileHandler {
39
40
  version: boolean;
40
41
  });
41
42
  relative(path: string, whence?: string): string;
42
- save(path: string, newContentSource: string | Buffer, write?: boolean | string, whence?: string): void;
43
+ withinFolder(path: string): boolean;
44
+ saveBinary(path: string, newContentSource: string | Buffer, whence?: string): void;
45
+ save(path: string, newContentSource: string | Buffer, write?: boolean | string, whence?: string, mode?: number, isText?: boolean): void;
43
46
  copy(frompath: string, topath: string, write?: boolean | string, whence?: string): void;
44
- merge(editA: string, orig: string, editB: string, why: string[]): {
47
+ merge(generated: string, baseline: string, existing: string, why: string[]): {
45
48
  content: string;
46
49
  conflict: boolean;
47
50
  };
48
- diff(oldcontent: string, newcontent: string): string;
51
+ diff(generated: string, existing: string): string;
49
52
  existsFile(path: string, whence?: string): boolean;
50
53
  copyFile(frompath: string, topath: string, whence?: string): void;
51
54
  loadJSON(path: string, opts?: any | string, whence?: string): any;
@@ -53,8 +56,12 @@ declare class FileHandler {
53
56
  loadFile(path: string, opts?: any | string, whence?: string): string | Buffer;
54
57
  ensureFolder(path: string): void;
55
58
  private ensureDir;
59
+ private chmodUnchanged;
60
+ private writeFileAtomic;
56
61
  saveFile(path: string, content: string | Buffer, opts?: any | string, whence?: string): void;
57
62
  filelog(kind: string, path: string): void;
58
63
  }
64
+ declare function annotatedPath(target: string, kind: string): string;
65
+ declare function validName(name: any, kind: string, errmark: string): void;
59
66
  declare function validPath(path: string, maxdepth: number, errmark: string): void;
60
- export { validPath, FileHandler };
67
+ export { annotatedPath, validName, validPath, FileHandler };